module; #include #include 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 digits; virtual void OnStartUp() { Posi = { 900,400 }; } virtual void OnCleanUp() { } virtual void OnUpdate(float delta) { auto str = std::to_string(static_cast(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; } };