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); }
// 攻撃範囲内のキャラクター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); }