Пример #1
0
    private void Transform(GameObject gameObject, int x, int y)
    {
        TileScript2D tile = gameObject.GetComponent <TileScript2D>();

        switch (tile.GetTileType())
        {
        case TileScript2D.TileType.NONE:
            //this.GetComponent<Renderer>().material.color = Color.black;
            break;

        case TileScript2D.TileType.FLOOR:
            CreateTile(gameObject.transform.position);
            break;

        case TileScript2D.TileType.WALL:
            CreateTile(gameObject.transform.position);
            CreateWall(gameObject, x, y);
            break;

        case TileScript2D.TileType.DOOR_CLOSED:
            CreateDoor(gameObject, x, y);
            break;

        case TileScript2D.TileType.DOOR_OPEN:
            CreateTile(gameObject.transform.position);
            CreateDoor(gameObject, x, y);
            break;
        }
    }
Пример #2
0
    private Room CreateRoom(Area area)
    {
        int actualMaxOffsetX = Math.Min(MAX_OFFSET, (area.GetSizeX() - MIN_ROOM_SIZE) / 2);
        int actualMaxOffsetY = Math.Min(MAX_OFFSET, (area.GetSizeY() - MIN_ROOM_SIZE) / 2);
        int offsetX          = MIN_OFFSET + random.Next(Math.Min(area.GetSizeX() - actualMaxOffsetX, actualMaxOffsetX));
        int offsetY          = MIN_OFFSET + random.Next(Math.Min(area.GetSizeY() - actualMaxOffsetY, actualMaxOffsetY));
        int offsetXEnd       = MIN_OFFSET + random.Next(Math.Min(area.GetSizeX() - (actualMaxOffsetX + offsetX), actualMaxOffsetX));
        int offsetYEnd       = MIN_OFFSET + random.Next(Math.Min(area.GetSizeY() - (actualMaxOffsetY + offsetX), actualMaxOffsetY));

        Room room = new Room(area.GetX() + offsetX, area.GetY() + offsetY, area.GetSizeX() - offsetX - offsetXEnd, area.GetSizeY() - offsetY - offsetYEnd, tilesMap);

        area.SetRoom(room);
        for (int x = room.GetX(); x < room.GetX() + room.GetSizeX(); x++)
        {
            for (int y = room.GetY(); y < room.GetY() + room.GetSizeY(); y++)
            {
                TileScript2D tileScript = tilesMap[x, y].GetComponent <TileScript2D>();
                if (IsOnRoomsEdge(x, y, room))
                {
                    tileScript.SetTileType(TileScript2D.TileType.WALL);
                }
                else
                {
                    tileScript.SetTileType(TileScript2D.TileType.FLOOR);
                }
            }
        }
        return(room);
    }
Пример #3
0
    private void CreateStartingPoints()
    {
        Object obj = Resources.Load("PlayerStartingPoint");
        int    x   = (int)startingRoom.GetMedianPoint().x;
        int    y   = (int)startingRoom.GetMedianPoint().z;

        TileScript2D up    = DungeonGenerationUtils.GetUpTile(x, y, tilesMap);
        TileScript2D down  = DungeonGenerationUtils.GetDownTile(x, y, tilesMap);
        TileScript2D left  = DungeonGenerationUtils.GetLeftTile(x, y, tilesMap);
        TileScript2D right = DungeonGenerationUtils.GetRightTile(x, y, tilesMap);

        GameObject go = (GameObject)Utils.MyInstantiate(obj);

        go.transform.position = up.transform.position + new Vector3(0, 1f, 0);
        go.transform.SetParent(map.transform, false);

        go = (GameObject)Utils.MyInstantiate(obj);
        go.transform.position = down.transform.position + new Vector3(0, 1f, 0);
        go.transform.SetParent(map.transform, false);

        go = (GameObject)Utils.MyInstantiate(obj);
        go.transform.position = left.transform.position + new Vector3(0, 1f, 0);
        go.transform.SetParent(map.transform, false);

        go = (GameObject)Utils.MyInstantiate(obj);
        go.transform.position = right.transform.position + new Vector3(0, 1f, 0);
        go.transform.SetParent(map.transform, false);
    }
