Beispiel #1
0
        public void Simulate(List <AbstractBuffEvent> logs, long fightDuration)
        {
            if (GenerationSimulation.Any())
            {
                return;
            }
            long firstTimeValue = logs.Count > 0 ? Math.Min(logs.First().Time, 0) : 0;
            long timeCur        = firstTimeValue;
            long timePrev       = firstTimeValue;

            foreach (AbstractBuffEvent log in logs)
            {
                timeCur = log.Time;
                if (timeCur - timePrev < 0)
                {
                    throw new InvalidOperationException("Negative passed time in boon simulation");
                }
                Update(timeCur - timePrev);
                log.UpdateSimulator(this);
                timePrev = timeCur;
            }
            Update(fightDuration - timePrev);
            GenerationSimulation.RemoveAll(x => x.Duration <= 0);
            Clear();
            Trim(fightDuration);
        }
Beispiel #2
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);
     }
 }
Beispiel #3
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);
     }
 }
Beispiel #4
0
        // Public Methods

        protected override void Update(long timePassed)
        {
            if (BoonStack.Count > 0)
            {
                var toAdd = new BoonSimulationItemDuration(BoonStack[0]);
                if (GenerationSimulation.Count > 0)
                {
                    var last = GenerationSimulation.Last();
                    if (last.End > toAdd.Start)
                    {
                        last.SetEnd(toAdd.Start);
                    }
                }
                GenerationSimulation.Add(toAdd);
                BoonStack[0] = new BoonStackItem(BoonStack[0], timePassed, timePassed);
                long diff = timePassed - Math.Abs(Math.Min(BoonStack[0].BoonDuration, 0));
                for (int i = 1; i < BoonStack.Count; i++)
                {
                    BoonStack[i] = new BoonStackItem(BoonStack[i], diff, 0);
                }
                if (BoonStack[0].BoonDuration <= 0)
                {
                    // Spend leftover time
                    long leftover = Math.Abs(BoonStack[0].BoonDuration);
                    BoonStack.RemoveAt(0);
                    Update(leftover);
                }
            }
        }
Beispiel #5
0
        // Public Methods

        protected override void Update(long timePassed)
        {
            if (BoonStack.Count > 0 && timePassed > 0)
            {
                _lastSrcRemoves.Clear();
                var toAdd = new BoonSimulationItemIntensity(BoonStack);
                if (GenerationSimulation.Count > 0)
                {
                    BoonSimulationItem last = GenerationSimulation.Last();
                    if (last.End > toAdd.Start)
                    {
                        last.SetEnd(toAdd.Start);
                    }
                }
                GenerationSimulation.Add(toAdd);
                long diff     = Math.Min(BoonStack.Min(x => x.BoonDuration), timePassed);
                long leftOver = timePassed - diff;
                // Subtract from each
                for (int i = BoonStack.Count - 1; i >= 0; i--)
                {
                    var item = new BoonStackItem(BoonStack[i], diff, diff);
                    BoonStack[i] = item;
                    if (item.BoonDuration == 0)
                    {
                        _lastSrcRemoves.Add(item.SeedSrc);
                    }
                }
                BoonStack.RemoveAll(x => x.BoonDuration == 0);
                Update(leftOver);
            }
        }
 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.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);
     }
 }
Beispiel #9
0
 // Abstract Methods
 /// <summary>
 /// Make sure the last element does not overflow the fight
 /// </summary>
 /// <param name="fightDuration">Duration of the fight</param>
 private void Trim(long fightDuration)
 {
     for (int i = GenerationSimulation.Count - 1; i >= 0; i--)
     {
         BuffSimulationItem data = GenerationSimulation[i];
         if (data.End > fightDuration)
         {
             data.OverrideEnd(fightDuration);
         }
         else
         {
             break;
         }
     }
     GenerationSimulation.RemoveAll(x => x.Duration <= 0);
 }
