MegaSteve/ScoreBoard.ixx

100 lines
1.9 KiB
C++

module;
#include <vector>
#include <string>
export module ScoreBoard;
import GameObject;
import Math;
struct Digit : GameObject
{
static constexpr Rect DigitsRectList[]
{
{ 1294,2,1314,23 },
{ 1314,2,1334,23 },
{ 1334,2,1354,23 },
{ 1354,2,1374,23 },
{ 1374,2,1394,23 },
{ 1394,2,1414,23 },
{ 1414,2,1434,23 },
{ 1434,2,1454,23 },
{ 1454,2,1474,23 },
{ 1474,2,1494,23 },
};
char value;
virtual void OnStartUp()
{
}
virtual void OnCleanUp()
{
}
virtual void OnUpdate(float delta)
{
}
virtual void OnLaterUpdate(float delta)
{
}
};
export struct ScoreBoard : GameObject
{
float score = 0;
std::vector<Digit> digits;
virtual void OnStartUp()
{
Posi = { 900,400 };
}
virtual void OnCleanUp()
{
}
virtual void OnUpdate(float delta)
{
auto str = std::to_string(static_cast<int>(score/100.f));
digits.resize(str.size());
for (size_t i = 0; i < digits.size(); i++)
{
auto& digit = digits[i];
digit.value = str[i] - '0';
digit.imge = imge;
digit.imge.rect = Digit::DigitsRectList[digit.value];
digit.Size = digit.imge.rect.size();
digit.Posi = { Posi.x + i * digit.Size.x, Posi.y };
}
}
virtual void OnLaterUpdate(float delta)
{
}
virtual void OnRender() override
{
for (auto& digit : digits)
{
digit.OnRender();
}
}
virtual void OnReset() override
{
score = 0;
digits.resize(1);
auto& digit = digits[0];
digit.value = 0;
digit.imge = imge;
digit.imge.rect = Digit::DigitsRectList[digit.value];
digit.Size = digit.imge.rect.size();
digit.Posi = Posi;
}
void operator+=(float value)
{
score += value;
}
};