100 lines
1.9 KiB
Plaintext
100 lines
1.9 KiB
Plaintext
|
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;
|
||
|
}
|
||
|
};
|