public int GetKeyType(Map.EWSN door_dir) { foreach (var door in doors) { if (door.door_dir == door_dir) { return(door.KeyType); } } Debug.LogError("The room doesn't the door having the " + door_dir + " door."); return(-1); }
// ================================================================ // // 문의 방향을 각도로 한다. protected float door_dir_to_y_angle(Map.EWSN door_dir) { float y_angle = 0.0f; switch (door_dir) { case Map.EWSN.NORTH: y_angle = 0.0f; break; case Map.EWSN.SOUTH: y_angle = 180.0f; break; case Map.EWSN.EAST: y_angle = 90.0f; break; case Map.EWSN.WEST: y_angle = -90.0f; break; } return(y_angle); }
public void RegisterRoomWall(Map.EWSN dir, GameObject roomWallGO) { switch (dir) { case Map.EWSN.NORTH: northRoomWalls.Add(roomWallGO); break; case Map.EWSN.EAST: eastRoomWalls.Add(roomWallGO); break; case Map.EWSN.SOUTH: southRoomWalls.Add(roomWallGO); break; case Map.EWSN.WEST: westRoomWalls.Add(roomWallGO); break; } }
public void dbArrowSetVisible(Map.BlockIndex bi, Map.EWSN ewsn, bool is_visible) { string arrow_name = ""; switch (ewsn) { case Map.EWSN.EAST: arrow_name = "DebugE"; break; case Map.EWSN.WEST: arrow_name = "DebugW"; break; case Map.EWSN.SOUTH: arrow_name = "DebugS"; break; case Map.EWSN.NORTH: arrow_name = "DebugN"; break; } if (arrow_name != "") { GameObject arrow_go = this.floor_objects[bi.x, bi.z].findChildGameObject(arrow_name); arrow_go.SetActive(is_visible); } }
// 방 사이의 벽을 가져온다. public List <RoomWallControl> GetRoomWalls(Map.EWSN dir) { List <RoomWallControl> walls = new List <RoomWallControl>(); List <GameObject> wall_gos = null; switch (dir) { case Map.EWSN.NORTH: wall_gos = northRoomWalls; break; case Map.EWSN.EAST: wall_gos = eastRoomWalls; break; case Map.EWSN.SOUTH: wall_gos = southRoomWalls; break; case Map.EWSN.WEST: wall_gos = westRoomWalls; break; } if (wall_gos != null) { foreach (var go in wall_gos) { if (go.GetComponent <RoomWallControl>() != null) { walls.Add(go.GetComponent <RoomWallControl>()); } } } return(walls); }
//룸 안에 초기 배치할 적을 만든다. public void createRoomEnemies(RoomController room) { #if true MapCreator map_creater = MapCreator.get(); Vector3 room_position = map_creater.getRoomCenterPosition(room.getIndex()); string room_index = room.getIndex().x.ToString("D1") + room.getIndex().z.ToString("D1"); string item_type, item_name; Room level_room = this.rooms[room.getIndex().x, room.getIndex().z]; level_room.items.Clear(); List <Map.BlockIndex> lair_places = map_creater.getLairPlacesRoom(room.getIndex()); // FieldGenerator가 설정한 랜덤한 위치에 제네레이터를 배치. int n = 0; foreach (var lair_place in lair_places) { string enemy_name = "Enemy_Lair" + "." + room_index + "." + n.ToString("D3"); chrBehaviorEnemy behavior = this.createRoomEnemy <chrBehaviorEnemy>(room, enemy_name); if (behavior == null) { continue; } chrController chr = behavior.control; chrBehaviorEnemy_Lair lair = chr.behavior as chrBehaviorEnemy_Lair; // 쓰러뜨렸을 때 나타날 아이템. object item_option0 = null; if (n == 0) { item_type = "ice00"; // 당첨, 탈락 추첨. item_option0 = this.item_lot.ice_atari.draw(this.rand.getRandom()); } else { item_type = "cake00"; } item_name = item_type + "_" + room_index + "_" + level_room.enter_count + "_" + n.ToString("D2"); lair.setRewardItem(item_type, item_name, item_option0); level_room.items.Add(item_name); // 스폰할 적. chrBehaviorEnemy_Lair.SpawnEnemy spawn; spawn = lair.resisterSpawnEnemy(); spawn.enemy_name = "Enemy_Obake"; spawn.behave_kind = Enemy.BEHAVE_KIND.UROURO; spawn.behave_desc = null; spawn.frequency = 1.0f; spawn = lair.resisterSpawnEnemy(); spawn.enemy_name = "Enemy_Kumasan"; spawn.behave_kind = Enemy.BEHAVE_KIND.TOTUGEKI; spawn.behave_desc = null; spawn.frequency = 0.5f; spawn = lair.resisterSpawnEnemy(); spawn.enemy_name = "Enemy_Obake"; spawn.behave_kind = Enemy.BEHAVE_KIND.WARP_DE_FIRE; spawn.behave_desc = null; spawn.frequency = 0.5f; spawn = lair.resisterSpawnEnemy(); spawn.enemy_name = "Enemy_Kumasan"; spawn.behave_kind = Enemy.BEHAVE_KIND.JUMBO; spawn.behave_desc = null; spawn.frequency = 0.5f; spawn = lair.resisterSpawnEnemy(); spawn.enemy_name = "Enemy_Obake"; spawn.behave_kind = Enemy.BEHAVE_KIND.GOROGORO; spawn.behave_desc = null; spawn.frequency = 0.5f; Vector3 position = map_creater.getBlockCenterPosition(lair_place); lair.control.cmdSetPositionAnon(room_position + position); lair.control.cmdSetDirectionAnon(135.0f); n++; } // 도어 앞에 파수꾼처럼 배치. for (int i = 0; i < (int)Map.EWSN.NUM; i++) { DoorControl door = room.getDoor((Map.EWSN)i); if (door == null) { continue; } string enemy_name = "Enemy_Kumasan" + "." + room_index + "." + i.ToString("D3"); chrBehaviorEnemy enemy = this.createRoomEnemy <chrBehaviorEnemy>(room, enemy_name); Map.RoomIndex ri; Map.BlockIndex bi; map_creater.getBlockIndexFromPosition(out ri, out bi, door.getPosition()); Vector3 position = door.getPosition(); float angle = 0.0f; Map.EWSN eswn = door.door_dir; for (int j = 0; j < 4; j++) { if (map_creater.isPracticable(ri, bi, eswn)) { break; } eswn = Map.eswn.next_cw(eswn); } float offset = 7.0f; switch (eswn) { case Map.EWSN.NORTH: { position += Vector3.forward * offset; angle = 180.0f; } break; case Map.EWSN.SOUTH: { position += Vector3.back * offset; angle = 0.0f; } break; case Map.EWSN.EAST: { position += Vector3.right * offset; angle = 90.0f; } break; case Map.EWSN.WEST: { position += Vector3.left * offset; angle = -90.0f; } break; } enemy.control.cmdSetPositionAnon(position); enemy.control.cmdSetDirectionAnon(angle); var desc = new Character.OufukuAction.Desc(); Vector3 line = Quaternion.AngleAxis(angle, Vector3.up) * Vector3.right; desc.position0 = position + line * 2.0f; desc.position1 = position - line * 2.0f; enemy.setBehaveKind(Enemy.BEHAVE_KIND.OUFUKU, desc); } // 그 자리에서 총을 쏘는 몬스터 / 무기 체인지 아이템. int item_place = this.rand.getRandomInt(level_room.places.Count); int shot_item_sel = this.rand.getRandomInt(10) % 2; for (int i = 0; i < level_room.places.Count; i++) { var place = level_room.places[i]; Vector3 position = room_position + map_creater.getBlockCenterPosition(place); if (i == item_place) { // 무기 체인지 아이템. if (shot_item_sel == 0) { item_type = "shot_negi"; } else { item_type = "shot_yuzu"; } item_name = item_type + "_" + room_index + "_" + level_room.enter_count + "_" + n.ToString("D2"); level_room.items.Add(item_name); ItemManager.get().createItem(item_type, item_name, PartyControl.get().getLocalPlayer().getAcountID()); ItemManager.get().setPositionToItem(item_name, position); } else { // 그 자리에서 총을 쏘는 몬스터. string enemy_name = "Enemy_Obake" + "." + room_index + "." + i.ToString("D3"); chrBehaviorEnemy enemy = this.createRoomEnemy <chrBehaviorEnemy>(room, enemy_name); if (enemy == null) { continue; } enemy.setBehaveKind(Enemy.BEHAVE_KIND.SONOBA_DE_FIRE); enemy.control.cmdSetPositionAnon(position); } } #else #if false chrController chr0 = this.createRoomEnemy <chrBehaviorEnemy>(room, "Enemy_Lair").control; //chrController chr1 = this.createRoomEnemy<chrBehaviorEnemy>(room, "Enemy_Lair").control; chrBehaviorEnemy_Lair lair0 = chr0.behavior as chrBehaviorEnemy_Lair; //chrBehaviorEnemy_Lair lair1 = chr1.behavior as chrBehaviorEnemy_Lair; lair0.name += "00"; //lair0.setRewardItem("cake00", "cake01"); //lair1.setRewardItem("ice00" , "ice01"); chrBehaviorEnemy_Lair.SpawnEnemy spawn; spawn = lair0.resisterSpawnEnemy(); spawn.enemy_name = "Enemy_Kumasan"; spawn.behave_kind = Enemy.BEHAVE_KIND.JUMBO; spawn.behave_desc = null; spawn.frequency = 1.0f; //spawn = lair0.resisterSpawnEnemy(); //spawn.enemy_name = "Enemy_Kumasan"; //spawn.behave_kind = Enemy.BEHAVE_KIND.TOTUGEKI; //spawn.behave_desc = null; //spawn.frequency = 0.5f; //lair0.spawn_enemy.enemy_name = "Enemy_Obake"; //lair0.spawn_enemy.behave_kind = Enemy.BEHAVE_KIND.UROURO; //lair1.spawn_enemy = "Enemy_Obake"; Vector3 player_position = room.gameObject.transform.position; lair0.control.cmdSetPositionAnon(player_position + Vector3.forward * 2.0f); //lair1.control.cmdSetPositionAnon(player_position + Vector3.forward*2.0f + Vector3.right*4.0f); lair0.control.cmdSetDirectionAnon(135.0f); //lair1.control.cmdSetDirectionAnon(135.0f); // if (room.getIndex().x == 2 && room.getIndex().z == 1) { player_position = MapCreator.get().getPlayerStartPosition(); lair0.control.cmdSetPositionAnon(player_position + Vector3.forward * 4.0f); //lair1.control.cmdSetPositionAnon(player_position + Vector3.forward*2.0f + Vector3.right*4.0f); } #else for (int i = 0; i < 2; i++) { chrBehaviorEnemy enemy = this.createRoomEnemy <chrBehaviorEnemy>(room, i == 0 ? "Enemy_Obake" : "Enemy_Kumasan"); //chrController obake = this.createRoomEnemy<chrBehaviorEnemy>(room, "Enemy_Lair").controll; // Vector3 player_position = room.gameObject.transform.position; enemy.control.cmdSetPositionAnon(player_position + Vector3.forward * 3.0f); enemy.control.cmdSetDirectionAnon(180.0f - 45.0f); if (room.getIndex().x == 2 && room.getIndex().z == 1) { player_position = MapCreator.get().getPlayerStartPosition(); enemy.control.cmdSetPositionAnon(player_position + Vector3.forward * 2.0f + Vector3.right * 2.0f * (float)i); } if (i == 0) { //var desc = new Character.OufukuAction.Desc(); //Vector3 line = Quaternion.AngleAxis(180.0f, Vector3.up)*Vector3.back; //desc.position0 = player_position + line*2.0f; //desc.position1 = player_position - line*2.0f; enemy.setBehaveKind(Enemy.BEHAVE_KIND.GOROGORO); break; } else { enemy.setBehaveKind(Enemy.BEHAVE_KIND.TOTUGEKI); } } #endif #endif }
// 문을 가져온다. public DoorControl getDoor(Map.EWSN dir) { return(this.doors.Find(x => x.door_dir == dir)); }
// ================================================================ // // 룸 이동 후에 호출되고 싶다. public void onRoomChanged(RoomController room) { // 열쇠 아이콘을 대응하는 도어 방향으로 표시한다. if(room != null) { Map.EWSN[] key_dir = new Map.EWSN[4]; for(int i = 0;i < 4;i++) { key_dir[i] = Map.EWSN.NONE; } for(int i = 0;i < (int)Map.EWSN.NUM;i++) { DoorControl door = room.getDoor((Map.EWSN)i); if(door == null) { continue; } int key_type = door.KeyType; if(key_type >= 4) { continue; } key_dir[key_type] = (Map.EWSN)i; } Vector2 base_pos = BASE_POS; Vector2 pos; base_pos.x += KEY_ICON_SIZE.x; base_pos.y += KEY_ICON_SIZE.y; for(int i = 0;i < 4;i++) { pos = base_pos - WINDOW_SIZE/2.0f; this.sprite_key[i].setVisible(true); // 도어가 없을 때는 비표시로. if(key_dir[i] == Map.EWSN.NONE) { this.sprite_key[i].setVisible(false); continue; } // 언락되지 않음 = 열쇠를 아직 줍지 않았으면 비표시. DoorControl door = room.getDoor(key_dir[i]); if(!door.IsUnlocked()) { this.sprite_key[i].setVisible(false); } // float offset = KEY_ICON_SIZE.x*0.6f; switch(key_dir[i]) { case Map.EWSN.NORTH: pos += new Vector2(0.0f, offset); break; case Map.EWSN.SOUTH: pos += new Vector2(0.0f, -offset); break; case Map.EWSN.EAST: pos += new Vector2( offset, 0.0f); break; case Map.EWSN.WEST: pos += new Vector2(-offset, 0.0f); break; } this.sprite_key[i].setPosition(pos); } } }
// ================================================================ // // 룸 이동 후에 호출되고 싶다. public void onRoomChanged(RoomController room) { // 열쇠 아이콘을 대응하는 도어 방향으로 표시한다. if (room != null) { Map.EWSN[] key_dir = new Map.EWSN[4]; for (int i = 0; i < 4; i++) { key_dir[i] = Map.EWSN.NONE; } for (int i = 0; i < (int)Map.EWSN.NUM; i++) { DoorControl door = room.getDoor((Map.EWSN)i); if (door == null) { continue; } int key_type = door.KeyType; if (key_type >= 4) { continue; } key_dir[key_type] = (Map.EWSN)i; } Vector2 base_pos = BASE_POS; Vector2 pos; base_pos.x += KEY_ICON_SIZE.x; base_pos.y += KEY_ICON_SIZE.y; for (int i = 0; i < 4; i++) { pos = base_pos - WINDOW_SIZE / 2.0f; this.sprite_key[i].setVisible(true); // 도어가 없을 때는 비표시로. if (key_dir[i] == Map.EWSN.NONE) { this.sprite_key[i].setVisible(false); continue; } // 언락되지 않음 = 열쇠를 아직 줍지 않았으면 비표시. DoorControl door = room.getDoor(key_dir[i]); if (!door.IsUnlocked()) { this.sprite_key[i].setVisible(false); } // float offset = KEY_ICON_SIZE.x * 0.6f; switch (key_dir[i]) { case Map.EWSN.NORTH: pos += new Vector2(0.0f, offset); break; case Map.EWSN.SOUTH: pos += new Vector2(0.0f, -offset); break; case Map.EWSN.EAST: pos += new Vector2(offset, 0.0f); break; case Map.EWSN.WEST: pos += new Vector2(-offset, 0.0f); break; } this.sprite_key[i].setPosition(pos); } } }