From fac52ec521096920001ee2878942f6a608421d86 Mon Sep 17 00:00:00 2001 From: "sigonasr2, Sig, Sigo" Date: Wed, 5 Jul 2023 19:40:05 +0000 Subject: [PATCH] Teleport animation implemented. --- Crawler/Class.cpp | 6 +++++- Crawler/Crawler.cpp | 11 ++++++++++- Crawler/Player.cpp | 8 ++++++++ Crawler/Player.h | 3 +++ Crawler/State.h | 1 + 5 files changed, 27 insertions(+), 2 deletions(-) diff --git a/Crawler/Class.cpp b/Crawler/Class.cpp index ec55216f..ed61c071 100644 --- a/Crawler/Class.cpp +++ b/Crawler/Class.cpp @@ -310,7 +310,11 @@ bool Wizard::RightClickAbility(){ teleportPoint=p.GetPos()+pointTowardsMouse*dist; } if(dist>0){ - p.SetPos(teleportPoint); + p.SetState(State::TELEPORT); + p.teleportAnimationTimer=0.35; + p.teleportTarget=teleportPoint; + p.teleportStartPosition=p.GetPos(); + p.iframe_time=0.35; return true; } else { return false; diff --git a/Crawler/Crawler.cpp b/Crawler/Crawler.cpp index d4f33410..4a22174e 100644 --- a/Crawler/Crawler.cpp +++ b/Crawler/Crawler.cpp @@ -731,7 +731,16 @@ void Crawler::RenderWorld(float fElapsedTime){ for(Monster&m:monstersBefore){ m.Draw(); } - view.DrawPartialRotatedDecal(player.GetPos()+vf2d{0,-player.GetZ()},player.GetFrame().GetSourceImage()->Decal(),player.GetSpinAngle(),{12,12},player.GetFrame().GetSourceRect().pos,player.GetFrame().GetSourceRect().size,vf2d(player.GetSizeMult(),player.GetSizeMult()),player.GetBuffs(BuffType::ATTACK_UP).size()>0?Pixel{255,uint8_t(255*abs(sin(1.4*player.GetBuffs(BuffType::ATTACK_UP)[0].duration))),uint8_t(255*abs(sin(1.4*player.GetBuffs(BuffType::ATTACK_UP)[0].duration)))}:WHITE); + vf2d playerScale=vf2d(player.GetSizeMult(),player.GetSizeMult()); + vf2d playerPosition=player.GetPos(); + #define RENDER_PLAYER view.DrawPartialRotatedDecal(playerPosition+vf2d{0,-player.GetZ()},player.GetFrame().GetSourceImage()->Decal(),player.GetSpinAngle(),{12,12},player.GetFrame().GetSourceRect().pos,player.GetFrame().GetSourceRect().size,playerScale,player.GetBuffs(BuffType::ATTACK_UP).size()>0?Pixel{255,uint8_t(255*abs(sin(1.4*player.GetBuffs(BuffType::ATTACK_UP)[0].duration))),uint8_t(255*abs(sin(1.4*player.GetBuffs(BuffType::ATTACK_UP)[0].duration)))}:WHITE); + if(player.teleportAnimationTimer>0){ + playerScale.x=120*abs(pow(player.teleportAnimationTimer-0.175,3)); + playerPosition=player.teleportStartPosition.lerp(player.teleportTarget,(0.35-player.teleportAnimationTimer)/0.35); + RENDER_PLAYER + } else { + RENDER_PLAYER + } if(player.GetState()==State::BLOCK){ view.DrawDecal(player.GetPos()-vf2d{12,12},GFX_BLOCK_BUBBLE.Decal()); } diff --git a/Crawler/Player.cpp b/Crawler/Player.cpp index bd588c76..92f6bfc0 100644 --- a/Crawler/Player.cpp +++ b/Crawler/Player.cpp @@ -231,6 +231,14 @@ void Player::Update(float fElapsedTime){ } animation.UpdateState(internal_animState,fElapsedTime); }break; + case TELEPORT:{ + teleportAnimationTimer=std::max(0.f,teleportAnimationTimer-fElapsedTime); + if(teleportAnimationTimer<=0){ + SetPos(teleportTarget); + SetState(NORMAL); + } + animation.UpdateState(internal_animState,fElapsedTime); + }break; default:{ //Update animations normally. animation.UpdateState(internal_animState,fElapsedTime); diff --git a/Crawler/Player.h b/Crawler/Player.h index 1fa5b8f9..e465c4eb 100644 --- a/Crawler/Player.h +++ b/Crawler/Player.h @@ -38,6 +38,9 @@ struct Player{ float swordSwingTimer=0; float iframe_time=0; float manaTickTimer=0; + float teleportAnimationTimer=0; + vf2d teleportTarget={}; + vf2d teleportStartPosition={}; std::pair notEnoughManaDisplay={"",0}; State state=State::NORMAL; Animate2D::Animationanimation; diff --git a/Crawler/State.h b/Crawler/State.h index 13ab9598..3ddc6ca3 100644 --- a/Crawler/State.h +++ b/Crawler/State.h @@ -8,4 +8,5 @@ enum State{ MOVE_TOWARDS, MOVE_AWAY, BLOCK, + TELEPORT, }; \ No newline at end of file