void CScriptGameObject::set_desired_position (const Fvector *desired_position) { CAI_Stalker *stalker = smart_cast<CAI_Stalker*>(&object()); if (!stalker) ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"CAI_Stalker : cannot access class member movement!"); else { THROW2 (desired_position || stalker->movement().restrictions().accessible(*desired_position),*stalker->cName()); stalker->movement().set_desired_position (desired_position); } }
bool CScriptGameObject::movement_target_reached () { CAI_Stalker *stalker = smart_cast<CAI_Stalker*>(&object()); if (!stalker) { ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError, "CAI_Stalker : cannot access class member movement_target_reached!"); return (false); } return (stalker->movement().current_params().equal_to_target(stalker->movement().target_params())); }
bool CScriptGameObject::is_body_turning () const { CCustomMonster *monster = smart_cast<CCustomMonster*>(&object()); if (!monster) { ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"CGameObject : cannot access class member is_turning!"); return (false); } CAI_Stalker *stalker = smart_cast<CAI_Stalker*>(monster); if (!stalker) return (!fsimilar(monster->movement().body_orientation().target.yaw,monster->movement().body_orientation().current.yaw)); else return (!fsimilar(stalker->movement().head_orientation().target.yaw,stalker->movement().head_orientation().current.yaw) || !fsimilar(monster->movement().body_orientation().target.yaw,monster->movement().body_orientation().current.yaw)); }
void CScriptGameObject::set_detail_path_type (DetailPathManager::EDetailPathType detail_path_type) { CAI_Stalker *stalker = smart_cast<CAI_Stalker*>(&object()); if (!stalker) ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"CAI_Stalker : cannot access class member movement!"); else stalker->movement().set_detail_path_type (detail_path_type); }
void CScriptGameObject::set_movement_type (EMovementType movement_type) { CAI_Stalker *stalker = smart_cast<CAI_Stalker*>(&object()); if (!stalker) ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"CAI_Stalker : cannot access class member movement!"); else stalker->movement().set_movement_type (movement_type); }
void CScriptGameObject::set_desired_direction (const Fvector *desired_direction) { CAI_Stalker *stalker = smart_cast<CAI_Stalker*>(&object()); if (!stalker) ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"CAI_Stalker : cannot access class member movement!"); else stalker->movement().set_desired_direction (desired_direction); }
void CScriptGameObject::set_dest_level_vertex_id(u32 level_vertex_id) { CAI_Stalker *stalker = smart_cast<CAI_Stalker*>(&object()); if (!stalker) ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"CAI_Stalker : cannot access class member set_dest_level_vertex_id!"); else { if (!ai().level_graph().valid_vertex_id(level_vertex_id)) { #ifdef DEBUG ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"CAI_Stalker : invalid vertex id being setup by action %s!",stalker->brain().CStalkerPlanner::current_action().m_action_name); #endif return; } THROW2 (stalker->movement().restrictions().accessible(level_vertex_id),*stalker->cName()); stalker->movement().set_level_dest_vertex (level_vertex_id); } }
void CScriptGameObject::set_patrol_path (LPCSTR path_name, const PatrolPathManager::EPatrolStartType patrol_start_type, const PatrolPathManager::EPatrolRouteType patrol_route_type, bool random) { CAI_Stalker *stalker = smart_cast<CAI_Stalker*>(&object()); if (!stalker) ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"CAI_Stalker : cannot access class member movement!"); else stalker->movement().patrol().set_path (path_name,patrol_start_type,patrol_route_type,random); }
void CScriptGameObject::set_body_state (EBodyState body_state) { THROW ((body_state == eBodyStateStand) || (body_state == eBodyStateCrouch)); CAI_Stalker *stalker = smart_cast<CAI_Stalker*>(&object()); if (!stalker) ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"CAI_Stalker : cannot access class member movement!"); else stalker->movement().set_body_state (body_state); }
MonsterSpace::EMovementType CScriptGameObject::movement_type () const { CAI_Stalker *stalker = smart_cast<CAI_Stalker*>(&object()); if (!stalker) { ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"CAI_Stalker : cannot access class member movement_type!"); return (MonsterSpace::eMovementTypeStand); } return (stalker->movement().movement_type()); }
MonsterSpace::EMentalState CScriptGameObject::target_mental_state () const { CAI_Stalker *stalker = smart_cast<CAI_Stalker*>(&object()); if (!stalker) { ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"CAI_Stalker : cannot access class member mental_state!"); return (MonsterSpace::eMentalStateDanger); } return (stalker->movement().target_mental_state()); }
MovementManager::EPathType CScriptGameObject::path_type () const { CAI_Stalker *stalker = smart_cast<CAI_Stalker*>(&object()); if (!stalker) { ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"CAI_Stalker : cannot access class member path_type!"); return (MovementManager::ePathTypeNoPath); } return (stalker->movement().path_type()); }
bool CScriptGameObject::in_current_loophole_range (Fvector object_position) const { CAI_Stalker *stalker = smart_cast<CAI_Stalker*>(&object()); if (!stalker) { ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError, "CAI_Stalker : cannot access class member object_in_loophole_range!"); return (false); } return (stalker->movement().in_current_loophole_range (object_position)); }
void CScriptGameObject::set_smart_cover_target (CScriptGameObject *enemy_object) { CAI_Stalker *stalker = smart_cast<CAI_Stalker*>(&object()); if (!stalker) { ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"CAI_Stalker : cannot access class member set_smart_cover_target!"); return; } stalker->movement().target_params().cover_fire_object (&enemy_object->object()); }
void CScriptGameObject::set_dest_loophole () { CAI_Stalker *stalker = smart_cast<CAI_Stalker*>(&object()); if (!stalker) { ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"CAI_Stalker : cannot access class member set_dest_loophole!"); return; } stalker->movement().target_params().cover_loophole_id(""); }
LPCSTR CScriptGameObject::get_dest_smart_cover_name () { CAI_Stalker* stalker = smart_cast<CAI_Stalker*>(&object()); if (!stalker) { ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"CAI_Stalker : cannot access class member get_dest_smart_cover!"); return (0); } return (stalker->movement().target_params().cover_id().c_str()); }
bool CScriptGameObject::in_smart_cover () const { CAI_Stalker *stalker = smart_cast<CAI_Stalker*>(&object()); if (!stalker) { ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"CAI_Stalker : cannot access class member in_smart_cover_mode!"); return (""); } return (stalker->movement().in_smart_cover()); }
float const CScriptGameObject::lookout_min_time () const { CAI_Stalker *stalker = smart_cast<CAI_Stalker*>(&object()); if (!stalker) { ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError, "CAI_Stalker : cannot access class member lookout_min_time!"); return (flt_max); } return (stalker->movement().lookout_min_time()); }
void CScriptGameObject::apply_loophole_direction_distance (float value) { CAI_Stalker *stalker = smart_cast<CAI_Stalker*>(&object()); if (!stalker) { ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError, "CAI_Stalker : cannot access class member smart_cover_enter_distance!"); return; } stalker->movement().apply_loophole_direction_distance (value); }
void CScriptGameObject::lookout_max_time (float value) { CAI_Stalker *stalker = smart_cast<CAI_Stalker*>(&object()); if (!stalker) { ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError, "CAI_Stalker : cannot access class member lookout_max_time!"); return; } stalker->movement().lookout_max_time(value); }
void CScriptGameObject::set_smart_cover_target_selector () { CAI_Stalker *stalker = smart_cast<CAI_Stalker*>(&object()); if (!stalker) { ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"CAI_Stalker : cannot access class member set_smart_cover_target_selector!"); return; } stalker->movement().target_selector (CScriptCallbackEx<void>()); }
Fvector CScriptGameObject::head_orientation () const { CAI_Stalker *stalker = smart_cast<CAI_Stalker*>(&object()); if (!stalker) { ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"CScriptGameObject : cannot access class member head_orientation!"); return (Fvector().set(flt_max,flt_max,flt_max)); } const SRotation &r = stalker->movement().head_orientation().current; return (Fvector().setHP(-r.yaw,-r.pitch)); }
TEMPLATE_SPECIALIZATION void _detail::callback (CBoneInstance *B) { CAI_Stalker* A = static_cast<CAI_Stalker*>(B->Callback_Param); VERIFY (_valid(B->mTransform)); Fvector c = B->mTransform.c; Fmatrix spin; float yaw_factor = 0, pitch_factor = 0; if (A->sight().use_torso_look()) { yaw_factor = yaw_factor_fire/100.f; pitch_factor = pitch_factor_fire/100.f; } else { yaw_factor = yaw_factor_non_fire/100.f; pitch_factor = pitch_factor_non_fire/100.f; } float effector_yaw = 0.f, effector_pitch = 0.f; if (A->weapon_shot_effector().IsActive()) { Fvector temp; A->weapon_shot_effector().GetDeltaAngle(temp); effector_yaw = temp.y; VERIFY (_valid(effector_yaw)); effector_pitch = temp.x; VERIFY (_valid(effector_pitch)); } VERIFY (_valid(A->movement().head_orientation().current.yaw)); VERIFY (_valid(A->movement().body_orientation().current.yaw)); VERIFY (_valid(A->NET_Last.o_torso.pitch)); float yaw = angle_normalize_signed(-yaw_factor * angle_normalize_signed(A->movement().head_orientation().current.yaw + effector_yaw - (A->movement().body_orientation().current.yaw))); float pitch = angle_normalize_signed(-pitch_factor * angle_normalize_signed(A->NET_Last.o_torso.pitch + effector_pitch)); VERIFY (_valid(yaw)); VERIFY (_valid(pitch)); spin.setXYZ (pitch, yaw, 0); VERIFY (_valid(spin)); B->mTransform.mulA_43 (spin); B->mTransform.c = c; }
void CScriptGameObject::set_smart_cover_target_selector (luabind::functor<void> functor, luabind::object object) { CAI_Stalker *stalker = smart_cast<CAI_Stalker*>(&this->object()); if (!stalker) { ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"CAI_Stalker : cannot access class member set_smart_cover_target_selector!"); return; } CScriptCallbackEx<void> callback; callback.set (functor, object); stalker->movement().target_selector (callback); }
void CScriptGameObject::set_smart_cover_target_lookout () { CAI_Stalker *stalker = smart_cast<CAI_Stalker*>(&object()); if (!stalker) { ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"CAI_Stalker : cannot access class member smart_cover_setup_lookout_target!"); return; } if (!stalker->g_Alive()) { ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"CAI_Stalker : do not call smart_cover_setup_lookout_target when stalker is dead!"); return; } stalker->movement().target_lookout (); }
LPCSTR CScriptGameObject::GetPatrolPathName() { CAI_Stalker *stalker = smart_cast<CAI_Stalker*>(&object()); if (!stalker) { CScriptEntity *script_monster = smart_cast<CScriptEntity*>(&object()); if (!script_monster) { ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"CGameObject : cannot access class member GetPatrolPathName!"); return (""); } else return (script_monster->GetPatrolPathName()); } else return (*stalker->movement().patrol().path_name()); }
void CScriptGameObject::set_mental_state (EMentalState mental_state) { CAI_Stalker *stalker = smart_cast<CAI_Stalker*>(&object()); if (!stalker) ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"CAI_Stalker : cannot access class member movement!"); else { #ifdef DEBUG if (mental_state != eMentalStateDanger) { if (stalker->brain().current_action_id() == StalkerDecisionSpace::eWorldOperatorCombatPlanner) { ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"CAI_Stalker : set_mental_state is used during universal combat!"); return; } } #endif // DEBUG stalker->movement().set_mental_state (mental_state); } }