Ejemplo n.º 1
0
        private void CalculateAbilityScores(UnitEntity self, World world, Dictionary <string, float> scores, Dictionary <string, Vector3Int> targets)
        {
            foreach (Vector3Int tile in world.GetAdjacents(self.Position))
            {
                UnitEntity unit = world.UnitManager.GetUnitAt <UnitEntity>(tile);
                if (unit != null && unit.Combat.IsEnemy(self.Combat))
                {
                    scores["attack"]  = 2;
                    targets["attack"] = tile;
                    break;
                }
            }

            Ability fireball = GlobalAbilityDictionary.GetAbility("fireball");

            foreach (Vector3Int tile in fireball.GetWithinRange(self, world))
            {
                int count = 0;
                foreach (Vector3Int area in fireball.GetAreaOfEffect(self.Position, tile, world))
                {
                    UnitEntity unit = world.UnitManager.GetUnitAt <UnitEntity>(area);
                    if (unit != null && unit.Combat.IsEnemy(self.Combat))
                    {
                        count++;
                    }
                }

                float score = 2.5f * count;
                if (scores["fireball"] < score)
                {
                    scores["fireball"]  = score;
                    targets["fireball"] = tile;
                }
            }
        }
Ejemplo n.º 2
0
        public void ExecuteAbility(UnitEntity self, World world)
        {
            List <string> abilities = self.Combat.Abilities;

            Dictionary <string, float>      abilityScores = new Dictionary <string, float>();
            Dictionary <string, Vector3Int> targets       = new Dictionary <string, Vector3Int>();

            foreach (string ability in abilities)
            {
                abilityScores.Add(ability, 0);
                targets.Add(ability, self.Position);
            }

            CalculateAbilityScores(self, world, abilityScores, targets);

            List <KeyValuePair <string, float> > scores = abilityScores.ToList();

            scores.Sort(CompareAbilityScore);
            if (scores[0].Value > 0)
            {
                string id = scores[0].Key;
                Debug.Log(self.Name + " casting " + id);
                Ability ability = GlobalAbilityDictionary.GetAbility(id);
                self.Combat.CastAbility(ability, targets[id]);
            }
        }