Exemplo n.º 1
0
        private void DisplayHud()
        {
            hudDisplay.Clear();
            hudDisplay.Draw($"Alert level: {gameState.AlertLevel}/5", (1, 1));
            if (gameState.AlertLevel >= 5)
            {
                hudDisplay.Draw("You have caused an alarm and failed!", (1, 2), RogueColor.Red);
            }

            hudDisplay.Draw($"Inventory: {(inputHandler.State == InputState.UseFromInventory ? "(press number to use an item or Esc to cancel)" : "(press 'i' to enter inventory use mode)")}", (1, 4));
            for (var i = 0; i < 6; i++)
            {
                if (gameState.Player.Inventory.Count > i)
                {
                    var currentItem = gameState.Player.Inventory[i];
                    if (currentItem.UsesLeft != null)
                    {
                        hudDisplay.Draw($"{i + 1} - {currentItem.Template.Name}, uses left: {currentItem.UsesLeft}", (1, 5 + i));
                    }
                    else
                    {
                        hudDisplay.Draw($"{i + 1} - {currentItem.Template.Name}", (1, 5 + i));
                    }
                }
            }
        }
Exemplo n.º 2
0
        public void Run()
        {
            while (window.IsOpen)
            {
                window.DispatchEvents();

                window.Clear();

                ProcessTurn();

                mainDisplay.Clear();

                // GetViewport with the same request size
                // as the size of the map will always return full map
                // so we can pass anything we want as the center
                var fovFactory     = new BevelledWallShadowcasting(gameState.CurrentMap.TransparencyGrid);
                var visibilityGrid = fovFactory.Compute(gameState.Player.Position, 8, VisibilityAngle.HalfCircle, gameState.Player.Direction);
                gameState.PlayerVisibilityGrid = visibilityGrid;

                var guardsVisibility = new GameGrid <bool>(gameState.CurrentMap.Size);

                foreach (var actor in gameState.CurrentMap.Actors)
                {
                    if (actor.Role == ActorRole.Guard)
                    {
                        guardsVisibility = fovFactory.Compute(actor.Position, 6, VisibilityAngle.QuarterCircle, actor.Direction, guardsVisibility);
                    }
                }

                AlertLevelChecks(guardsVisibility);

                var viewport = gameState.CurrentMap.GetMaskedViewportWithViewcones(mainDisplay.Size, gameState.Player.Position, visibilityGrid, guardsVisibility);

                mainDisplay.Draw(viewport, (0, 0));

                // and finally blit this all to the window
                mainDisplay.DrawToWindow(window);

                borderDisplay.DrawToWindow(window);

                DisplayHud();
                hudDisplay.DrawToWindow(window);

                DisplayMessages();
                messageDisplay.DrawToWindow(window);

                window.Display();
            }
        }
Exemplo n.º 3
0
        private void DisplayMessages()
        {
            messageDisplay.Clear();
            var messages     = gameState.Messages.GetMessages();
            var index        = 0;
            var maxMsgLength = DisplayConsts.MessageDisplaySize.X - 2;

            foreach (var msg in messages)
            {
                if (msg.Length > maxMsgLength)
                {
                    messageDisplay.Draw(msg.Substring(0, maxMsgLength), (1, index + 1));
                }
                else
                {
                    messageDisplay.Draw(msg, (1, index + 1));
                }
                index++;
            }
        }