#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::Unknown), CActorParameters::None(), kInvalidUniqueId) , xe8_(f1) { xec_.emplace(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) { 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(); const CScriptWaypoint* nextWpnt = wpnt->NextWaypoint(mgr); if (nextWpnt) x10e_nextWaypoint = nextWpnt->GetUniqueId(); } } } rstl::optional_object CScriptAiJumpPoint::GetTouchBounds() const { return xec_; } 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; } }