/// <summary> /// 炎を出現させます /// </summary> /// <param name="coordinate">Coordinate.</param> /// <param name="firePower">Fire power.</param> public void SpawnFire(Main_MapGenerator.Coordinate coordinate, int firePower) { // 炎の伸びる方向を定義 var directions = new Main_MapGenerator.Coordinate[] { new Main_MapGenerator.Coordinate(1, 0), new Main_MapGenerator.Coordinate(-1, 0), new Main_MapGenerator.Coordinate(0, 1), new Main_MapGenerator.Coordinate(0, -1) }; // まずは爆弾と同じマスに炎を出現 Instantiate(firePrefab, CoordinateToPosition(coordinate), Quaternion.identity); // 各方向に対して順次炎を伸ばしていく foreach (var direction in directions) { for (var i = 1; i <= firePower; i++) { var targetCoordinate = coordinate + direction * i; if (staticWalls.ContainsKey(targetCoordinate)) { // 壊せない壁があった場合は炎を置く前に終了(該当方向にはこれ以上伸ばさない) break; } var position = CoordinateToPosition(targetCoordinate); Instantiate(firePrefab, position, Quaternion.identity); if (walls.ContainsKey(targetCoordinate) || boms.ContainsKey(targetCoordinate)) { // 壊せる壁や他の爆弾があった場合は炎をそのマスに置いてから終了(該当方向にはこれ以上伸ばさない) break; } } } }
void Start() { // プレイヤーキャラ配置 var playerCharacterSpawnCoordinate = new Main_MapGenerator.Coordinate(1, 1); playerCharacter.transform.position = CoordinateToPosition(playerCharacterSpawnCoordinate); // マップ情報生成 var mapGenerator = new Main_MapGenerator(); var map = mapGenerator.Generate(13, 13, new Main_MapGenerator.Coordinate[] { playerCharacterSpawnCoordinate }); // マップ情報を元にマップ組み立て foreach (var cell in map) { var position = CoordinateToPosition(cell.coordinate); Instantiate(floorPrefab, position, Quaternion.identity); switch (cell.type) { case Main_MapGenerator.Cell.Types.StaticWall: var staticWall = Instantiate(staticWallPrefab, position, Quaternion.identity); staticWalls.Add(cell.coordinate, staticWall); break; case Main_MapGenerator.Cell.Types.Wall: var wall = Instantiate(wallPrefab, position, Quaternion.identity); walls.Add(cell.coordinate, wall); break; } } }
/// <summary> /// 空のマスどうかを返します /// </summary> /// <returns><c>true</c> if this instance is empty cell the specified coordinate; otherwise, <c>false</c>.</returns> /// <param name="coordinate">Coordinate.</param> public bool IsEmptyCell(Main_MapGenerator.Coordinate coordinate, bool ignorePitfalls = false, bool ignoreWalls = false) { boms.RemoveAll((k, v) => null == v); pitfalls.RemoveAll((k, v) => null == v); walls.RemoveAll((k, v) => null == v); return(!boms.ContainsKey(coordinate) && (ignorePitfalls || !pitfalls.ContainsKey(coordinate)) && (ignoreWalls || !walls.ContainsKey(coordinate)) && !staticWalls.ContainsKey(coordinate)); }
/// <summary> /// 爆弾を初期化します /// </summary> /// <param name="coordinate">Coordinate.</param> /// <param name="firePower">Fire power.</param> public void Initialize(Main_MapGenerator.Coordinate coordinate, int firePower) { this.coordinate = coordinate; this.firePower = firePower; StartCoroutine(CountdownCoroutine()); }
/// <summary> /// マス目座標をワールド座標に変換します /// </summary> /// <returns>The to position.</returns> /// <param name="coordinate">Coordinate.</param> public Vector3 CoordinateToPosition(Main_MapGenerator.Coordinate coordinate) { return(new Vector3(coordinate.x, coordinate.y)); }