public void RegisterTurnTaker(ITurnTaker turnTaker) { if (!turnTakers.Contains(turnTaker)) { turnTakers.Add(turnTaker); } }
public void StartBattle() { this.playerSquads = new List <Squad>(); this.aiSquads = new List <Squad>(); List <Squad> allSquads = FindObjectsOfType <Squad>().ToList(); foreach (Squad squad in allSquads) { if (squad.gameObject.tag == "AI") { squad.SetBannerColor(Color.cyan); this.aiSquads.Add(squad); } if (squad.gameObject.tag == "Player") { this.playerSquads.Add(squad); if (squad.GetSquadType() == ESquadType.King) { squad.GetComponent <SquadCollisions>().EventSquadCapturedFlag.AddListener(this); } } squad.EventSquadDefeated.AddListener(this); } this.playerController = new PlayerController(this.attackDirectionArrow); this.aiController = new AIController(this.aiSquads); }
public IEnumerator PerformNextTurn() { ITurnTaker nextTurnTaker = GetFastestAndReorder(turnInfo).turnTaker; yield return(nextTurnTaker.PrepareOnTurn()); Turn turn = nextTurnTaker.OnTurn(); int timeTaken = 0; foreach (Step step in turn.steps) { //Perform the next step if enough time remains if (step.MinTimeRequiredToStart + timeTaken > turn.maxTime) { break; } yield return(step.Action()); timeTaken += step.TimeTaken(); foreach (var reaction in reactions) { //TODO: Add some sort of indicator that what's occurring is a reaction yield return(reaction.Action()); } reactions.Clear(); } }
/// <summary> /// Initialize all registered TurnTakers to begin ticking. /// </summary> private void InitializeTickingEntities() { tickingEntities = new Queue <ITurnTaker>(turnTakers.Count); for (int i = 0; i < turnTakers.Count; i++) { ITurnTaker turnTaker = turnTakers[i]; turnTaker.SetTickState(TurnTakerState.WAITING); tickingEntities.Enqueue(turnTaker); } }
public void UnregisterTurnTaker(ITurnTaker turnTaker) { if (turnTakers.Contains(turnTaker)) { turnTakers.Remove(turnTaker); if (tickingEntities != null && tickingEntities.Contains(turnTaker)) { RemoveEntity(turnTaker); } } }
/// <summary> /// If the removed entity (probably died, is currently ticking, we need to remove it to avoid holding a reference /// to a freed entity /// </summary> private void RemoveEntity(ITurnTaker turnTaker) { Queue <ITurnTaker> tempQueue = new Queue <ITurnTaker>(tickingEntities.Count - 1); while (tickingEntities.Count > 0) { ITurnTaker tempEntity = tickingEntities.Dequeue(); if (tempEntity != turnTaker) { tempQueue.Enqueue(tempEntity); } } tickingEntities = tempQueue; }
/// <summary> /// Process all the currently registered TurnTakers. /// </summary> private void ProcessTickingEntities(float delta) { Queue <ITurnTaker> tickedEntities = new Queue <ITurnTaker>(); while (tickingEntities.Count > 0) { ITurnTaker turnTaker = tickingEntities.Dequeue(); if (turnTaker.GetTickState() == TurnTakerState.WAITING) { turnTaker.InitTick(); turnTaker.SetTickState(TurnTakerState.TICKING); tickedEntities.Enqueue(turnTaker); } else if (turnTaker.GetTickState() == TurnTakerState.TICKING) { turnTaker.Tick(delta); tickedEntities.Enqueue(turnTaker); } } tickingEntities = tickedEntities; }
public void Unregister(ITurnTaker turnTaker) { turnInfo.RemoveAll(info => info.turnTaker == turnTaker); }
public void Register(ITurnTaker turnTaker) { turnInfo.Add(new TurnTakerInfo(turnTaker)); }
public TurnTakerInfo(ITurnTaker turnTaker) { this.turnTaker = turnTaker; additionalPriority = 0; }
public bool UnregisterTurnTaker(ITurnTaker turnTaker) { return(toRemove.Add(turnTaker)); }
public bool RegisterTurnTaker(ITurnTaker turnTaker) { return(toAdd.Add(turnTaker)); }
public static void UnregisterForTurn(ITurnTaker turnTaker) { turns.Unregister(turnTaker); }
public GameRunner(IRandomizer randomizer, IGameValidator gameValidator, ITurnTaker turnTaker) { this.randomizer = randomizer; this.gameValidator = gameValidator; this.turnTaker = turnTaker; }