Beispiel #10
0
    // Use this for initialization
    void Start()
    {
        creaturesInfo = new int[population, 3, 6];
        for (int i = 0; i < population; i++)
        {
            for (int j = 0; j < 6; j++)
            {
                int a = Random.Range(0, 64);
                int b = Random.Range(1, 16);
                creaturesInfo[i, 0, j] = a;
                creaturesInfo[i, 1, j] = b;
            }
            creaturesInfo[i, 2, 0] = 0;
        }

        genNum        = 0;
        generationSim = GetComponent <GenerationSimulation>();
        print("GEN: " + genNum);
        runGeneration();
    }
Beispiel #11
0
        // Public Methods

        protected override void Update(long timePassed)
        {
            if (BoonStack.Count > 0 && timePassed > 0)
            {
                _lastSrcRemove = 0;
                var toAdd = new BoonSimulationItemDuration(BoonStack[0]);
                if (GenerationSimulation.Count > 0)
                {
                    var last = GenerationSimulation.Last();
                    if (last.End > toAdd.Start)
                    {
                        last.SetEnd(toAdd.Start);
                    }
                }
                GenerationSimulation.Add(toAdd);
                long timeDiff = BoonStack[0].BoonDuration - timePassed;
                long diff     = 0;
                long leftOver = 0;
                if (timeDiff < 0)
                {
                    diff     = BoonStack[0].BoonDuration;
                    leftOver = timePassed - diff;
                }
                else
                {
                    diff = timePassed;
                }
                BoonStack[0] = new BoonStackItem(BoonStack[0], diff, diff);
                for (int i = 1; i < BoonStack.Count; i++)
                {
                    BoonStack[i] = new BoonStackItem(BoonStack[i], diff, 0);
                }
                if (BoonStack[0].BoonDuration == 0)
                {
                    _lastSrcRemove = BoonStack[0].SeedSrc;
                    BoonStack.RemoveAt(0);
                }
                Update(leftOver);
            }
        }
Beispiel #12
0
 protected override void Update(long timePassed)
 {
     if (BuffStack.Count > 0 && timePassed > 0 && _activeStack != null)
     {
         var toAdd = new BuffSimulationItemDuration(_activeStack);
         GenerationSimulation.Add(toAdd);
         long timeDiff = _activeStack.Duration - timePassed;
         long diff;
         long leftOver = 0;
         if (timeDiff < 0)
         {
             diff     = _activeStack.Duration;
             leftOver = timePassed - diff;
         }
         else
         {
             diff = timePassed;
         }
         if (toAdd.End > toAdd.Start + diff)
         {
             toAdd.OverrideEnd(toAdd.Start + diff);
         }
         BuffStackItem oldActive = _activeStack;
         _activeStack.Shift(diff, diff);
         for (int i = 0; i < BuffStack.Count; i++)
         {
             if (BuffStack[i] != oldActive)
             {
                 BuffStack[i].Shift(diff, 0);
             }
         }
         // that means the stack was not an extension, extend duration to match time passed
         if (_activeStack.Duration == 0)
         {
             _activeStack.Shift(0, -leftOver);
         }
         Update(leftOver);
     }
 }
        // Public Methods

        protected override void Update(long timePassed)
        {
            if (BoonStack.Count > 0)
            {
                var toAdd = new BoonSimulationItemIntensity(BoonStack);
                if (GenerationSimulation.Count > 0)
                {
                    BoonSimulationItem last = GenerationSimulation.Last();
                    if (last.End > toAdd.Start)
                    {
                        last.SetEnd(toAdd.Start);
                    }
                }
                GenerationSimulation.Add(toAdd);
                // Subtract from each
                for (int i = BoonStack.Count - 1; i >= 0; i--)
                {
                    var item = new BoonStackItem(BoonStack[i], timePassed, timePassed);
                    BoonStack[i] = item;
                }
                BoonStack.RemoveAll(x => x.BoonDuration < 1);
            }
        }