#include "CatapultBaseServer.h" #include "GameMessages.h" #include "EntityManager.h" #include "dZoneManager.h" void CatapultBaseServer::OnNotifyObject(Entity *self, Entity *sender, const std::string& name, int32_t param1, int32_t param2) { if (name == "BouncerBuilt") { // start a timer for the arm to player the with bouncer animation self->AddTimer("PlatAnim", .75); // set the bouncer so we can use it later self->SetVar(u"Bouncer", sender->GetObjectID()); GameMessages::SendBouncerActiveStatus(sender->GetObjectID(), true, UNASSIGNED_SYSTEM_ADDRESS); } } void CatapultBaseServer::OnTimerDone(Entity* self, std::string timerName) { if (timerName == "PlatAnim") { // get the arm asset const auto arm = EntityManager::Instance()->GetEntitiesInGroup(self->GetVarAsString(u"ArmGroup")); // tell the arm to the play the platform animation, which is just the arm laying there but with bouncer for (auto* obj : arm) { GameMessages::SendPlayAnimation(obj, u"idle-platform"); GameMessages::SendPlayNDAudioEmitter(obj, UNASSIGNED_SYSTEM_ADDRESS, "{8cccf912-69e3-4041-a20b-63e4afafc993}"); // set the art so we can use it again self->SetVar(u"Arm", obj->GetObjectID()); break; } // start a timer till the bouncer actually bounces self->AddTimer("bounce", 3); } else if (timerName == "launchAnim") { // get the arm asset auto* arm = EntityManager::Instance()->GetEntity(self->GetVar(u"Arm")); if (arm == nullptr) return; // tell the arm to player the launcher animation auto animTime = 1; self->AddTimer("resetArm", animTime); GameMessages::SendPlayAnimation(arm, u"launch"); } else if (timerName == "bounce") { auto* bouncer = EntityManager::Instance()->GetEntity(self->GetVar(u"Bouncer")); if (bouncer == nullptr) return; // bounce all players bouncer->NotifyObject(bouncer, "bounceAllInProximity"); // Likely to trigger server side bounce, bodging this // add a delay to play the animation self->AddTimer("launchAnim", .3); } else if (timerName == "resetArm") { auto* arm = EntityManager::Instance()->GetEntity(self->GetVar(u"Arm")); if (arm == nullptr) return; // set the arm back to natural state GameMessages::SendPlayAnimation(arm, u"idle"); auto* bouncer = EntityManager::Instance()->GetEntity(self->GetVar(u"Bouncer")); if (bouncer == nullptr) return; // kill the bouncer GameMessages::SendNotifyClientObject(bouncer->GetObjectID(), u"TimeToDie"); bouncer->Smash(self->GetObjectID(), VIOLENT); } }