void CSE_ALifeDynamicObject::clear_client_data() { #ifdef DEBUG if (!client_data.empty()) Msg ("CSE_ALifeDynamicObject::switch_offline: client_data is cleared for [%d][%s]",ID,name_replace()); #endif // DEBUG if (!keep_saved_data_anyway()) client_data.clear (); }
void CSE_ALifeDynamicObject::on_register () { CSE_ALifeObject *object = this; while (object->ID_Parent != ALife::_OBJECT_ID(-1)) { object = ai().alife().objects().object(object->ID_Parent); VERIFY (object); } if (!alife().graph().level().object(object->ID,true) && !keep_saved_data_anyway()) client_data.clear (); }
void CSE_ALifeDynamicObject::try_switch_online () { CSE_ALifeSchedulable *schedulable = smart_cast<CSE_ALifeSchedulable*>(this); // checking if the abstract monster has just died if (schedulable) { if (!schedulable->need_update(this)) { if (alife().scheduled().object(ID,true)) alife().scheduled().remove (this); } else if (!alife().scheduled().object(ID,true)) alife().scheduled().add (this); } if (!can_switch_online()) { #ifdef DEBUG if (!client_data.empty()) Msg ("CSE_ALifeDynamicObject::try_switch_online: client_data is cleared for [%d][%s]",ID,name_replace()); #endif // DEBUG if (!keep_saved_data_anyway()) client_data.clear (); return; } if (!can_switch_offline()) { alife().switch_online (this); return; } if (alife().graph().actor()->o_Position.distance_to(o_Position) > alife().online_distance()) { #ifdef DEBUG if (!client_data.empty()) Msg ("CSE_ALifeDynamicObject::try_switch_online2: client_data is cleared for [%d][%s]",ID,name_replace()); #endif // DEBUG if (!keep_saved_data_anyway()) client_data.clear (); return; } alife().switch_online (this); }
void CSE_ALifeDynamicObject::switch_offline () { R_ASSERT (m_bOnline); m_bOnline = false; alife().remove_online (this); #ifdef DEBUG if (!client_data.empty()) Msg ("CSE_ALifeDynamicObject::switch_offline: client_data is cleared for [%d][%s]",ID,name_replace()); #endif // DEBUG if (!keep_saved_data_anyway()) client_data.clear (); }