void CLevelGraph::draw_objects () { u32 I = 0; u32 E = Level().Objects.o_count (); for ( ; I < E; ++I) { CObject *_O = Level().Objects.o_get_by_iterator(I); CTeamBaseZone *team_base_zone = smart_cast<CTeamBaseZone*>(_O); if (team_base_zone) { team_base_zone->OnRender(); continue; } CCustomMonster *tpCustomMonster = smart_cast<CCustomMonster*>(_O); if (tpCustomMonster) { tpCustomMonster->OnRender(); if (!tpCustomMonster->movement().detail().path().empty()) { Fvector temp = tpCustomMonster->movement().detail().path()[tpCustomMonster->movement().detail().path().size() - 1].position; Level().debug_renderer().draw_aabb (temp,1.f,1.f,1.f,D3DCOLOR_XRGB(0,0,255)); } } smart_cover::object *smart_cover = smart_cast<smart_cover::object*>(_O); if (smart_cover) { smart_cover->OnRender (); continue; } } }
u32 CScriptGameObject::vertex_in_direction(u32 level_vertex_id, Fvector direction, float max_distance) const { CCustomMonster *monster = smart_cast<CCustomMonster*>(&object()); if (!monster) { ai().script_engine().script_log(ScriptStorage::eLuaMessageTypeError, "CCustomMonster : cannot access class member vertex_in_direction!"); return (u32(-1)); } if (!monster->movement().restrictions().accessible(level_vertex_id)) { ai().script_engine().script_log(ScriptStorage::eLuaMessageTypeError, "CCustomMonster::vertex_in_direction - start vertex id is not accessible!"); return (u32(-1)); } direction.normalize_safe(); direction.mul(max_distance); Fvector start_position = ai().level_graph().vertex_position(level_vertex_id); Fvector finish_position = Fvector(start_position).add(direction); u32 result = u32(-1); monster->movement().restrictions().add_border(level_vertex_id, max_distance); ai().level_graph().farthest_vertex_in_direction(level_vertex_id, start_position, finish_position, result, 0, true); monster->movement().restrictions().remove_border(); return (ai().level_graph().valid_vertex_id(result) ? result : level_vertex_id); }
void CScriptGameObject::set_start_point (int point_index) { CCustomMonster *monster = smart_cast<CCustomMonster*>(&object()); if (!monster) ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"CGameObject : cannot access class member set_start_point!"); else monster->movement().patrol().set_start_point(point_index); }
void CScriptGameObject::enable_memory_object (CScriptGameObject *game_object, bool enable) { CCustomMonster *monster = smart_cast<CCustomMonster*>(&object()); if (!monster) ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"CGameObject : cannot access class member enable_memory_object!"); else monster->memory().enable (&game_object->object(),enable); }
void CScriptGameObject::play_sound (u32 internal_type, u32 max_start_time) { CCustomMonster *monster = smart_cast<CCustomMonster*>(&object()); if (!monster) ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"CSoundPlayer : cannot access class member play!"); else monster->sound().play (internal_type,max_start_time); }
const xr_vector<MemorySpace::CHitObject> &CScriptGameObject::memory_hit_objects () const { CCustomMonster *monster = smart_cast<CCustomMonster*>(&object()); if (!monster) { ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"CGameObject : cannot access class member memory_hit_objects!"); NODEFAULT; } return (monster->memory().hit().objects()); }
void CScriptGameObject::patrol_path_make_inactual () { CCustomMonster *monster = smart_cast<CCustomMonster*>(&object()); if (!monster) { ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"CScriptGameObject : cannot access class member patrol_path_make_inactual!"); return; } monster->movement().patrol().make_inactual(); }
bool CScriptGameObject::path_completed () const { CCustomMonster *monster = smart_cast<CCustomMonster*>(&object()); if (!monster) { ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"CScriptGameObject : cannot access class member path_completed!"); return (false); } return (monster->movement().path_completed()); }
u32 CScriptGameObject::accessible_nearest (const Fvector &position, Fvector &result) { CCustomMonster *monster = smart_cast<CCustomMonster*>(&object()); if (!monster) { ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"CRestrictedObject : cannot access class member accessible!"); return (u32(-1)); } return (monster->movement().restrictions().accessible_nearest(position,result)); }
LPCSTR CScriptGameObject::base_out_restrictions () { CCustomMonster *monster = smart_cast<CCustomMonster*>(&object()); if (!monster) { ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"CRestrictedObject : cannot access class member base_out_restrictions!"); return (""); } return (*monster->movement().restrictions().base_out_restrictions()); }
void CScriptGameObject::set_enemy_callback () { CCustomMonster *monster = smart_cast<CCustomMonster*>(&object()); if (!monster) { ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"CCustomMonster : cannot access class member set_enemy_callback!"); return; } monster->memory().enemy().useful_callback().clear(); }
void CScriptGameObject::enable_vision (bool value) { CCustomMonster *monster = smart_cast<CCustomMonster*>(&object()); if (!monster) { ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"CVisualMemoryManager : cannot access class member enable_vision!"); return; } monster->memory().visual().enable (value); }
const xr_vector<CNotYetVisibleObject> &CScriptGameObject::not_yet_visible_objects() const { CCustomMonster *monster = smart_cast<CCustomMonster*>(&object()); if (!monster) { ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"CGameObject : cannot access class member not_yet_visible_objects!"); NODEFAULT; } return (monster->memory().visual().not_yet_visible_objects()); }
float CScriptGameObject::visibility_threshold () const { CCustomMonster *monster = smart_cast<CCustomMonster*>(&object()); if (!monster) { ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"CGameObject : cannot access class member visibility_threshold!"); NODEFAULT; } return (monster->memory().visual().visibility_threshold()); }
void CScriptGameObject::restore_sound_threshold () { CCustomMonster *monster = smart_cast<CCustomMonster*>(&object()); if (!monster) { ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"CSoundMemoryManager : cannot access class member restore_sound_threshold!"); return; } monster->memory().sound().restore_threshold (); }
void CScriptGameObject::set_range (float new_range) { CCustomMonster *monster = smart_cast<CCustomMonster*>(&this->object()); if (!monster) { ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"CCustomMonster : cannot access class member set_range!"); return; } monster->set_range (new_range); }
void CScriptGameObject::set_patrol_extrapolate_callback() { CCustomMonster *monster = smart_cast<CCustomMonster*>(&this->object()); if (!monster) { ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"CCustomMonster : cannot access class member set_patrol_extrapolate_callback!"); return; } monster->movement().patrol().extrapolate_callback().clear(); }
float CScriptGameObject::extrapolate_length () const { CCustomMonster *monster = smart_cast<CCustomMonster*>(&this->object()); if (!monster) { ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"CCustomMonster : cannot access class member extrapolate_length!"); return (0.f); } return (monster->movement().detail().extrapolate_length()); }
void CScriptGameObject::remove_all_restrictions () { CCustomMonster *monster = smart_cast<CCustomMonster*>(&object()); if (!monster) { ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"CRestrictedObject : cannot access class member remove_all_restrictions!"); return; } monster->movement().restrictions().remove_all_restrictions (); }
void CScriptGameObject::set_enemy_callback (const luabind::functor<bool> &functor, const luabind::object &object) { CCustomMonster *monster = smart_cast<CCustomMonster*>(&this->object()); if (!monster) { ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"CCustomMonster : cannot access class member set_enemy_callback!"); return; } monster->memory().enemy().useful_callback().set(functor,object); }
bool CScriptGameObject::vision_enabled () const { CCustomMonster *monster = smart_cast<CCustomMonster*>(&object()); if (!monster) { ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"CVisualMemoryManager : cannot access class member vision_enabled!"); return (false); } return (monster->memory().visual().enabled()); }
u32 CScriptGameObject::get_current_patrol_point_index() { CCustomMonster *monster = smart_cast<CCustomMonster*>(&object()); if (!monster) { ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"CGameObject : cannot call [get_current_patrol_point_index()]!"); return (u32(-1)); } return (monster->movement().patrol().get_current_point_index()); }
void CScriptGameObject::enable_movement (bool enable) { CCustomMonster *monster = smart_cast<CCustomMonster*>(&object()); if (!monster) { ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"CCustomMonster : cannot access class member movement_enabled!"); return; } monster->movement().enable_movement (enable); }
void CScriptGameObject::invulnerable (bool invulnerable) { CCustomMonster *monster = smart_cast<CCustomMonster*>(&object()); if (!monster) { ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"CCustomMonster : cannot access class member invulnerable!"); return; } monster->invulnerable (invulnerable); }
int CScriptGameObject::active_sound_count (bool only_playing) { CCustomMonster *monster = smart_cast<CCustomMonster*>(&object()); if (!monster) { ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"CGameObject : cannot access class member active_sound_count!"); return (-1); } else return (monster->sound().active_sound_count(only_playing)); }
Fvector CScriptGameObject::memory_position(const CScriptGameObject &lua_game_object) { CCustomMonster *monster = smart_cast<CCustomMonster*>(&object()); if (!monster) { ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"CScriptEntity : cannot access class member memory!"); return (Fvector().set(0.f,0.f,0.f)); } else return (monster->memory().memory_position(&lua_game_object.object())); }
u32 CScriptGameObject::add_sound (LPCSTR prefix, u32 max_count, ESoundTypes type, u32 priority, u32 mask, u32 internal_type, LPCSTR bone_name) { CCustomMonster *monster = smart_cast<CCustomMonster*>(&object()); if (!monster) { ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"CSoundPlayer : cannot access class member add!"); return (0); } else return (monster->sound().add(prefix,max_count,type,priority,mask,internal_type,bone_name)); }
bool CScriptGameObject::accessible_vertex_id(u32 level_vertex_id) { CCustomMonster *monster = smart_cast<CCustomMonster*>(&object()); if (!monster) { ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"CRestrictedObject : cannot access class member accessible!"); return (false); } THROW2 (ai().level_graph().valid_vertex_id(level_vertex_id),"Cannot check if level vertex id is accessible, because it is invalid"); return (monster->movement().restrictions().accessible(level_vertex_id)); }
void CScriptGameObject::set_sound_mask (u32 sound_mask) { CCustomMonster *monster = smart_cast<CCustomMonster*>(&object()); if (!monster) ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"CSoundPlayer : cannot access class member set_sound_mask!"); else { CEntityAlive *entity_alive = smart_cast<CEntityAlive*>(monster); if (entity_alive) { VERIFY2 (entity_alive->g_Alive(),"Stalkers talk after death??? Say why??"); } monster->sound().set_sound_mask(sound_mask); } }
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)); }