Exemple #1
0
 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);
     }
 }
Exemple #2
0
        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);
     }
 }
Exemple #4
0
 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);
     }
 }
Exemple #7
0
 public override void Activate(uint stackID)
 {
     _activeStack = BuffStack.FirstOrDefault(x => x.StackID == stackID);
     if (_activeStack == null)
     {
         throw new EIBuffSimulatorIDException("Activate has failed");
     }
     _activeStack.Activate();
 }
Exemple #8
0
        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;
            }
        }
Exemple #10
0
        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);
        }
Exemple #11
0
        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;
            }
        }
Exemple #12
0
        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));
                }
            }
        }
Exemple #13
0
 protected override void Clear()
 {
     BuffStack.Clear();
 }
Exemple #14
0
        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);
        }