Пример #1
0
 private void ShuffleDoor(Room room)
 {
     for (int i = 0; i < room.doorList.Count; i++)
     {
         OffTile_Door var    = room.doorList[i];
         int          ranNum = Random.Range(i, room.doorList.Count);
         room.doorList[i]      = room.doorList[ranNum];
         room.doorList[ranNum] = var;
     }
 }
Пример #2
0
    private OffTile_Door FindRightDoor(OffTile_Door room1Door, Room room2)
    {
        Direction opposite = (Direction)(((int)room1Door.Dir + 2) % 4);

        for (int j = 0; j < room2.doorList.Count; j++)
        {
            if (room2.doorList[j].Dir == opposite && room2.doorList[j].TargetRoom == null)
            {
                return(room2.doorList[j]);
            }
        }
        return(null);
    }
Пример #3
0
    //문을 통해서 이동
    public void EnterRoom(OffTile_Door door)
    {
        if (currentRoom != null)
        {
            if (currentRoom.roomType == RoomType.START && GameManager.instance.CurrentMap.SaveTile != null)
            {
                GameManager.instance.CurrentMap.SaveTile.DestroyThis();
            }
        }


        Vector2Int temp;

        if (currentRoom != null)
        {
            currentTile.OnTileObj = null;
        }
        //Spawn Position Set
        if (door.Dir == Direction.NORTH)
        {
            temp = door.ConnectedDoor.CurrentTile.pos + new Vector2Int(0, 1);
        }
        else if (door.Dir == Direction.EAST)
        {
            temp = door.ConnectedDoor.CurrentTile.pos + new Vector2Int(1, 0);
        }
        else if (door.Dir == Direction.WEST)
        {
            temp = door.ConnectedDoor.CurrentTile.pos + new Vector2Int(-1, 0);
        }
        else//_room == currentRoom.SouthRoom
        {
            temp = door.ConnectedDoor.CurrentTile.pos + new Vector2Int(0, -1);
        }

        SetRoom(door.TargetRoom, temp);

        GameManager.instance.OnPlayerEnterRoom(currentRoom);
    }
Пример #4
0
    private bool ConnectRoom(Room room1, Room room2)
    {
        ShuffleDoor(room1);
        ShuffleDoor(room2);

        OffTile_Door room1Door = null;
        OffTile_Door room2Door = null;
        bool         success   = false;

        if (room2.RoomName.Contains("end") && room1.Distance < 3) //끝방 조건(시작방으로부터 일정거리 떨어져야 만들어짐!!!)
        {
            return(false);
        }

        for (int i = 0; i < room1.doorList.Count; i++)
        {
            if (room1.doorList[i].TargetRoom == null)
            {
                room1Door = room1.doorList[i];
                room2Door = FindRightDoor(room1Door, room2);
                if (room2Door == null)
                {
                    continue;
                }
                else
                {
                    ///방배치 시작
                    Vector3 offset = room2.transform.position - room2Door.transform.position;
                    switch (room1Door.Dir)
                    {
                    case Direction.NORTH:
                        room2.transform.position =
                            new Vector3(room1Door.transform.position.x + offset.x
                                        , room1.transform.position.y + room1.size.y + space);
                        break;

                    case Direction.EAST:
                        room2.transform.position =
                            new Vector3(room1.transform.position.x + room1.size.x + space
                                        , room1Door.transform.position.y + offset.y);
                        break;

                    case Direction.SOUTH:
                        room2.transform.position =
                            new Vector3(room1Door.transform.position.x + offset.x
                                        , room1.transform.position.y - room2.size.y - space);
                        break;

                    case Direction.WEST:
                        room2.transform.position =
                            new Vector3(room1.transform.position.x - room2.size.x - space
                                        , room1Door.transform.position.y + offset.y);
                        break;
                    }
                    if (IsOverlapped(room2))
                    {
                        room2.transform.position = new Vector3(-9999, -9999);
                        continue;
                    }
                    else
                    {
                        room1Door.TargetRoom    = room2;
                        room1Door.ConnectedDoor = room2Door;
                        room2Door.TargetRoom    = room1;
                        room2Door.ConnectedDoor = room1Door;
                        room2.Distance          = room1.Distance + 1;
                        success = true;
                        break;
                    }
                }
            }
        }

        return(success);
    }