예제 #1
0
        public virtual void Act()
        {
            var rand           = new Random();
            var isValidCommand = false;
            KeyValuePair <string, Skill> skillChoice = new KeyValuePair <string, Skill>();
            var targets = new List <Actor>();

            while (!isValidCommand)
            {
                skillChoice = SkillSet.ToList()[rand.Next(SkillSet.Count)];

                switch (skillChoice.Value.TargetingType)
                {
                case TargetingType.Self:
                    targets.Add(this);
                    break;

                case TargetingType.OneAlly:
                    targets.Add(Context.Enemies[rand.Next(Context.Enemies.Count)]);
                    break;

                case TargetingType.OneOtherAlly:
                    if (Context.Enemies.Count == 1)
                    {
                        continue;
                    }
                    Actor target = this;
                    while (target == this)
                    {
                        target = Context.Enemies[rand.Next(Context.Enemies.Count)];
                    }
                    targets.Add(target);
                    break;

                case TargetingType.OneEnemy:
                    targets.Add(Context.Allies[rand.Next(Context.Allies.Count)]);
                    break;

                case TargetingType.AllAllies:
                    targets.AddRange(Context.Enemies);
                    break;

                case TargetingType.AllEnemies:
                    targets.AddRange(Context.Allies);
                    break;

                case TargetingType.Everyone:
                    targets.AddRange(Context.AllActors);
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
                isValidCommand = true;
            }
            UseSkill(skillChoice.Key, targets);
        }