Exemplo n.º 1
0
        public static AvoidanceVector Combine(AvoidanceVector a, AvoidanceVector b)
        {
            if (a.Magnitude <= 0)
            {
                return(b);
            }
            if (b.Magnitude <= 0)
            {
                return(a);
            }

            float heading   = (a.Heading + b.Heading) / 2f;
            float magnitude = Math.Max(a.Magnitude, b.Magnitude);

            return(new AvoidanceVector(heading, magnitude, a.FinishOnDistance && b.FinishOnDistance));
        }
Exemplo n.º 2
0
        public RunStatus Update()
        {
            var characters = GameObjectManager.GetObjectsOfType <BattleCharacter>()
                             .ToList();

            spellCasts.RemoveAll(sc => !characters.Contains(sc.Caster) || sc.Caster.IsDead || SpellExpired(sc) || !sc.Caster.IsValid);

            var newCasts = GetNewCasts(characters);

            spellCasts.AddRange(newCasts);
            UnknownCast = GetNewUnknownCast(newCasts);

            var newAvoidableCasts = GetNewAvoidable(newCasts);

            castsBeingAvoided.AddRange(newAvoidableCasts.Select(t => t.Item1));

            var updatedVector = CurrentVector.GetUpdatedVector();
            var newVectors    = newAvoidableCasts.Select(t => t.Item2).ToList();

            CurrentVector = newVectors.Count > 0 ? newVectors.Aggregate(updatedVector, VectorTools.Combine) : updatedVector;

            return(RunStatus.Success);
        }