From 1edc6c8601f9d00751bf7c9f7fcc69d1e18bb46a Mon Sep 17 00:00:00 2001 From: Persson-dev <66266021+Persson-dev@users.noreply.github.com> Date: Wed, 29 Dec 2021 20:30:09 +0100 Subject: Add skeleton bow pulling animation (#5355) * Added basic skeleton bow animation * Fixing style --- src/Mobs/Skeleton.cpp | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) (limited to 'src/Mobs/Skeleton.cpp') diff --git a/src/Mobs/Skeleton.cpp b/src/Mobs/Skeleton.cpp index a32d38d03..12081207f 100644 --- a/src/Mobs/Skeleton.cpp +++ b/src/Mobs/Skeleton.cpp @@ -10,7 +10,8 @@ cSkeleton::cSkeleton(void) : - Super("Skeleton", mtSkeleton, "entity.skeleton.hurt", "entity.skeleton.death", "entity.skeleton.ambient", 0.6f, 1.99f) + Super("Skeleton", mtSkeleton, "entity.skeleton.hurt", "entity.skeleton.death", "entity.skeleton.ambient", 0.6f, 1.99f), + m_ChargingBow(false) { } @@ -36,10 +37,40 @@ void cSkeleton::GetDrops(cItems & a_Drops, cEntity * a_Killer) +void cSkeleton::Tick(std::chrono::milliseconds a_Dt, cChunk & a_Chunk) +{ + Super::Tick(a_Dt, a_Chunk); + + if (!IsTicking()) + { + // The base class tick destroyed us + return; + } + + if (m_ChargingBow && (m_EMState == IDLE)) + { + // releasing bow if no more target is found + m_ChargingBow = false; + m_World->BroadcastEntityMetadata(*this); + } +} + + + + + bool cSkeleton::Attack(std::chrono::milliseconds a_Dt) { StopMovingToPosition(); // Todo handle this in a better way, the skeleton does some uneeded recalcs due to inStateChasing auto & Random = GetRandomProvider(); + + if (!m_ChargingBow) + { + // updating pulling animation + m_ChargingBow = true; + m_World->BroadcastEntityMetadata(*this); + } + if ((GetTarget() != nullptr) && (m_AttackCoolDownTicksLeft == 0)) { Vector3d Inaccuracy = Vector3d(Random.RandReal(-0.25, 0.25), Random.RandReal(-0.25, 0.25), Random.RandReal(-0.25, 0.25)); @@ -53,6 +84,10 @@ bool cSkeleton::Attack(std::chrono::milliseconds a_Dt) return false; } + // releasing bow after arrow was shot + m_ChargingBow = false; + m_World->BroadcastEntityMetadata(*this); + ResetAttackCooldown(); return true; } -- cgit v1.2.3