Enhance HUD with inspector and spawner hints
- Added localization for inspector (F1) and spawner (F9) hints in both English and Russian. - Updated the WorldScene to display a new HUD card that includes date/time/season and control hints. - Refactored HudSystem to streamline the display of date/time/season information, removing seed and FPS from the HUD. This update improves user experience by providing clearer control hints and a more informative HUD layout.
This commit is contained in:
@@ -7,6 +7,8 @@
|
|||||||
"season.autumn": "autumn",
|
"season.autumn": "autumn",
|
||||||
"season.winter": "winter",
|
"season.winter": "winter",
|
||||||
"hud.controls": "WASD — camera, wheel — zoom, LMB — select, ` — console, F1 — inspector",
|
"hud.controls": "WASD — camera, wheel — zoom, LMB — select, ` — console, F1 — inspector",
|
||||||
|
"hud.inspector": "F1 — inspector",
|
||||||
|
"hud.spawner": "F9 — spawner",
|
||||||
"inspect.tab.overview": "Overview",
|
"inspect.tab.overview": "Overview",
|
||||||
"inspect.tab.genes": "Genes",
|
"inspect.tab.genes": "Genes",
|
||||||
"inspect.tab.products": "Products",
|
"inspect.tab.products": "Products",
|
||||||
|
|||||||
@@ -7,6 +7,8 @@
|
|||||||
"season.autumn": "осень",
|
"season.autumn": "осень",
|
||||||
"season.winter": "зима",
|
"season.winter": "зима",
|
||||||
"hud.controls": "WASD — камера, колесо — зум, ЛКМ — выбрать, ` — консоль, F1 — инспектор",
|
"hud.controls": "WASD — камера, колесо — зум, ЛКМ — выбрать, ` — консоль, F1 — инспектор",
|
||||||
|
"hud.inspector": "F1 — инспектор",
|
||||||
|
"hud.spawner": "F9 — спавнер",
|
||||||
"inspect.tab.overview": "Обзор",
|
"inspect.tab.overview": "Обзор",
|
||||||
"inspect.tab.genes": "Гены",
|
"inspect.tab.genes": "Гены",
|
||||||
"inspect.tab.products": "Продукты",
|
"inspect.tab.products": "Продукты",
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ using MrGameEng.Lighting;
|
|||||||
using MrGameEng.Tilemaps;
|
using MrGameEng.Tilemaps;
|
||||||
using MrGameEng.UI;
|
using MrGameEng.UI;
|
||||||
using Myra.Graphics2D;
|
using Myra.Graphics2D;
|
||||||
|
using Myra.Graphics2D.Brushes;
|
||||||
using Myra.Graphics2D.UI;
|
using Myra.Graphics2D.UI;
|
||||||
|
|
||||||
namespace LittleSim.Scenes;
|
namespace LittleSim.Scenes;
|
||||||
@@ -163,7 +164,7 @@ public sealed class WorldScene : Scene
|
|||||||
|
|
||||||
// HUD, полоса скорости и меню-пауза в одной корневой панели.
|
// HUD, полоса скорости и меню-пауза в одной корневой панели.
|
||||||
var desktop = this.UseScaledUI();
|
var desktop = this.UseScaledUI();
|
||||||
var hudLabel = new Label { Left = 10, Top = 8 };
|
var hudLabel = new Label { TextColor = Ui.Accent }; // дата/время/сезон — заполняет HudSystem
|
||||||
var speedBar = BuildSpeedBar(content);
|
var speedBar = BuildSpeedBar(content);
|
||||||
_pause = new PauseMenu(
|
_pause = new PauseMenu(
|
||||||
Context,
|
Context,
|
||||||
@@ -218,7 +219,29 @@ public sealed class WorldScene : Scene
|
|||||||
Margin = new Thickness(0, 8, 12, 0),
|
Margin = new Thickness(0, 8, 12, 0),
|
||||||
};
|
};
|
||||||
|
|
||||||
var hudChildren = new List<Widget> { hudLabel, _inspect.Panel, speedBar, _pause.Root };
|
// Карточка статуса (верх-слева): строка даты/времени/сезона + краткие подсказки клавиш. Спавнер
|
||||||
|
// (F9) — только в дев-режиме; инспектор (F1) доступен всегда.
|
||||||
|
var hint = content.Languages.Get("hud.inspector");
|
||||||
|
if (spawner is not null)
|
||||||
|
{
|
||||||
|
hint += " · " + content.Languages.Get("hud.spawner");
|
||||||
|
}
|
||||||
|
|
||||||
|
var hudCard = new VerticalStackPanel
|
||||||
|
{
|
||||||
|
Spacing = 3,
|
||||||
|
Padding = new Thickness(12, 8),
|
||||||
|
HorizontalAlignment = HorizontalAlignment.Left,
|
||||||
|
VerticalAlignment = VerticalAlignment.Top,
|
||||||
|
Margin = new Thickness(10, 8, 0, 0),
|
||||||
|
Background = new SolidBrush(new Color(10, 13, 18, 210)),
|
||||||
|
Border = new SolidBrush(new Color(96, 134, 168)),
|
||||||
|
BorderThickness = new Thickness(1),
|
||||||
|
};
|
||||||
|
hudCard.Widgets.Add(hudLabel);
|
||||||
|
hudCard.Widgets.Add(new Label { Text = hint, TextColor = Ui.Muted });
|
||||||
|
|
||||||
|
var hudChildren = new List<Widget> { hudCard, _inspect.Panel, speedBar, _pause.Root };
|
||||||
if (spawner is not null)
|
if (spawner is not null)
|
||||||
{
|
{
|
||||||
hudChildren.Add(spawner.Panel);
|
hudChildren.Add(spawner.Panel);
|
||||||
@@ -448,17 +471,7 @@ public sealed class WorldScene : Scene
|
|||||||
_perf?.Refresh();
|
_perf?.Refresh();
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
UpdateSystems.Add(
|
UpdateSystems.Add(new HudSystem(Context, content.Languages, hudLabel, calendar, climate));
|
||||||
new HudSystem(
|
|
||||||
Context,
|
|
||||||
content.Languages,
|
|
||||||
hudLabel,
|
|
||||||
"hud.world",
|
|
||||||
_config.Seed,
|
|
||||||
calendar,
|
|
||||||
climate
|
|
||||||
)
|
|
||||||
);
|
|
||||||
UpdateSystems.Add(new CallbackSystem(() => Hotkeys(input)));
|
UpdateSystems.Add(new CallbackSystem(() => Hotkeys(input)));
|
||||||
|
|
||||||
// Все системы добавлены — включаем per-system мониторинг (дев-режим), чтобы команда `perf`
|
// Все системы добавлены — включаем per-system мониторинг (дев-режим), чтобы команда `perf`
|
||||||
|
|||||||
@@ -180,15 +180,14 @@ public sealed class GodCameraSystem(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Строка статуса в HUD: заголовок сцены (ключ локализации с сидом, датой/временем календаря и
|
/// Строка даты/времени/сезона в HUD (верх-слева). Обновляется ~4 раза в секунду; смена языка
|
||||||
/// FPS) и подсказка управления. Обновляется 4 раза в секунду; смена языка подхватывается сама.
|
/// подхватывается сама. Сид и FPS убраны (сид виден в меню, FPS — в окне производительности),
|
||||||
|
/// подсказки управления вынесены отдельной строкой сцены.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public sealed class HudSystem(
|
public sealed class HudSystem(
|
||||||
MrGameEng.Core.EngineContext context,
|
MrGameEng.Core.EngineContext context,
|
||||||
MrGameEng.Mods.LanguageManager languages,
|
MrGameEng.Mods.LanguageManager languages,
|
||||||
Myra.Graphics2D.UI.Label label,
|
Myra.Graphics2D.UI.Label label,
|
||||||
string titleKey,
|
|
||||||
int seed,
|
|
||||||
MrGameEng.Core.Calendar? calendar = null,
|
MrGameEng.Core.Calendar? calendar = null,
|
||||||
MrGameEng.Core.Climate? climate = null
|
MrGameEng.Core.Climate? climate = null
|
||||||
) : BaseSystem
|
) : BaseSystem
|
||||||
@@ -198,7 +197,6 @@ public sealed class HudSystem(
|
|||||||
private static readonly string[] SeasonKeys = BuildSeasonKeys();
|
private static readonly string[] SeasonKeys = BuildSeasonKeys();
|
||||||
|
|
||||||
private float _accumulated;
|
private float _accumulated;
|
||||||
private int _frames;
|
|
||||||
|
|
||||||
private static string[] BuildSeasonKeys()
|
private static string[] BuildSeasonKeys()
|
||||||
{
|
{
|
||||||
@@ -215,27 +213,23 @@ public sealed class HudSystem(
|
|||||||
protected override void OnUpdateGroup()
|
protected override void OnUpdateGroup()
|
||||||
{
|
{
|
||||||
_accumulated += context.Clock.UnscaledDeltaTime;
|
_accumulated += context.Clock.UnscaledDeltaTime;
|
||||||
_frames++;
|
|
||||||
if (_accumulated < 0.25f)
|
if (_accumulated < 0.25f)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var fps = (int)MathF.Round(_frames / _accumulated);
|
|
||||||
_accumulated = 0f;
|
_accumulated = 0f;
|
||||||
_frames = 0;
|
var text = calendar is null
|
||||||
var when = calendar is null
|
|
||||||
? ""
|
? ""
|
||||||
: languages.Format("hud.datetime", calendar.Day, calendar.Hour, calendar.Minute);
|
: languages.Format("hud.datetime", calendar.Day, calendar.Hour, calendar.Minute);
|
||||||
if (climate is not null)
|
if (climate is not null)
|
||||||
{
|
{
|
||||||
var season = languages.Get(SeasonKeys[(int)climate.Season]);
|
var season = languages.Get(SeasonKeys[(int)climate.Season]);
|
||||||
when +=
|
text +=
|
||||||
" | "
|
" · "
|
||||||
+ languages.Format("hud.climate", season, (int)MathF.Round(climate.Temperature));
|
+ languages.Format("hud.climate", season, (int)MathF.Round(climate.Temperature));
|
||||||
}
|
}
|
||||||
|
|
||||||
label.Text =
|
label.Text = text;
|
||||||
languages.Format(titleKey, seed, when, fps) + "\n" + languages.Get("hud.controls");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user