void MotionMaster::ClearExpireList() { for (auto itr : _expireList) DirectDelete(itr); _expireList.clear(); if (empty()) Initialize(); else if (NeedInitTop()) InitTop(); else if (_cleanFlag & MOTIONMMASTER_CLEANFLAG_RESET) top()->Reset(_owner); _cleanFlag &= ~MOTIONMMASTER_CLEANFLAG_RESET; }
void MotionMaster::DirectClean(MovementSlot slot) { if (MovementGenerator* motion = GetMotionSlot(slot)) { _slot[slot] = nullptr; DirectDelete(motion); } while (!empty() && !top()) --_top; if (empty()) Initialize(); else if (NeedInitTop()) InitTop(); }
void MotionMaster::DirectClean(bool reset) { while (size() > 1) { MovementGenerator *curr = top(); pop(); if (curr) DirectDelete(curr); } if (empty()) return; if (NeedInitTop()) InitTop(); else if (reset) top()->Reset(_owner); }
void MotionMaster::DirectExpire(bool reset) { if (size() > 1) { MovementGenerator* curr = top(); pop(); DirectDelete(curr); } while (!empty() && !top()) --_top; if (empty()) Initialize(); else if (NeedInitTop()) InitTop(); else if (reset) top()->Reset(_owner); }
void MotionMaster::ClearExpireList() { for (size_t i = 0; i < _expireList->size(); ++i) { MovementGenerator* mg = (*_expireList)[i]; DirectDelete(mg); } delete _expireList; _expireList = nullptr; if (empty()) Initialize(); else if (NeedInitTop()) InitTop(); else if (_cleanFlag & MMCF_RESET) top()->Reset(_owner); _cleanFlag &= ~MMCF_RESET; }