Skip to content

Commit

Permalink
Changed wait icon display to use switch statements
Browse files Browse the repository at this point in the history
  • Loading branch information
PringlesGang committed Oct 2, 2024
1 parent a6fc3dd commit 7643601
Showing 1 changed file with 88 additions and 66 deletions.
154 changes: 88 additions & 66 deletions src/hud/waiticondisplay.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,87 +15,109 @@ using namespace Impacto::Profile::Dialogue;
using namespace Impacto::Profile::CHLCC;

void Init() {
if (WaitIconCurrentType == +WaitIconType::SpriteAnim) {
SpriteAnim = WaitIconSpriteAnim.Instantiate();
SpriteAnim.LoopMode = ALM_Loop;
SpriteAnim.StartIn();
} else if (WaitIconCurrentType == +WaitIconType::SpriteAnimFixed) {
SpriteAnim = WaitIconSpriteAnim.Instantiate();
SpriteAnim.LoopMode = ALM_Stop;
FixedSpriteAnim = static_cast<FixedSpriteAnimation*>(&SpriteAnim);
FixedSpriteAnim->Def->FixSpriteId = WaitIconFixedSpriteId;
} else {
SimpleAnim.DurationIn = WaitIconAnimationDuration;
SimpleAnim.LoopMode = ALM_Loop;
SimpleAnim.StartIn();
switch (WaitIconCurrentType) {
case WaitIconType::SpriteAnim:
SpriteAnim = WaitIconSpriteAnim.Instantiate();
SpriteAnim.LoopMode = ALM_Loop;
SpriteAnim.StartIn();
break;
case WaitIconType::SpriteAnimFixed:
SpriteAnim = WaitIconSpriteAnim.Instantiate();
SpriteAnim.LoopMode = ALM_Stop;
FixedSpriteAnim = static_cast<FixedSpriteAnimation*>(&SpriteAnim);
FixedSpriteAnim->Def->FixSpriteId = WaitIconFixedSpriteId;
break;
default:
SimpleAnim.DurationIn = WaitIconAnimationDuration;
SimpleAnim.LoopMode = ALM_Loop;
SimpleAnim.StartIn();
break;
}
}

void Update(float dt) {
if (WaitIconCurrentType == +WaitIconType::SpriteAnim) {
SpriteAnim.Update(dt);
} else if (WaitIconCurrentType == +WaitIconType::SpriteAnimFixed) {
FixedSpriteAnim->Update(dt);
} else {
SimpleAnim.Update(dt);
switch (WaitIconCurrentType) {
case WaitIconType::SpriteAnim:
SpriteAnim.Update(dt);
break;
case WaitIconType::SpriteAnimFixed:
FixedSpriteAnim->Update(dt);
break;
default:
SimpleAnim.Update(dt);
break;
}
}

void Render(glm::vec2 pos, glm::vec4 opacityTint, DialoguePageMode mode) {
if (WaitIconCurrentType == +WaitIconType::SpriteAnim) {
if (DialogueBoxCurrentType == +DialogueBoxType::CHLCC) {
// To deal with multiple DialogueBox
glm::vec4 col = glm::vec4(1.0f, 1.0f, 1.0f, opacityTint.a);
// Erin DialogueBox
if (mode == DPM_REV) {
Renderer->DrawSprite(
SpriteAnim.CurrentSprite(),
glm::vec2(
pos.x +
Impacto::Profile::CHLCC::DialogueBox::REVWaitIconOffset.x,
pos.y +
Impacto::Profile::CHLCC::DialogueBox::REVWaitIconOffset.y),
col);
switch (WaitIconCurrentType) {
case WaitIconType::SpriteAnim:
if (DialogueBoxCurrentType == +DialogueBoxType::CHLCC) {
// To deal with multiple DialogueBox
glm::vec4 col = glm::vec4(1.0f, 1.0f, 1.0f, opacityTint.a);
// Erin DialogueBox
if (mode == DPM_REV) {
Renderer->DrawSprite(
SpriteAnim.CurrentSprite(),
glm::vec2(
pos.x +
Impacto::Profile::CHLCC::DialogueBox::REVWaitIconOffset.x,
pos.y +
Impacto::Profile::CHLCC::DialogueBox::REVWaitIconOffset
.y),
col);

} else {
Renderer->DrawSprite(
SpriteAnim.CurrentSprite(),
glm::vec2(pos.x + WaitIconOffset.x, pos.y + WaitIconOffset.y),
col);
}
} else {
Renderer->DrawSprite(
SpriteAnim.CurrentSprite(),
glm::vec2(pos.x + WaitIconOffset.x, pos.y + WaitIconOffset.y), col);
glm::vec2(pos.x + WaitIconOffset.x, pos.y + WaitIconOffset.y),
opacityTint);
}
} else {
break;

case WaitIconType::SpriteAnimFixed:
Renderer->DrawSprite(
SpriteAnim.CurrentSprite(),
glm::vec2(pos.x + WaitIconOffset.x, pos.y + WaitIconOffset.y),
opacityTint);
FixedSpriteAnim->CurrentSprite(),
glm::vec2(WaitIconOffset.x - 50, WaitIconOffset.y - 50), opacityTint);
break;

case WaitIconType::RotateZ: {
// TODO: MO6TW only for now
glm::vec3 euler(SimpleAnim.Progress * 2.0f * M_PI, 0, 0.6f);
glm::quat quat;
eulerZYXToQuat(&euler, &quat);

glm::vec2 vanishingPoint(
(pos.x + WaitIconOffset.x) + (WaitIconSprite.ScaledWidth() / 2.0f),
(pos.y + WaitIconOffset.y) + (WaitIconSprite.ScaledHeight() / 2.0f));

Renderer->DrawSprite3DRotated(
WaitIconSprite,
glm::vec2(pos.x + WaitIconOffset.x, pos.y + WaitIconOffset.y), 1.0f,
vanishingPoint, true, quat, opacityTint);
break;
}
} else if (WaitIconCurrentType == +WaitIconType::SpriteAnimFixed) {
Renderer->DrawSprite(
FixedSpriteAnim->CurrentSprite(),
glm::vec2(WaitIconOffset.x - 50, WaitIconOffset.y - 50), opacityTint);
} else if (WaitIconCurrentType == +WaitIconType::RotateZ) {
// TODO: MO6TW only for now
glm::vec3 euler(SimpleAnim.Progress * 2.0f * M_PI, 0, 0.6f);
glm::quat quat;
eulerZYXToQuat(&euler, &quat);

glm::vec2 vanishingPoint(
(pos.x + WaitIconOffset.x) + (WaitIconSprite.ScaledWidth() / 2.0f),
(pos.y + WaitIconOffset.y) + (WaitIconSprite.ScaledHeight() / 2.0f));

Renderer->DrawSprite3DRotated(
WaitIconSprite,
glm::vec2(pos.x + WaitIconOffset.x, pos.y + WaitIconOffset.y), 1.0f,
vanishingPoint, true, quat, opacityTint);
} else if (WaitIconCurrentType == +WaitIconType::None) {
Renderer->DrawSprite(
WaitIconSprite,
glm::vec2(pos.x + WaitIconOffset.x, pos.y + WaitIconOffset.y),
opacityTint, glm::vec2(1.0f));
} else {
Renderer->DrawSprite(
WaitIconSprite,
glm::vec2(pos.x + WaitIconOffset.x, pos.y + WaitIconOffset.y),
opacityTint, glm::vec2(1.0f), SimpleAnim.Progress * 2.0f * (float)M_PI);

case WaitIconType::None:
Renderer->DrawSprite(
WaitIconSprite,
glm::vec2(pos.x + WaitIconOffset.x, pos.y + WaitIconOffset.y),
opacityTint, glm::vec2(1.0f));
break;

default:
Renderer->DrawSprite(
WaitIconSprite,
glm::vec2(pos.x + WaitIconOffset.x, pos.y + WaitIconOffset.y),
opacityTint, glm::vec2(1.0f),
SimpleAnim.Progress * 2.0f * (float)M_PI);
break;
}
}

Expand Down

0 comments on commit 7643601

Please sign in to comment.