Skip to content

Commit

Permalink
Added show and hide functions to wait icon
Browse files Browse the repository at this point in the history
  • Loading branch information
PringlesGang committed Oct 2, 2024
1 parent e7403ee commit a6fc3dd
Show file tree
Hide file tree
Showing 4 changed files with 54 additions and 6 deletions.
42 changes: 36 additions & 6 deletions src/hud/waiticondisplay.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ namespace WaitIconDisplay {

static Animation SimpleAnim;
static SpriteAnimation SpriteAnim;
static FixedSpriteAnimation FixedSpriteAnim;
static FixedSpriteAnimation* FixedSpriteAnim;

using namespace Impacto::Profile::Dialogue;
using namespace Impacto::Profile::CHLCC;
Expand All @@ -22,9 +22,8 @@ void Init() {
} else if (WaitIconCurrentType == +WaitIconType::SpriteAnimFixed) {
SpriteAnim = WaitIconSpriteAnim.Instantiate();
SpriteAnim.LoopMode = ALM_Stop;
FixedSpriteAnim = static_cast<FixedSpriteAnimation&>(SpriteAnim);
FixedSpriteAnim.Def->FixSpriteId = WaitIconFixedSpriteId;
FixedSpriteAnim.StartIn();
FixedSpriteAnim = static_cast<FixedSpriteAnimation*>(&SpriteAnim);
FixedSpriteAnim->Def->FixSpriteId = WaitIconFixedSpriteId;
} else {
SimpleAnim.DurationIn = WaitIconAnimationDuration;
SimpleAnim.LoopMode = ALM_Loop;
Expand All @@ -36,11 +35,12 @@ void Update(float dt) {
if (WaitIconCurrentType == +WaitIconType::SpriteAnim) {
SpriteAnim.Update(dt);
} else if (WaitIconCurrentType == +WaitIconType::SpriteAnimFixed) {
FixedSpriteAnim.Update(dt);
FixedSpriteAnim->Update(dt);
} else {
SimpleAnim.Update(dt);
}
}

void Render(glm::vec2 pos, glm::vec4 opacityTint, DialoguePageMode mode) {
if (WaitIconCurrentType == +WaitIconType::SpriteAnim) {
if (DialogueBoxCurrentType == +DialogueBoxType::CHLCC) {
Expand Down Expand Up @@ -70,7 +70,7 @@ void Render(glm::vec2 pos, glm::vec4 opacityTint, DialoguePageMode mode) {
}
} else if (WaitIconCurrentType == +WaitIconType::SpriteAnimFixed) {
Renderer->DrawSprite(
FixedSpriteAnim.CurrentSprite(),
FixedSpriteAnim->CurrentSprite(),
glm::vec2(WaitIconOffset.x - 50, WaitIconOffset.y - 50), opacityTint);
} else if (WaitIconCurrentType == +WaitIconType::RotateZ) {
// TODO: MO6TW only for now
Expand Down Expand Up @@ -99,5 +99,35 @@ void Render(glm::vec2 pos, glm::vec4 opacityTint, DialoguePageMode mode) {
}
}

void Show(bool reset) {
switch (WaitIconCurrentType) {
case WaitIconType::SpriteAnim:
case WaitIconType::SpriteAnimFixed:
SpriteAnim.StartIn(reset);
break;
case WaitIconType::Rotate:
case WaitIconType::RotateZ:
SimpleAnim.StartIn(reset);
break;
default:
break;
}
}

void Hide(bool reset) {
switch (WaitIconCurrentType) {
case WaitIconType::SpriteAnim:
case WaitIconType::SpriteAnimFixed:
SpriteAnim.StartOut(reset);
break;
case WaitIconType::Rotate:
case WaitIconType::RotateZ:
SimpleAnim.StartOut(reset);
break;
default:
break;
}
}

} // namespace WaitIconDisplay
} // namespace Impacto
2 changes: 2 additions & 0 deletions src/hud/waiticondisplay.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ BETTER_ENUM(WaitIconType, int, None, SpriteAnim, SpriteAnimFixed, Rotate, Fixed,
void Init();
void Update(float dt);
void Render(glm::vec2 pos, glm::vec4 opacityTint, DialoguePageMode mode);
void Show(bool reset = false);
void Hide(bool reset = false);

} // namespace WaitIconDisplay
} // namespace Impacto
10 changes: 10 additions & 0 deletions src/spriteanimation.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,26 @@
namespace Impacto {

bool SpriteAnimation::Exists() { return Def != 0; }

Sprite SpriteAnimation::CurrentSprite() {
int frame = (int)(Progress * (float)Def->FrameCount);

if (frame >= Def->FrameCount)
frame = Def->FrameCount - 1;
else if (frame < 0)
frame = 0;

return Def->Frames[frame];
}

void FixedSpriteAnimation::StartInImpl(bool reset) {
if (reset) Progress = GetFixedSpriteProgress();
}

void FixedSpriteAnimation::StartOutImpl(bool reset) {
if (reset) Progress = GetFixedSpriteProgress();
}

void FixedSpriteAnimation::UpdateImpl(float dt) {
float fixedSpriteProgress = GetFixedSpriteProgress();
int animationRequest = Direction;
Expand Down Expand Up @@ -58,6 +64,7 @@ void FixedSpriteAnimation::UpdateImpl(float dt) {
State = AS_Playing;
}
}

Sprite FixedSpriteAnimation::CurrentSprite() {
int frame;
float fixedSpriteProgress = GetFixedSpriteProgress();
Expand All @@ -78,11 +85,13 @@ Sprite FixedSpriteAnimation::CurrentSprite() {

return Def->Frames[frame];
}

float FixedSpriteAnimation::GetFixedSpriteProgress() const {
/* Converse because in- and out directions are reversed
between spritesheet and implementation */
return 1.0f - (float)Def->FixSpriteId / Def->FrameCount;
}

SpriteAnimation SpriteAnimationDef::Instantiate() {
SpriteAnimation result;
result.Def = this;
Expand All @@ -95,4 +104,5 @@ SpriteAnimation SpriteAnimationDef::Instantiate() {

return result;
}

} // namespace Impacto
6 changes: 6 additions & 0 deletions src/text.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -668,8 +668,12 @@ void DialoguePage::AddString(Vm::Sc3VmThread* ctx, Audio::AudioStream* voice,
}

void DialoguePage::Update(float dt) {
bool typewriterJustFinished = !TextIsFullyOpaque();

Typewriter.Update(dt);

typewriterJustFinished &= TextIsFullyOpaque();

for (int i = 0; i < Glyphs.size(); i++) {
Glyphs[i].Opacity = Typewriter.CalcOpacity(i);
if (Glyphs[i].Opacity == 0.0f) {
Expand All @@ -682,6 +686,8 @@ void DialoguePage::Update(float dt) {
if (AutoWaitTime < 0) AutoWaitTime = 0;
}

if (typewriterJustFinished) WaitIconDisplay::Show();

TextBox->Update(dt);
FadeAnimation.Update(dt);

Expand Down

0 comments on commit a6fc3dd

Please sign in to comment.