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); } }
protected void Add(long duration, AgentItem src, AgentItem seedSrc, long time, bool atFirst, bool isExtension) { var toAdd = new BuffStackItem(time, duration, src, seedSrc, isExtension); // Find empty slot if (!IsFull) { if (atFirst) { BuffStack.Insert(0, toAdd); } else { _logic.Add(Log, BuffStack, toAdd); } } // Replace lowest value else { bool found = _logic.StackEffect(Log, toAdd, BuffStack, WasteSimulationResult); if (!found) { OverstackSimulationResult.Add(new BuffSimulationItemOverstack(src, duration, time)); } } }
protected override void Update(long timePassed) { if (BuffStack.Any() && timePassed > 0) { long diff = timePassed; long leftOver = 0; var activeStacks = BuffStack.Where(x => x.Active && x.Duration > 0).Take(_capacity).ToList(); if (activeStacks.Any()) { var toAdd = new BuffSimulationItemIntensity(activeStacks); GenerationSimulation.Add(toAdd); long currentDur = activeStacks.Min(x => x.Duration); long timeDiff = currentDur - timePassed; if (timeDiff < 0) { diff = currentDur; leftOver = timePassed - diff; } if (toAdd.End > toAdd.Start + diff) { toAdd.OverrideEnd(toAdd.Start + diff); } foreach (BuffStackItemID buffStackItem in activeStacks) { buffStackItem.Shift(0, diff); } } foreach (BuffStackItemID buffStackItem in BuffStack) { buffStackItem.Shift(diff, 0); } Update(leftOver); } }
protected override void Update(long timePassed) { if (BuffStack.Count > 0 && timePassed > 0) { var toAdd = new BuffSimulationItemIntensity(BuffStack); GenerationSimulation.Add(toAdd); long diff = Math.Min(BuffStack.Min(x => x.Duration), timePassed); long leftOver = timePassed - diff; if (toAdd.End > toAdd.Start + diff) { toAdd.OverrideEnd(toAdd.Start + diff); } // Subtract from each for (int i = BuffStack.Count - 1; i >= 0; i--) { BuffStack[i].Shift(diff, diff); } for (int i = BuffStack.Count - 1; i >= 0; i--) { if (BuffStack[i].Duration == 0) { BuffStack[i].Shift(0, -leftOver); } } 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(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) { List <BuffStackItemID> BuffStackToUse = BuffStack; long diff = Math.Min(BuffStackToUse.Min(x => x.Duration), timePassed); if (diff == 0) { BuffStackToUse = BuffStack.Where(x => x.Duration > 0).ToList(); if (!BuffStackToUse.Any()) { return; } diff = Math.Min(BuffStackToUse.Min(x => x.Duration), timePassed); } var toAdd = new BuffSimulationItemIntensity(BuffStackToUse); GenerationSimulation.Add(toAdd); long leftOver = timePassed - diff; if (toAdd.End > toAdd.Start + diff) { toAdd.OverrideEnd(toAdd.Start + diff); } // Subtract from each from the original stack so that everyone's time start are shifted foreach (BuffStackItemID buffStackItem in BuffStack) { buffStackItem.Shift(diff, diff); } Update(leftOver); } }
public override void Activate(uint stackID) { _activeStack = BuffStack.FirstOrDefault(x => x.StackID == stackID); if (_activeStack == null) { throw new EIBuffSimulatorIDException("Activate has failed"); } _activeStack.Activate(); }
public override void Add(long duration, AgentItem src, long start, uint stackID, bool addedActive, uint overstackDuration) { var toAdd = new BuffStackItem(start, duration, src, stackID); BuffStack.Add(toAdd); //AddedSimulationResult.Add(new BuffCreationItem(src, duration, start, toAdd.ID)); if (overstackDuration > 0) { OverrideCandidates.Add((overstackDuration, src)); } }
public override void Add(long duration, AgentItem src, long start, uint stackID, bool addedActive, uint overstackDuration) { var toAdd = new BuffStackItemID(start, duration, src, addedActive, stackID); BuffStack.Add(toAdd); if (addedActive) { if (_activeStack != null) { _activeStack.Disable(); } _activeStack = toAdd; } }
public override void Remove(AgentItem by, long removedDuration, int removedStacks, long time, ParseEnum.BuffRemove removeType, uint id) { switch (removeType) { case ParseEnum.BuffRemove.All: foreach (BuffStackItem stackItem in BuffStack) { WasteSimulationResult.Add(new BuffSimulationItemWasted(stackItem.Src, stackItem.Duration, time)); if (stackItem.Extensions.Count > 0) { foreach ((AgentItem src, long value) in stackItem.Extensions) { WasteSimulationResult.Add(new BuffSimulationItemWasted(src, value, time)); } } } BuffStack.Clear(); break; case ParseEnum.BuffRemove.Single: for (int i = 0; i < BuffStack.Count; i++) { BuffStackItem stackItem = BuffStack[i]; if (Math.Abs(removedDuration - stackItem.TotalBoonDuration()) < GeneralHelper.ServerDelayConstant) { WasteSimulationResult.Add(new BuffSimulationItemWasted(stackItem.Src, stackItem.Duration, time)); if (stackItem.Extensions.Count > 0) { foreach ((AgentItem src, long value) in stackItem.Extensions) { WasteSimulationResult.Add(new BuffSimulationItemWasted(src, value, time)); } } BuffStack.RemoveAt(i); break; } } break; default: break; } _logic.Sort(Log, BuffStack); }
public override void Remove(AgentItem by, long removedDuration, int removedStacks, long time, ArcDPSEnums.BuffRemove removeType, uint stackID) { switch (removeType) { case ArcDPSEnums.BuffRemove.All: foreach (BuffStackItem stackItem in BuffStack) { WasteSimulationResult.Add(new BuffSimulationItemWasted(stackItem.Src, stackItem.Duration, time)); if (stackItem.Extensions.Any()) { foreach ((AgentItem src, long value) in stackItem.Extensions) { WasteSimulationResult.Add(new BuffSimulationItemWasted(src, value, time)); } } } BuffStack.Clear(); break; case ArcDPSEnums.BuffRemove.Single: for (int i = 0; i < BuffStack.Count; i++) { BuffStackItem stackItem = BuffStack[i]; if (Math.Abs(removedDuration - stackItem.TotalDuration) < ParserHelper.BuffSimulatorDelayConstant) { WasteSimulationResult.Add(new BuffSimulationItemWasted(stackItem.Src, stackItem.Duration, time)); if (stackItem.Extensions.Any()) { foreach ((AgentItem src, long value) in stackItem.Extensions) { WasteSimulationResult.Add(new BuffSimulationItemWasted(src, value, time)); } } BuffStack.RemoveAt(i); break; } } break; default: break; } }
public override void Add(long duration, AgentItem src, long start, uint id, bool addedActive, uint overstackDuration) { var toAdd = new BuffStackItem(start, duration, src, ++ID); // Find empty slot if (BuffStack.Count < Capacity) { BuffStack.Add(toAdd); _logic.Sort(Log, BuffStack); } // Replace lowest value else { bool found = _logic.StackEffect(Log, toAdd, BuffStack, WasteSimulationResult); if (!found) { OverstackSimulationResult.Add(new BuffSimulationItemOverstack(src, duration, start)); } } }
protected override void Clear() { BuffStack.Clear(); }
public override void Activate(uint stackID) { BuffStackItem active = BuffStack.Find(x => x.StackID == stackID); _activeStack = active ?? throw new InvalidOperationException("Error Encountered: Activate has failed"); }
public override void Add(long duration, AgentItem src, long start, uint stackID, bool addedActive, uint overstackDuration) { var toAdd = new BuffStackItemID(start, duration, src, addedActive, stackID); BuffStack.Add(toAdd); }