Пример #4
0
    private void CreateArrivalPoint()
    {
        Object       obj  = Resources.Load("chest_open");
        int          x    = (int)arrivalRoom.GetMedianPoint().x;
        int          y    = (int)arrivalRoom.GetMedianPoint().z;
        TileScript2D tile = tilesMap[x, y].GetComponent <TileScript2D>();

        GameObject go = (GameObject)Utils.MyInstantiate(obj);

        go.transform.position = tile.transform.position + new Vector3(0, .5f, 0);
        go.transform.SetParent(map.transform, false);
    }
Пример #5
0
    private void CreateWall(GameObject gameObject, int x, int y)
    {
        TileScript2D up    = DungeonGenerationUtils.GetUpTile(x, y, tilesMap);
        TileScript2D down  = DungeonGenerationUtils.GetDownTile(x, y, tilesMap);
        TileScript2D left  = DungeonGenerationUtils.GetLeftTile(x, y, tilesMap);
        TileScript2D right = DungeonGenerationUtils.GetRightTile(x, y, tilesMap);

        UnityEngine.Object obj = null;
        float degrees          = 0;

        if (IsNullOrFloor(up) && IsNullOrFloor(down))
        {
            obj = Resources.Load("WallCubeH");
        }
        if (IsNullOrFloor(right) && IsNullOrFloor(left))
        {
            obj     = Resources.Load("WallCubeH");
            degrees = 90;
        }
        if (IsWall(up) && IsWall(left))
        {
            obj     = Resources.Load("WallAngle");
            degrees = 270;
        }

        if (IsWall(up) && IsWall(right))
        {
            obj     = Resources.Load("WallAngle");
            degrees = 180;
        }

        if (IsWall(down) && IsWall(left))
        {
            obj     = Resources.Load("WallAngle");
            degrees = 0;
        }

        if (IsWall(down) && IsWall(right))
        {
            obj     = Resources.Load("WallAngle");
            degrees = 90;
        }


        if (obj != null)
        {
            GameObject go = (GameObject)Utils.MyInstantiate(obj);
            go.transform.position = gameObject.transform.position + new Vector3(0, 1.5f, 0);
            go.transform.Rotate(Vector3.up, degrees);
            go.transform.SetParent(map.transform, false);
        }
    }
Пример #6
0
    private void CreateDoor(GameObject gameObject, int x, int y)
    {
        TileScript2D up      = DungeonGenerationUtils.GetUpTile(x, y, tilesMap);
        TileScript2D down    = DungeonGenerationUtils.GetDownTile(x, y, tilesMap);
        float        degrees = 90;

        UnityEngine.Object obj = Resources.Load("Door");
        if (IsWall(up) && IsWall(down))
        {
            degrees = 0;
        }

        GameObject go = (GameObject)Utils.MyInstantiate(obj);

        go.transform.position = gameObject.transform.position + new Vector3(0, 1.5f, 0);
        go.transform.Rotate(Vector3.up, degrees);
        go.transform.SetParent(map.transform, false);
        if (lockedDoors.ContainsKey(gameObject))
        {
            LockDoorAndCreateKey(go, gameObject);
        }
    }
Пример #7
0
 private static bool IsNullOrFloor(TileScript2D tile)
 {
     return(tile == null || tile.GetTileType() == TileScript2D.TileType.FLOOR || tile.GetTileType() == TileScript2D.TileType.NONE || tile.GetTileType() == TileScript2D.TileType.DOOR_CLOSED || tile.GetTileType() == TileScript2D.TileType.DOOR_OPEN);
 }
Пример #8
0
 private static bool IsWall(TileScript2D tile)
 {
     return(tile != null && tile.GetTileType() == TileScript2D.TileType.WALL);
 }