protected override void Update(long timePassed) { if (BuffStack.Any() && timePassed > 0) { long diff = timePassed; long leftOver = 0; if (_activeStack != null && _activeStack.Duration > 0) { var toAdd = new BuffSimulationItemDuration(BuffStack); GenerationSimulation.Add(toAdd); long timeDiff = _activeStack.Duration - timePassed; if (timeDiff < 0) { diff = _activeStack.Duration; leftOver = timePassed - diff; } if (toAdd.End > toAdd.Start + diff) { toAdd.OverrideEnd(toAdd.Start + diff); } _activeStack.Shift(0, diff); // keep current stack alive while waiting for stack active/ stack remove to arrive if (_activeStack.Duration == 0 && leftOver > 0 && leftOver < ParserHelper.BuffSimulatorStackActiveDelayConstant) { _activeStack.Shift(0, -leftOver); } } foreach (BuffStackItemID buffStackItem in BuffStack) { buffStackItem.Shift(diff, 0); } Update(leftOver); } }
protected override void Update(long timePassed) { if (BuffStack.Any() && timePassed > 0) { long diff = timePassed; long leftOver = 0; if (_activeStack != null && _activeStack.Duration > 0) { var toAdd = new BuffSimulationItemDuration(_activeStack); GenerationSimulation.Add(toAdd); long timeDiff = _activeStack.Duration - timePassed; if (timeDiff < 0) { diff = _activeStack.Duration; leftOver = timePassed - diff; } if (toAdd.End > toAdd.Start + diff) { toAdd.OverrideEnd(toAdd.Start + diff); } _activeStack.Shift(0, diff); } foreach (BuffStackItemID buffStackItem in BuffStack) { buffStackItem.Shift(diff, 0); } Update(leftOver); } }