Exemple #1
0
        public MapScreen(int viewportWidth, int viewportHeight)
        {
            // TODO: Improve this, I would like to not be limited by map size.
            const int panelStatsWidth = 20;
            const int panelLogsHeight = 10;

            int mapWidth  = viewportWidth - panelStatsWidth;
            int mapHeight = viewportHeight - panelLogsHeight;


            // Add stats panel
            StatsPanel          = new StatsPanel(panelStatsWidth, viewportHeight);
            StatsPanel.Position = new Microsoft.Xna.Framework.Point(mapWidth, 0);
            Children.Add(StatsPanel);

            // Add logs panel
            LogsPanel          = new LogsPanel(mapWidth, panelLogsHeight);
            LogsPanel.Position = new Microsoft.Xna.Framework.Point(0, mapHeight);
            Children.Add(LogsPanel);

            Map = DungeonBuilder.GenerateDungeon(mapWidth, mapHeight);

            // Get a console that's set up to render the map,
            // and add it as a child of this container so it renders
            MapRenderer = Map.CreateRenderer(0, 0, mapWidth, mapHeight);
            Children.Add(MapRenderer);

            // Set player to receive input, since in this example the player handles movement
            Map.ControlledGameObject.IsFocused = true;

            // Set up to recalculate FOV and set camera position appropriately when the player moves.
            // Also make sure we hook the new Player if that object is reassigned.
            Map.ControlledGameObject.Moved  += Player_Moved;
            Map.ControlledGameObjectChanged += ControlledGameObjectChanged;

            // Calculate initial FOV and center camera
            Map.CalculateFOV(Map.ControlledGameObject.Position, Map.ControlledGameObject.FOVRadius, Radius.SQUARE);
            MapRenderer.CenterViewPortOnPoint(Map.ControlledGameObject.Position);
        }
Exemple #2
0
    private void GenerateDungeon()
    {
        DungeonBuilder.DungeonBuilderOutput generatedRooms = builder.GenerateDungeon(levelNumber);

        rooms.Clear();

        for (int i = 0; i < generatedRooms.rooms.Length; i++)
        {
            GameObject room = generatedRooms.rooms[i];
            if (room != null)
            {
                if (i != generatedRooms.entranceIndex)
                {
                    room.SetActive(false);
                }

                // Need to get the room event when a player touch it.
                // for teleporting to the next room.
                foreach (Transform child in room.transform)
                {
                    Door door = child.GetComponent <Door>();
                    if (door != null)
                    {
                        door.OnEnterDoor += OnEnterDoor;
                    }
                }

                rooms.Add(room);
            }
            else
            {
                // We add null to simulate empty room. That way we can easily
                // find where the adjacent rooms are by looking at the index.
                rooms.Add(null);
            }
        }
        currentIndex = generatedRooms.entranceIndex;
    }