public void RevealMap() { foreach (UIMiniMapRoom minimapRoom in rooms) { if (true == minimapRoom.data.visit) { continue; } RevealRoom(minimapRoom); if (Room.Type.Exit == minimapRoom.data.type || Room.Type.Lock == minimapRoom.data.type) { minimapRoom.room.sprite = stair_mini_icon; } for (int i = 0; i < Room.DirectionMax; i++) { minimapRoom.next[i].gameObject.SetActive(false); Room.Data nextRoomData = minimapRoom.data.GetNext(i); if (null != nextRoomData) { minimapRoom.next[i].gameObject.SetActive(true); } } } }
private Sprite GetRoomSprite(UIMiniMapRoom minimapRoom) { Room.Data room = minimapRoom.data; if (true == room.visit) { if (Room.Type.Exit == room.type || Room.Type.Lock == room.type) { return(stair_mini_icon); } else if (null != room.monster) { return(monster_mini_icon); } else if (null != room.item) { return(treasure_mini_icon); } else if ("" != room.npc_sprite_path) { return(npc_mini_icon); } } else if (true == minimapRoom.gameObject.activeSelf) { return(minimapRoom.room.sprite); } return(this.room_mini_icon); }
public void Show(Room.Data room) { this.room = room; close.color = new Color(1.0f, 1.0f, 1.0f, 1.0f); open.color = new Color(1.0f, 1.0f, 1.0f, 0.0f); lock_icon.gameObject.SetActive(true); gameObject.SetActive(true); }
public void Init(Room.Data roomData) { data = roomData; for (int direction = 0; direction < Room.DirectionMax; direction++) { next[direction].gameObject.SetActive(false); } gameObject.SetActive(false); }
public Room.Data Move(int direction) { if (null == current_room.nexts[direction]) { return(null); } current_room = current_room.nexts[direction]; current_room.visit = true; return(current_room); }
private void ChangeGroupID(int from, int to) { for (int i = 0; i < WIDTH * HEIGHT; i++) { Room.Data room = rooms[i]; if (from == room.group) { room.group = to; } } }
public void InitRooms() { transform.position = Vector3.zero; current_room.Init(data.current_room); for (int i = 0; i < Room.DirectionMax; i++) { Room.Data room = data.current_room.nexts[i]; next_rooms[i].Init(room); } south_door_arrow.gameObject.SetActive(false); if (null != data.current_room.nexts[Room.South]) { south_door_arrow.gameObject.SetActive(true); } }
public void Show(Room.Data room) { this.room = room; if (Room.Type.Lock == room.type) { close.color = new Color(1.0f, 1.0f, 1.0f, 1.0f); open.color = new Color(1.0f, 1.0f, 1.0f, 0.0f); lock_icon.gameObject.SetActive(true); } else if (Room.Type.Exit == room.type) { close.color = new Color(1.0f, 1.0f, 1.0f, 0.0f); open.color = new Color(1.0f, 1.0f, 1.0f, 1.0f); lock_icon.gameObject.SetActive(false); } //touch_collider.enabled = true; gameObject.SetActive(true); }
public void CurrentPosition(int id) { UIMiniMapRoom minimapRoom = rooms[id]; for (int direction = 0; direction < Room.DirectionMax; direction++) { Room.Data nextRoom = minimapRoom.data.GetNext(direction); if (null == nextRoom) { continue; } RevealRoom(rooms[nextRoom.id]); } RevealRoom(minimapRoom); minimapRoom.color = CURRENT_ROOM_COLOR; }
private List <Room.Data> GetOuterRoomsInGroup(int group) { List <Room.Data> outerRooms = new List <Room.Data>(); foreach (Room.Data room in rooms) { if (group == room.group) { for (int direction = 0; direction < Room.DirectionMax; direction++) { Room.Data other = GetNextRoom(room.id, direction); if (null != other && group != other.group) { outerRooms.Add(room); break; } } } } return(outerRooms); }
/* * public IEnumerator Hide(float time, float alpha = 0.0f) * { * float delta = 1.0f; * while (alpha < delta) * { * foreach (UIMiniMapRoom minimapRoom in rooms) * { * Color color = minimapRoom.color; * color.a *= delta; * minimapRoom.color = color; * } * delta = delta - Time.deltaTime/time; * yield return null; * } * * foreach (UIMiniMapRoom minimapRoom in rooms) * { * Color color = minimapRoom.color; * color.a = alpha; * minimapRoom.color = color; * } * } * * public IEnumerator Show(float time) * { * float alpha = 0.0f; * while (1.0f > alpha) * { * foreach (UIMiniMapRoom minimapRoom in rooms) * { * Color color = minimapRoom.color; * color.a = Mathf.Max(color.a, alpha); * minimapRoom.color = color; * } * alpha += Time.deltaTime / time; * yield return null; * } * } */ private void RevealRoom(UIMiniMapRoom minimapRoom) { minimapRoom.gameObject.SetActive(true); minimapRoom.room.sprite = GetRoomSprite(minimapRoom); minimapRoom.color = REVEAL_ROOM_COLOR; if (true == minimapRoom.data.visit) { minimapRoom.color = VISIT_ROOM_COLOR; for (int i = 0; i < Room.DirectionMax; i++) { minimapRoom.next[i].gameObject.SetActive(false); Room.Data nextRoomData = minimapRoom.data.GetNext(i); if (null != nextRoomData) { minimapRoom.next[i].gameObject.SetActive(true); rooms[nextRoomData.id].next[(i + 2) % 4].gameObject.SetActive(false); } } } }
public IEnumerator Move(int direction) { Room.Data nextRoom = dungeon.data.current_room.GetNext(direction); if (null == nextRoom) { switch (direction) { case Room.North: iTween.PunchPosition(Camera.main.gameObject, new Vector3(0.0f, 0.0f, 1.0f), 0.5f); break; case Room.East: iTween.PunchPosition(Camera.main.gameObject, new Vector3(1.0f, 0.0f, 0.0f), 0.5f); break; case Room.South: iTween.PunchPosition(Camera.main.gameObject, new Vector3(0.0f, 0.0f, -1.0f), 0.5f); break; case Room.West: iTween.PunchPosition(Camera.main.gameObject, new Vector3(-1.0f, 0.0f, 0.5f), 0.5f); break; default: break; } transform.position = Vector3.zero; yield break; } GameManager.Instance.player.move_count++; Vector3 position = Vector3.zero; float distance = 0.0f; switch (direction) { case Room.North: distance = Dungeon.ROOM_SIZE + transform.position.z; position = new Vector3(transform.position.x, transform.position.y, /*transform.position.z*/ -Dungeon.ROOM_SIZE); break; case Room.East: distance = Dungeon.ROOM_SIZE + transform.position.x; position = new Vector3(/*transform.position.x */ -Dungeon.ROOM_SIZE, transform.position.y, transform.position.z); break; case Room.South: distance = Dungeon.ROOM_SIZE - transform.position.z; position = new Vector3(transform.position.x, transform.position.y, /*transform.position.z + */ Dungeon.ROOM_SIZE); break; case Room.West: distance = Dungeon.ROOM_SIZE - transform.position.x; position = new Vector3(/*transform.position.x + */ Dungeon.ROOM_SIZE, transform.position.y, transform.position.z); break; default: break; } dungeon.data.Move(direction); AudioManager.Instance.Play(AudioManager.DUNGEON_WALK, true); move_complete = false; iTween.MoveTo(gameObject, iTween.Hash("position", position, "time", distance / Dungeon.ROOM_MOVE_SPEED, "easetype", iTween.EaseType.linear, "oncompletetarget", gameObject, "oncomplete", "OnMoveComplete")); while (false == move_complete) { yield return(null); } AudioManager.Instance.Stop(AudioManager.DUNGEON_WALK); dungeon.InitRooms(); Util.EventSystem.Publish <int>(EventID.Dungeon_Move, direction); }
// Use this for initialization public void Init(int dungeonLevel) { level = dungeonLevel; max_level = GetMaxDungeonLevel(); for (int i = 0; i < WIDTH * HEIGHT; i++) { Room.Data room = new Room.Data(); room.id = i; room.group = i; rooms[i] = room; } int group = 0; while (true) { List <Room.Data> outerRooms = GetOuterRoomsInGroup(group); if (0 < outerRooms.Count) { Room.Data room = outerRooms[Random.Range(0, outerRooms.Count)]; int directionCount = Random.Range(0, 3); for (int i = 0; i < directionCount; i++) { int direction = Random.Range(0, Room.DirectionMax); for (int j = 0; j < Room.DirectionMax; j++) { Room.Data other = GetNextRoom(room.id, direction); if (null == other) { direction = (direction + 1) % Room.DirectionMax; continue; } room.nexts[direction] = other; switch (direction) { case Room.North: other.nexts[Room.South] = room; break; case Room.East: other.nexts[Room.West] = room; break; case Room.South: other.nexts[Room.North] = room; break; case Room.West: other.nexts[Room.East] = room; break; } if (other.group != room.group) { if (room.group < other.group) { ChangeGroupID(other.group, room.group); } else { ChangeGroupID(room.group, other.group); } break; } direction = (direction + 1) % Room.DirectionMax; } } } int roomCountInGroupZero = 0; foreach (Room.Data room in rooms) { if (0 == room.group) { roomCountInGroupZero++; } } if (roomCountInGroupZero == WIDTH * HEIGHT) { break; } group = (group + 1) % (WIDTH * HEIGHT); } List <Room.Data> candidates = new List <Room.Data>(rooms); int start = Random.Range(0, candidates.Count); rooms[start].type = Room.Type.Start; current_room = rooms[start]; current_room.visit = true; candidates.RemoveAt(start); Util.Sqlite.DataReader reader = Database.Execute(Database.Type.MetaData, "SELECT monster_id, monster_count, reward_item_chance, reward_item_id FROM meta_dungeon_monster WHERE dungeon_level=" + Mathf.Max(1, dungeonLevel % (max_level + 1)) ); while (true == reader.Read()) { int monsterCount = reader.GetInt32("monster_count"); for (int i = 0; i < monsterCount; i++) { if (0 == candidates.Count) { break; } int index = Random.Range(0, candidates.Count); Room.Data room = candidates[index]; room.monster = MonsterManager.Instance.FindMeta(reader.GetString("monster_id")); room.monster.reward_item_chance = reader.GetFloat("reward_item_chance"); room.monster.reward.item_id = reader.GetString("reward_item_id"); candidates.RemoveAt(index); } } int itemBoxCount = Random.Range(0, 5); for (int i = 0; i < itemBoxCount; i++) { if (0 == candidates.Count) { break; } int index = Random.Range(0, candidates.Count); Room.Data room = candidates[index]; room.item = ItemManager.Instance.GetRandomExpendableItemMeta(); candidates.RemoveAt(index); } { int index = Random.Range(0, candidates.Count); Room.Data room = candidates[index]; room.type = Room.Type.Shop; } bool exitLock = false; bool keyItem = false; foreach (Room.Data room in rooms) { if (null == room.item) { continue; } if (room.item.id == "ITEM_KEY") { exitLock = true; keyItem = true; break; } } if (false == exitLock) { exitLock = 30 > Random.Range(0, 100); } if (true == exitLock && false == keyItem) { int index = Random.Range(0, candidates.Count); candidates[index].item = ItemManager.Instance.FindMeta <KeyItem.Meta>("ITEM_KEY"); candidates.RemoveAt(index); } candidates.RemoveAll(room => room.id == current_room.id + WIDTH); candidates.RemoveAll(room => room.id == current_room.id + 1); candidates.RemoveAll(room => room.id == current_room.id - 1); candidates.RemoveAll(room => room.id == current_room.id - WIDTH); int end = Random.Range(0, candidates.Count); Room.Data exit = candidates[end]; exit.type = Room.Type.Exit; if (true == exitLock) { exit.type = Room.Type.Lock; } candidates.RemoveAt(end); }