Exemplo n.º 1
0
        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++;
            }
        }
Exemplo n.º 2
0
        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++;
            }
        }
Exemplo n.º 3
0
        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++;
            }
        }
Exemplo n.º 4
0
        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++;
            }
        }
Exemplo n.º 5
0
        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));
        }
Exemplo n.º 6
0
        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)));
        }
Exemplo n.º 7
0
        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));
        }
Exemplo n.º 8
0
        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();
        }
Exemplo n.º 9
0
 public IPromise Battle(ICombatTeam teamA, ICombatTeam teamB)
 {
     return(TeamAttack(teamA, teamB)
            .Then(() => PromiseTimerHelper.Instance.WaitFor(delayPerTeamFight))
            .Then(() => TeamAttack(teamB, teamA)));
 }
Exemplo n.º 10
0
 public void DrawBattle(ICombatTeam teamA, ICombatTeam teamB, List <GameObject> aAnchors, List <GameObject> bAnchors)
 {
     DrawTeam(teamA, aAnchors);
     DrawTeam(teamB, bAnchors);
 }
Exemplo n.º 11
0
 public ICombatant ChooseTank(ICombatTeam team)
 {
     return(team.LivingCombatants().OrderByDescending(combatant => combatant.Threat).FirstOrDefault());
 }