Ejemplo n.º 1
0
        public IEnumerable <int> CpuAttackTargets(Character attacker)
        {
            var list = new List <int>();

            for (var skillIndex = 0; skillIndex < 3; skillIndex++)
            {
                var range = attacker.Skill(skillIndex).Range;
                foreach (Direction direction in Enum.GetValues(typeof(Direction)))
                {
                    range = RotateClockwise.Rotate(range);
                    attacker.SetDirection(direction);

                    var position = attacker.Position().Value;
                    var x        = position.x;
                    var y        = position.z;
                    for (var column = math.max(0, x - (range.Length - 1) / 2);
                         column < math.max(_stageHash.Count, x + (range.Length - 1) / 2);
                         column++)
                    {
                        for (var line = math.max(0, y - (range.GetLength(0) - 1) / 2);
                             line < math.max(_stageHash.Count, y + (range.GetLength(0) - 1) / 2);
                             line++)
                        {
                            if (range[column, line] != 1)
                            {
                                continue;
                            }
                            var panel = _stage[_stageHash[column][line]];
                            panel.Target(true);
                            var id = panel.GetCharacterId();
                            if (id == -1)
                            {
                                continue;
                            }
                            list.Add(id);
                        }
                    }

                    if (list.Count != 0)
                    {
                        return(list);
                    }
                }
            }

            return(list);
        }
Ejemplo n.º 2
0
        // 攻撃範囲内のキャラクターID取得
        public IEnumerable <int> TargetCharacterIds(Character attacker, int skillIndex)
        {
            var list  = new List <int>();
            var range = attacker.Skill(skillIndex).Range;

            for (var i = 0; i < (int)attacker.OnDirectionChanged().Value; i++)
            {
                range = RotateClockwise.Rotate(range);
            }

            var position = attacker.Position().Value;
            var x        = position.x;
            var y        = position.z;

            for (var column = math.max(0, x - (range.Length - 1) / 2);
                 column < math.max(_stageHash.Count, x + (range.Length - 1) / 2);
                 column++)
            {
                for (var line = math.max(0, y - (range.GetLength(0) - 1) / 2);
                     line < math.max(_stageHash.Count, y + (range.GetLength(0) - 1) / 2);
                     line++)
                {
                    if (range[column, line] != 1)
                    {
                        continue;
                    }
                    var panel = _stage[_stageHash[column][line]];
                    panel.Target(true);
                    var id = panel.GetCharacterId();
                    if (id == -1)
                    {
                        continue;
                    }
                    list.Add(id);
                }
            }

            return(list);
        }