#include "CScriptAiJumpPoint.hpp" #include "CActorParameters.hpp" #include "CStateManager.hpp" #include "CScriptWaypoint.hpp" #include "TCastTo.hpp" namespace urde { CScriptAiJumpPoint::CScriptAiJumpPoint(TUniqueId uid, std::string_view name, const CEntityInfo& info, zeus::CTransform& xf, bool active, float f1) : CActor(uid, active, name, info, xf, CModelData::CModelDataNull(), CMaterialList(EMaterialTypes::NoStepLogic), CActorParameters::None(), kInvalidUniqueId) , xe8_(f1) , xec_touchBounds(xf.origin, xf.origin) { } void CScriptAiJumpPoint::Accept(IVisitor& visitor) { visitor.Visit(this); } void CScriptAiJumpPoint::Think(float dt, CStateManager&) { if (x110_timeRemaining <= 0) return; x110_timeRemaining -= dt; } void CScriptAiJumpPoint::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId other, CStateManager& mgr) { CActor::AcceptScriptMsg(msg, other, mgr); if (msg != EScriptObjectMessage::InitializedInArea) return; for (SConnection& conn : x20_conns) { if (conn.x0_state != EScriptObjectState::Arrived || conn.x4_msg != EScriptObjectMessage::Next) continue; const CScriptWaypoint* wpnt = static_cast(mgr.GetObjectById(mgr.GetIdForScript(conn.x8_objId))); if (wpnt) { x10c_currentWaypoint = wpnt->GetUniqueId(); x10e_nextWaypoint = wpnt->NextWaypoint(mgr); } } } std::experimental::optional CScriptAiJumpPoint::GetTouchBounds() const { return xec_touchBounds; } bool CScriptAiJumpPoint::GetInUse(TUniqueId uid) const { if (x108_24 || x110_timeRemaining > 0.f || x10a_occupant != kInvalidUniqueId || uid != kInvalidUniqueId || uid != x10a_occupant) return true; return false; } }