protected void HookupOnReceiveTextFields(ICombatTeam team, List <GameObject> textFields) { var index = 0; foreach (var unit in team.Combatants) { var unitText = textFields[index].GetComponent <Text>(); var initialHpText = unitText.text; // Place unit in a temporary variable so that it survives foreach loop scope iteration in closure. var activeUnit = unit; UnityAction hitCallback = () => { unitText.text = initialHpText .Replace("{hp}", activeUnit.Hp.ToString()) .Replace("{maxhp}", activeUnit.MaxHp.ToString()); }; hitCallback(); activeUnit.OnReceiveHit.AddListener(hitCallback); index++; } }
private void DrawTeam(ICombatTeam team, List <GameObject> anchors) { var count = 0; foreach (var combatant in team.Combatants) { combatant.GameObject.transform.position = anchors[count].transform.position; count++; } }
protected void HookupNameFields(ICombatTeam team, List <GameObject> textFields) { var index = 0; foreach (var unit in team.Combatants) { var unitText = textFields[index].GetComponent <Text>(); var initialText = unitText.text; unitText.text = initialText.Replace("{name}", unit.Name); index++; } }
protected void DestroyUnusedInfoBoxes(ICombatTeam team, List <GameObject> infoBoxes) { var index = 0; foreach (var infoBox in infoBoxes) { if (team.Combatants.ElementAtOrDefault(index) == null) { Destroy(infoBox); } index++; } }
protected IPromise TeamAttack(ICombatTeam teamA, ICombatTeam teamB) { var promises = new List <Func <IPromise> >(); // Foreach unit in team A, attack the highest living unit on teamB with the highest threat. foreach (var activeUnit in teamA.CombatantsByInitiative()) { var attacker = activeUnit; promises.Add(() => UnitAttack(attacker, teamB)); } return(Promise.Sequence(promises)); }
public ICombatant ChooseTank(ICombatTeam team) { var firstCombatant = team.LivingCombatants().OrderByDescending(combatant => combatant.Threat).FirstOrDefault(); if (firstCombatant == null) { return(null); } var random = new Random(); var tankCandidates = team.LivingCombatants().Where(combatant => combatant.Threat == firstCombatant.Threat).ToList(); return(tankCandidates.ElementAt(random.Next(0, tankCandidates.Count))); }
protected IPromise UnitAttack(ICombatant attacker, ICombatTeam defendingTeam) { // Get the highest threat enemy unit and attack it. var defender = defendingTeam.GetTank(); // TODO look into breaking out of the group of attacks early if possible. // Return an autoresolved promise if no defender is found. if (defender == null) { return(Promise.Resolved()); } attacker.Attack(defender); return(PromiseTimerHelper.Instance.WaitFor(delayPerUnitFight)); }
public void StartBattle(ICombatTeam team1, ICombatTeam team2) { teamA = team1; teamB = team2; RoundNumber++; HookupTextFields(); // Display the battle on the screen. var battleIllustrator = new BattleIllustrator(); battleIllustrator.DrawBattle(teamA, teamB, travelerAnchors, banditAnchors); DisableButtons(); onBattleStart.Invoke(); }
public IPromise Battle(ICombatTeam teamA, ICombatTeam teamB) { return(TeamAttack(teamA, teamB) .Then(() => PromiseTimerHelper.Instance.WaitFor(delayPerTeamFight)) .Then(() => TeamAttack(teamB, teamA))); }
public void DrawBattle(ICombatTeam teamA, ICombatTeam teamB, List <GameObject> aAnchors, List <GameObject> bAnchors) { DrawTeam(teamA, aAnchors); DrawTeam(teamB, bAnchors); }
public ICombatant ChooseTank(ICombatTeam team) { return(team.LivingCombatants().OrderByDescending(combatant => combatant.Threat).FirstOrDefault()); }