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; }
public void AddManeuver(Maneuver newManeuver) { newManeuver.Card = card; maneuvers.RemoveAll((Maneuver man) => NewManeuverEliminatesExistingManeuver(man, newManeuver)); maneuvers.Add(newManeuver); maneuvers.Sort(); }
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); }
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); }
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); }