void CStalkerAnimationManager::reload (CAI_Stalker *_object) { m_object = _object; m_visual = object().Visual(); m_crouch_state_config = object().SpecificCharacter().crouch_type(); VERIFY ((m_crouch_state_config == 0) || (m_crouch_state_config == 1) || (m_crouch_state_config == -1)); m_crouch_state = m_crouch_state_config; if (object().already_dead()) return; m_skeleton_animated = smart_cast<CKinematicsAnimated*>(m_visual); VERIFY (m_skeleton_animated); m_data_storage = stalker_animation_data_storage().object(m_skeleton_animated); VERIFY (m_data_storage); if (!object().g_Alive()) return; #ifdef USE_HEAD_BONE_PART_FAKE VERIFY (!m_data_storage->m_head_animations.A.empty()); u16 bone_part = m_skeleton_animated->LL_GetMotionDef(m_data_storage->m_head_animations.A.front())->bone_or_part; VERIFY (bone_part != BI_NONE); m_script_bone_part_mask = CStalkerAnimationPair::all_bone_parts ^ (1 << bone_part); #endif assign_bone_callbacks (); #ifdef DEBUG global().set_dbg_info (*object().cName(),"Global"); head().set_dbg_info (*object().cName(),"Head "); torso().set_dbg_info (*object().cName(),"Torso "); legs().set_dbg_info (*object().cName(),"Legs "); script().set_dbg_info (*object().cName(),"Script"); #endif };
void CLevel::remove_objects () { if (!IsGameTypeSingle()) Msg("CLevel::remove_objects - Start"); BOOL b_stored = psDeviceFlags.test(rsDisableObjectsAsCrows); Game().reset_ui (); if (OnServer()) { VERIFY (Server); Server->SLS_Clear (); } snd_Events.clear (); for (int i=0; i<6; ++i) { psNET_Flags.set (NETFLAG_MINIMIZEUPDATES,FALSE); // ugly hack for checks that update is twice on frame // we need it since we do updates for checking network messages ++(Device.dwFrame); psDeviceFlags.set (rsDisableObjectsAsCrows,TRUE); ClientReceive (); ProcessGameEvents (); Objects.Update (true); Sleep (100); } if (OnClient()) ClearAllObjects (); BulletManager().Clear (); ph_commander().clear (); ph_commander_scripts().clear(); if(!g_dedicated_server) space_restriction_manager().clear (); psDeviceFlags.set (rsDisableObjectsAsCrows, b_stored); g_b_ClearGameCaptions = true; if (!g_dedicated_server) ai().script_engine().collect_all_garbage (); stalker_animation_data_storage().clear (); VERIFY (Render); Render->models_Clear (FALSE); Render->clear_static_wallmarks (); #ifdef DEBUG if(!g_dedicated_server) if (!client_spawn_manager().registry().empty()) client_spawn_manager().dump (); #endif // DEBUG if(!g_dedicated_server) { VERIFY (client_spawn_manager().registry().empty()); client_spawn_manager().clear (); } for (int i=0; i<6; i++) { ++(Device.dwFrame); Objects.Update(true); } g_pGamePersistent->destroy_particles (false); //. xr_delete (m_seniority_hierarchy_holder); //. m_seniority_hierarchy_holder = xr_new<CSeniorityHierarchyHolder>(); if (!IsGameTypeSingle()) Msg("CLevel::remove_objects - End"); }