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));