diff --git a/Mods/Core/Languages/en/ui.json b/Mods/Core/Languages/en/ui.json
index dbaca85..e5a4aa7 100644
--- a/Mods/Core/Languages/en/ui.json
+++ b/Mods/Core/Languages/en/ui.json
@@ -108,6 +108,7 @@
"settings.resolution": "Resolution",
"settings.volume": "Volume",
"settings.uiscale": "UI scale",
+ "settings.devmode": "Developer mode",
"settings.apply": "Apply",
"settings.back": "Back",
"pause.title": "Paused",
diff --git a/Mods/Core/Languages/ru/ui.json b/Mods/Core/Languages/ru/ui.json
index ada3961..e5e1bb3 100644
--- a/Mods/Core/Languages/ru/ui.json
+++ b/Mods/Core/Languages/ru/ui.json
@@ -108,6 +108,7 @@
"settings.resolution": "Разрешение",
"settings.volume": "Громкость",
"settings.uiscale": "Масштаб UI",
+ "settings.devmode": "Режим разработчика",
"settings.apply": "Применить",
"settings.back": "Назад",
"pause.title": "Пауза",
diff --git a/src/LittleSim/App/GameSettings.cs b/src/LittleSim/App/GameSettings.cs
index 27a0e88..0326c4d 100644
--- a/src/LittleSim/App/GameSettings.cs
+++ b/src/LittleSim/App/GameSettings.cs
@@ -31,6 +31,9 @@ public sealed class GameSettings
/// Масштаб интерфейса (1 — обычный); применяется к Myra-десктопу всех сцен.
public float UiScale { get; set; } = 1f;
+
+ /// Режим разработчика: открывает дев-консоль (backtick) и дев-спавнер. По умолчанию включён.
+ public bool DeveloperMode { get; set; } = true;
}
/// Чтение/запись и применение их к движку.
diff --git a/src/LittleSim/Scenes/WorldScene.cs b/src/LittleSim/Scenes/WorldScene.cs
index a4ac37c..b548a6d 100644
--- a/src/LittleSim/Scenes/WorldScene.cs
+++ b/src/LittleSim/Scenes/WorldScene.cs
@@ -183,31 +183,41 @@ public sealed class WorldScene : Scene
desktop.Root = Ui.Screen(hudLabel, _inspect.Panel, speedBar, _pause.Root);
this.UseInspector(renderer);
- var console = this.UseDevConsole();
- RegisterCommands(console, content, atlases);
- console.Register(
- "light",
- "light [radius] — place a point light at the cursor (night shadows demo)",
- (c, args) =>
- {
- var radius =
- args.Length > 0
- ? float.Parse(args[0], System.Globalization.CultureInfo.InvariantCulture)
- : 120f;
- var mouse = Mouse.GetState();
- var world = renderer.ScreenToWorld(new Vector2(mouse.X, mouse.Y));
- Store.CreateEntity(
- Transform2D.At(world),
- new PointLight
- {
- Radius = radius,
- Color = Color.White,
- Intensity = 0.9f,
- }
- );
- c.WriteLine($"light at {world.X:0},{world.Y:0} r{radius:0}");
- }
- );
+
+ // Режим разработчика (настройка, по умолчанию вкл): без него дев-консоль и спавнер не поднимаются.
+ var devMode = GameSettingsStore.Load().DeveloperMode;
+ MrGameEng.DevConsole.DevConsole? console = null;
+ if (devMode)
+ {
+ console = this.UseDevConsole();
+ RegisterCommands(console, content, atlases);
+ console.Register(
+ "light",
+ "light [radius] — place a point light at the cursor (night shadows demo)",
+ (c, args) =>
+ {
+ var radius =
+ args.Length > 0
+ ? float.Parse(
+ args[0],
+ System.Globalization.CultureInfo.InvariantCulture
+ )
+ : 120f;
+ var mouse = Mouse.GetState();
+ var world = renderer.ScreenToWorld(new Vector2(mouse.X, mouse.Y));
+ Store.CreateEntity(
+ Transform2D.At(world),
+ new PointLight
+ {
+ Radius = radius,
+ Color = Color.White,
+ Intensity = 0.9f,
+ }
+ );
+ c.WriteLine($"light at {world.X:0},{world.Y:0} r{radius:0}");
+ }
+ );
+ }
UpdateSystems.Add(new PlantGrowthSystem(_plants, calendar, climate, lighting, CellSize));
UpdateSystems.Add(new PlantFruitingSystem(_plants, calendar, climate));
diff --git a/src/LittleSim/Sim/SimSystems.cs b/src/LittleSim/Sim/SimSystems.cs
index 30f5f89..3abc96e 100644
--- a/src/LittleSim/Sim/SimSystems.cs
+++ b/src/LittleSim/Sim/SimSystems.cs
@@ -125,13 +125,13 @@ public sealed class GodCameraSystem(
Entity cameraEntity,
InputManager input,
Renderer2D renderer,
- MrGameEng.DevConsole.DevConsole console,
+ MrGameEng.DevConsole.DevConsole? console,
Func? blocked = null
) : BaseSystem
{
protected override void OnUpdateGroup()
{
- if (console.IsOpen || blocked?.Invoke() == true)
+ if (console?.IsOpen == true || blocked?.Invoke() == true)
{
return;
}
diff --git a/src/LittleSim/UI/SettingsPanel.cs b/src/LittleSim/UI/SettingsPanel.cs
index a1b1984..192fde6 100644
--- a/src/LittleSim/UI/SettingsPanel.cs
+++ b/src/LittleSim/UI/SettingsPanel.cs
@@ -98,6 +98,16 @@ internal static class SettingsPanel
// Громкость — кнопки −/+ с подписью процента.
column.Widgets.Add(Volume(lang.Get("settings.volume"), settings, refreshers));
+ // Режим разработчика — тумблер (дев-консоль и спавнер; по умолчанию включён).
+ column.Widgets.Add(
+ Toggle(
+ lang.Get("settings.devmode"),
+ () => settings.DeveloperMode,
+ v => settings.DeveloperMode = v,
+ refreshers
+ )
+ );
+
column.Widgets.Add(new Label { Height = 8 });
var buttons = Ui.Row(10);
buttons.Widgets.Add(Ui.Button(lang.Get("settings.apply"), onApply, width: 150));