dennis_chikin (dennis_chikin) wrote,
dennis_chikin
dennis_chikin

Category:

Странная конструкция

В движок лезть лень, поэтому записываю так, как это выглядит:

alife():create() при наличии в аргументах parent_id берет его координаты, если parent ИЛИ в онлайне, или в том же гэйм-вертексе, что указан в аргументах.
Иначе все становится нулями, после чего созданный объект зачем-то уничтожается.

Но, если parent не живой, и в онлайне, тогда, наоборот, его надо загнать в офф, чтобы координаты стали валидны.

Итого, alife():create( section, vector(), 0, 0, parent.id ) допустимо для онлайна, но alife():create( section, parent.pos, parent.lvid, parent.gvid, parent.id ) в остальных случаях. При этом соответствие/несоответствие позиции, lvid и gvid между собой имеет значение в зависимости от флагов И в зависимости от величины несоответствия. Так, позиция, относящаяся к соседнему gv даст случайные координаты входа в онлайн. Слишком большое удаление позиции от позиции lv даст "падение" в lv. При незначительном отклонении и отсутствии принудительной привязки к lv можем нормально "повесить в воздухе" именно там, где хотим.

upd: ну вот собственно да:
if (alife_query)
remove (smart_cast<CSE_ALifeDynamicObject*>(item),game_vertex_id);
else
level().remove (smart_cast<CSE_ALifeDynamicObject*>(item));
Именно должен совпадать gv, чтобы правильно удалить, чтобы потом привязать к parentу.
Ровно по анекдоту про тонзиллэктомию трансректально. Ибо ООП (tm)
Tags: stalker
Subscribe
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments