public override bool StackEffect(ParsedLog log, BoonStackItem stackItem, List <BoonStackItem> stacks, List <BoonSimulationItemWasted> wastes) { if (stacks.Count == 0) { return(false); } BoonStackItem stack = stacks[0]; if (stack.TotalBoonDuration() < stackItem.TotalBoonDuration()) { wastes.Add(new BoonSimulationItemWasted(stack.Src, stack.BoonDuration, stack.Start)); if (stack.Extensions.Count > 0) { foreach ((AgentItem src, long value) in stack.Extensions) { wastes.Add(new BoonSimulationItemWasted(src, value, stack.Start)); } } stacks[0] = stackItem; Sort(log, stacks); return(true); } else { return(false); } }
public override bool StackEffect(ParsedLog log, BoonStackItem stackItem, List <BoonStackItem> stacks, List <BoonSimulationItemWasted> wastes) { if (stacks.Count <= 1) { throw new InvalidOperationException("Queue logic based must have a >1 capacity"); } BoonStackItem first = stacks[0]; stacks.RemoveAt(0); BoonStackItem minItem = stacks.MinBy(x => x.TotalBoonDuration()); if (minItem.TotalBoonDuration() >= stackItem.TotalBoonDuration()) { stacks.Insert(0, first); return(false); } wastes.Add(new BoonSimulationItemWasted(minItem.Src, minItem.BoonDuration, minItem.Start, minItem.ApplicationTime)); if (minItem.Extensions.Count > 0) { foreach ((ushort src, long value, long time) in minItem.Extensions) { wastes.Add(new BoonSimulationItemWasted(src, value, minItem.Start, time)); } } stacks[stacks.IndexOf(minItem)] = stackItem; stacks.Insert(0, first); Sort(log, stacks); return(true); }