void MotionMaster::DelayedExpire() { if (size() > 1) { MovementGenerator *curr = top(); pop(); DelayedDelete(curr); } while (!top()) --i_top; }
void MotionMaster::Mutate(MovementGenerator *m, MovementSlot slot) { if (MovementGenerator *curr = Impl[slot]) { Impl[slot] = NULL; // in case a new one is generated in this slot during direct delete if (_top == slot && (_cleanFlag & MMCF_UPDATE)) DelayedDelete(curr); else DirectDelete(curr); } else if (_top < slot) _top = slot; Impl[slot] = m; if (_top > slot) _needInit[slot] = true; else { _needInit[slot] = false; m->Initialize(*_owner); } }
void MotionMaster::Mutate(MovementGenerator *m, MovementSlot slot) { if(MovementGenerator *curr = Impl[slot]) { if(i_top == slot && (m_cleanFlag & MMCF_UPDATE)) DelayedDelete(curr); else DirectDelete(curr); } else if(i_top < slot) { i_top = slot; } if(i_top > slot) needInit[slot] = true; else { m->Initialize(*i_owner); needInit[slot] = false; } Impl[slot] = m; }
void MotionMaster::Mutate(MovementGenerator *m, MovementSlot slot) { if (MovementGenerator* curr = _slot[slot]) { _slot[slot] = nullptr; // in case a new one is generated in this slot during directdelete if (_top == slot && (_cleanFlag & MOTIONMMASTER_CLEANFLAG_UPDATE)) DelayedDelete(curr); else DirectDelete(curr); } else if (_top < slot) { _top = slot; } _slot[slot] = m; if (_top > slot) _initialize[slot] = true; else { _initialize[slot] = false; m->Initialize(_owner); } }