Пример #1
0
    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);
                }
            }
        }
    }
Пример #2
0
    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);
    }
Пример #3
0
 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);
 }
Пример #4
0
 public void Init(Room.Data roomData)
 {
     data = roomData;
     for (int direction = 0; direction < Room.DirectionMax; direction++)
     {
         next[direction].gameObject.SetActive(false);
     }
     gameObject.SetActive(false);
 }
Пример #5
0
 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);
 }
Пример #6
0
 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;
         }
     }
 }
Пример #7
0
    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);
        }
    }
Пример #8
0
 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);
 }
Пример #9
0
    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;
    }
Пример #10
0
        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);
        }
Пример #11
0
    /*
     *      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);
                }
            }
        }
    }
Пример #12
0
    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);
    }
Пример #13
0
        // 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);
        }