Esempio n. 1
0
        private void BuildFrame(Tick tick, out MovementFrame frame)
        {
            frame = MovementFrame.Invalid;
            Stack <Maneuver> stack = GetManeuvers(tick);

            if (stack == null)
            {
                frame.valid = false;
                return;
            }
            Maneuver      maneuver = stack.Pop();
            MovementFrame frame2   = GetTickFrame(tick - 1);

            if (!frame2.valid && tick > oldTick)
            {
                BuildFrame(tick - 1, out frame2);
            }
            frame2.valid = true;
            frame        = maneuver.NextFrame(tick, frame2);
            Vector3 position = frame.position;
            Euler3  euler    = frame.euler3;

            foreach (Maneuver item in stack)
            {
                frame = item.NextFrame(tick, frame);
            }
            frame.position = position;
            frame.euler3   = euler;
        }
Esempio n. 2
0
 public void AddManeuver(Maneuver newManeuver)
 {
     newManeuver.Card = card;
     maneuvers.RemoveAll((Maneuver man) => NewManeuverEliminatesExistingManeuver(man, newManeuver));
     maneuvers.Add(newManeuver);
     maneuvers.Sort();
 }
Esempio n. 3
0
        public Maneuver GetLastManeuverAtTick(Tick tick)
        {
            Maneuver result = null;

            if (maneuvers.Count == 0)
            {
                return(null);
            }
            for (int i = 0; i < maneuvers.Count; i++)
            {
                if (maneuvers[i].GetStartTick() <= tick)
                {
                    result = maneuvers[i];
                }
            }
            return(result);
        }
Esempio n. 4
0
        public Stack <Maneuver> GetManeuvers(Tick tick)
        {
            Maneuver lastManeuverAtTick = GetLastManeuverAtTick(tick);

            if (lastManeuverAtTick == null)
            {
                return(null);
            }
            Tick startTick = lastManeuverAtTick.GetStartTick();

            maneuverStack.Clear();
            for (int i = 0; i < maneuvers.Count; i++)
            {
                Maneuver maneuver = maneuvers[i];
                if (maneuver.GetStartTick() == startTick)
                {
                    maneuverStack.Push(maneuver);
                }
            }
            return(maneuverStack);
        }
Esempio n. 5
0
        private bool NewManeuverEliminatesExistingManeuver(Maneuver existingManeuver, Maneuver newManeuver)
        {
            switch (existingManeuver.GetStartTick() >= newManeuver.GetStartTick())
            {
            case false:
                return(false);

            case true:
                switch (existingManeuver.IsExclusive + newManeuver.IsExclusive)
                {
                case 2:
                    return(true);

                case 1:
                    return(false);

                case 0:
                    return(existingManeuver.GetType() == newManeuver.GetType());
                }
                break;
            }
            //Debug.LogError("We should never get here.");
            return(true);
        }