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)); } } } }
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(); } }
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++; } }