예제 #1
0
        public void SetDoors(MapTilemaps tilemaps, int x, int y, Vector3Int center, RoomSizeInfo roomSizeInfo,
                             RoomType[,] mapRoomMatrix)
        {
            if (x > 0 && mapRoomMatrix[x - 1, y] != RoomType.None)
            {
                SetDoor(tilemaps, x - 1, y, x, y,
                        center - new Vector3Int(roomSizeInfo.roomWidth / 2, 0, 0), DoorController.DoorType.Horizontal);
            }

            if (x < _map.Width - 1 && mapRoomMatrix[x + 1, y] != RoomType.None)
            {
                SetDoor(tilemaps, x, y, x + 1, y,
                        center + new Vector3Int(roomSizeInfo.roomWidth / 2, 0, 0), DoorController.DoorType.Horizontal);
            }

            if (y > 0 && mapRoomMatrix[x, y - 1] != RoomType.None)
            {
                SetDoor(tilemaps, x, y - 1, x, y,
                        center - new Vector3Int(0, roomSizeInfo.roomHeight / 2, 0), DoorController.DoorType.Vertical);
            }

            if (y < _map.Height - 1 && mapRoomMatrix[x, y + 1] != RoomType.None)
            {
                SetDoor(tilemaps, x, y, x, y + 1,
                        center + new Vector3Int(0, roomSizeInfo.roomHeight / 2, 0), DoorController.DoorType.Vertical);
            }
        }
예제 #2
0
        private void SetDoor(MapTilemaps tilemaps,
                             int x1, int y1, int x2, int y2, Vector3Int pos, DoorController.DoorType type)
        {
            tilemaps.WallTilemap.SetTile(pos, null);
            tilemaps.ShadowTilemap.SetTile(pos, null);

            PlaceDoor(tilemaps, type, pos, x1, y1, x2, y2);
        }
예제 #3
0
        public Vector3Int GetPathToNextDoor(RoomEntity from, RoomEntity to, MapTilemaps mapTilemaps, DoorDir dir)
        {
            var nextDoorPos = GetNextDoorPos(from, to, mapTilemaps, dir, out var length);

            PlaceCorridor(nextDoorPos, length, mapTilemaps, dir);

            return(Vector3Int.zero);
        }
예제 #4
0
        private void PlaceCorridor(Vector3Int from, int length, MapTilemaps mapTilemaps
                                   , DoorDir dir)
        {
            var moveDir = dir.GetMoveDir();
            var pos     = from;

            for (var i = 0; i < length; i++)
            {
                pos += moveDir;
                PlaceBlock(pos, moveDir, mapTilemaps);
            }
        }
예제 #5
0
        private void PlaceDoor(MapTilemaps tilemaps, DoorController.DoorType doorType, Vector3Int pos,
                               int x1, int y1, int x2, int y2)
        {
            if (HasDoor(x1, y1, x2, y2))
            {
                return;
            }

            //tilemaps.FloorTilemap.SetTile(pos, _mapSettingsData.GetDoorTile());

//            var doorGo = new GameObject($"HorizontalDoor[{GetDoorID(x1, y1, x2, y2)}]");
//            doorGo.transform.SetParent(_mapHolder);
//            doorGo.transform.localPosition = pos + Vector3.one * 0.5f;
//            var door = doorGo.AddComponent<DoorController>();
//            var doorTrigger = doorGo.AddComponent<BoxCollider2D>();
//            doorTrigger.isTrigger = true;

            //var doorGO = tilemaps.FloorTilemap.GetInstantiatedObject(pos);
            var doorGO = Object.Instantiate(tilemaps.DoorPrefab, _mapHolder);

            doorGO.name = $"HorizontalDoor[{GetDoorID(x1, y1, x2, y2)}]";
            doorGO.transform.localPosition = pos;

            if (doorGO == null)
            {
                Debug.Log(pos + " = DOOR GO IS NULL");
                return;
            }

            var door = doorGO.GetComponent <DoorController>();

            if (door == null)
            {
                Debug.Log("DOOR CONTROLLER IS NULL");
                return;
            }

            var firstRoomController  = _roomControllersMatrix[x1, y1];
            var secondRoomController = _roomControllersMatrix[x2, y2];

            door.Initialize(doorType, firstRoomController, secondRoomController);
            door.Toggle(true);

            firstRoomController.FloorTiles.Add(pos);
            secondRoomController.FloorTiles.Add(pos);

            _doorsIDs.Add(GetDoorID(x1, y1, x2, y2), true);
        }
예제 #6
0
 public override void _Ready()
 {
     Tilemaps = new MapTilemaps()
     {
         Environment = GetNode <TileMap>("EnvironmentMap"),
         Highlights  = GetNode <TileMap>("HighlightMap")
     };
     Tilesets = new MapTilesets()
     {
         Environment = Tilemaps.Environment.TileSet,
         Highlights  = Tilemaps.Highlights.TileSet
     };
     Board            = new GameBoard(this);
     PathFinder       = new PathFinder();
     debugLabel       = GetNode <Label>("Debug/DebugText");
     Global.ActiveMap = this; // TODO decouple this
     AddChild(PathFinder);
 }
예제 #7
0
        private Vector3Int GetNextDoorPos(RoomEntity from, RoomEntity to, MapTilemaps mapTilemaps, DoorDir dir
                                          , out int length)
        {
            length = MIN_LENGTH;
            var fromDoor = SelectDoor(dir, from);
            var moveDir  = dir.GetMoveDir();
            var offset   = moveDir * MIN_LENGTH;
            var pos      = fromDoor + offset;

            var roomPos = fromDoor;

            while (DoCornersHasTile(pos, from.Template.width, from.Template.height, mapTilemaps.TypeTilemap))
            {
                pos += moveDir;
                length++;
            }

            return(pos);
        }
예제 #8
0
 private void PlaceVerticalBlock(Vector3Int pos, MapTilemaps mapTilemaps)
 {
     mapTilemaps[TileType.Floor].SetTile(pos, mapSettingsData.GetTile(TileType.Floor));
     mapTilemaps[TileType.Wall].SetTile(pos + Vector3Int.left, mapSettingsData.GetTile(TileType.Wall));
     mapTilemaps[TileType.Wall].SetTile(pos + Vector3Int.right, mapSettingsData.GetTile(TileType.Wall));
 }
예제 #9
0
 private void PlaceHorizontalBlock(Vector3Int pos, MapTilemaps mapTilemaps)
 {
     mapTilemaps[TileType.Floor].SetTile(pos, mapSettingsData.GetTile(TileType.Floor));
     mapTilemaps[TileType.Wall].SetTile(pos + Vector3Int.down, mapSettingsData.GetTile(TileType.Wall));
     mapTilemaps[TileType.Wall].SetTile(pos + Vector3Int.up, mapSettingsData.GetTile(TileType.Wall));
 }
예제 #10
0
 private void PlaceBlock(Vector3Int pos, Vector3Int moveDir, MapTilemaps mapTilemaps)
 {
     mapTilemaps[TileType.Floor].SetTile(pos, mapSettingsData.GetTile(TileType.Floor));
     mapTilemaps[TileType.Wall].SetTile(pos + new Vector3Int(moveDir.y, moveDir.x, moveDir.z), mapSettingsData.GetTile(TileType.Wall));
     mapTilemaps[TileType.Wall].SetTile(pos - new Vector3Int(moveDir.y, moveDir.x, moveDir.z), mapSettingsData.GetTile(TileType.Wall));
 }