void DirectClean(bool reset) { while (size() > 1) { IMovementGenerator curr = top(); pop(); if (curr != null) { DirectDelete(curr); } } if (empty()) { return; } if (needInitTop()) { InitTop(); } else if (reset) { top().Reset(_owner); } }
void StartMovement(IMovementGenerator m, MovementSlot slot) { int _slot = (int)slot; IMovementGenerator curr = Impl[_slot]; if (curr != null) { Impl[_slot] = null; // in case a new one is generated in this slot during directdelete if (_top == _slot && Convert.ToBoolean(_cleanFlag & MMCleanFlag.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 DirectExpire(bool reset) { if (size() > 1) { IMovementGenerator curr = top(); pop(); DirectDelete(curr); } while (!empty() && top() == null)//not sure this will work { --_top; } if (empty()) { Initialize(); } else if (needInitTop()) { InitTop(); } else if (reset) { top().Reset(_owner); } }
void ClearExpireList() { for (int i = 0; i < _expireList.Count; ++i) { IMovementGenerator mg = _expireList[i]; DirectDelete(mg); } _expireList = null; if (empty()) { Initialize(); } else if (NeedInitTop()) { InitTop(); } else if (Convert.ToBoolean(_cleanFlag & MMCleanFlag.Reset)) { top().Reset(_owner); } _cleanFlag &= ~MMCleanFlag.Reset; }
void DirectDelete(IMovementGenerator curr) { if (IsStatic(curr)) { return; } curr.Finalize(_owner); }
void DelayedDelete(IMovementGenerator curr) { if (IsStatic(curr)) { return; } _expireList.Add(curr); }
void DelayedClean() { while (Size() > 1) { IMovementGenerator curr = Top(); Pop(); if (curr != null) { DelayedDelete(curr); } } }
public virtual void UpdateMotion(uint diff) { if (!_owner) { return; } if (_owner.HasUnitState(UnitState.Root | UnitState.Stunned)) { return; } Contract.Assert(!empty()); _cleanFlag |= MMCleanFlag.Update; if (!top().Update(_owner, diff)) { _cleanFlag &= ~MMCleanFlag.Update; MovementExpired(); } else { _cleanFlag &= ~MMCleanFlag.Update; } if (_expList != null) { for (int i = 0; i < _expList.Count; ++i) { IMovementGenerator mg = _expList[i]; DirectDelete(mg); } _expList = null; if (empty()) { Initialize(); } else if (needInitTop()) { InitTop(); } else if (Convert.ToBoolean(_cleanFlag & MMCleanFlag.Reset)) { top().Reset(_owner); } _cleanFlag &= ~MMCleanFlag.Reset; } _owner.UpdateUnderwaterState(_owner.GetMap(), _owner.GetPositionX(), _owner.GetPositionY(), _owner.GetPositionZ()); }
void DelayedDelete(IMovementGenerator curr) { if (IsStatic(curr)) { return; } if (_expireList == null) { _expireList = new List <IMovementGenerator>(); } _expireList.Add(curr); }
public void InitDefault() { if (_owner.IsTypeId(TypeId.Unit)) { IMovementGenerator movement = AISelector.SelectMovementAI(_owner.ToCreature()); StartMovement(movement ?? staticIdleMovement, MovementSlot.Idle); } else { StartMovement(staticIdleMovement, MovementSlot.Idle); } }
public void Initialize() { while (!Empty()) { IMovementGenerator curr = Top(); Pop(); if (curr != null) { DirectDelete(curr); } } InitDefault(); }
void DelayedExpire() { if (size() > 1) { IMovementGenerator curr = top(); pop(); DelayedDelete(curr); } while (!empty() && top() == null) { --_top; } }
void DelayedExpire() { if (Size() > 1) { IMovementGenerator curr = Top(); Pop(); DelayedDelete(curr); } while (!Empty() && Top() == null) { --_top; } }
void DelayedClean(MovementSlot slot) { IMovementGenerator motion = GetMotionSlot(slot); if (motion != null) { _slot[(int)slot] = null; DelayedDelete(motion); } while (!Empty() && Top() == null) { --_top; } }
public void PropagateSpeedChange() { if (Empty()) { return; } IMovementGenerator movement = Top(); if (movement == null) { return; } movement.UnitSpeedChanged(); }
void DirectClean(MovementSlot slot) { IMovementGenerator motion = GetMotionSlot(slot); if (motion != null) { _slot[(int)slot] = null; DirectDelete(motion); } while (!Empty() && Top() == null) { --_top; } if (Empty()) { Initialize(); } else if (NeedInitTop()) { InitTop(); } }
bool IsStatic(IMovementGenerator movement) { return(movement == staticIdleMovement); }
bool isStatic(IMovementGenerator mv) { return(mv == staticIdleMovement); }
void push(IMovementGenerator _Val) { ++_top; Impl[_top] = _Val; }