From f92b59e6db37349bb0ecabaf89f9acfb589d0a82 Mon Sep 17 00:00:00 2001 From: alzeih Date: Sat, 26 Jun 2010 00:04:36 +1200 Subject: [PATCH] Developer Mode (pchote: amended) --- OpenRA.Game/GameRules/UserSettings.cs | 5 +- OpenRA.Game/OpenRA.Game.csproj | 3 +- OpenRA.Game/Support/Program.cs | 5 +- OpenRA.Game/Traits/Player/ProductionQueue.cs | 2 +- OpenRA.Game/Widgets/ButtonWidget.cs | 2 +- .../Delegates/DeveloperModeDelegate.cs | 96 +++++++++++++++++++ .../Widgets/Delegates/DiplomacyDelegate.cs | 2 +- OpenRA.Game/Widgets/MoneyBinWidget.cs | 2 +- OpenRA.Game/Widgets/Widget.cs | 2 +- OpenRA.Mods.RA/OpenRA.Mods.RA.csproj | 5 + mods/cnc/chrome/ingame.yaml | 75 ++++++++++++++- mods/ra/chrome/ingame.yaml | 75 ++++++++++++++- 12 files changed, 262 insertions(+), 12 deletions(-) create mode 100644 OpenRA.Game/Widgets/Delegates/DeveloperModeDelegate.cs diff --git a/OpenRA.Game/GameRules/UserSettings.cs b/OpenRA.Game/GameRules/UserSettings.cs index a6b0b48804..9b628546d4 100644 --- a/OpenRA.Game/GameRules/UserSettings.cs +++ b/OpenRA.Game/GameRules/UserSettings.cs @@ -24,8 +24,9 @@ namespace OpenRA.GameRules public bool PathDebug = false; public bool PerfDebug = false; public bool IndexDebug = false; - public bool RecordSyncReports = true; - public bool ShowGameTimer = true; + public bool RecordSyncReports = true; + public bool ShowGameTimer = true; + public bool DeveloperMode = false; // Window settings public WindowMode WindowMode = WindowMode.PseudoFullscreen; diff --git a/OpenRA.Game/OpenRA.Game.csproj b/OpenRA.Game/OpenRA.Game.csproj index f8324cf0f0..581254116f 100755 --- a/OpenRA.Game/OpenRA.Game.csproj +++ b/OpenRA.Game/OpenRA.Game.csproj @@ -236,7 +236,8 @@ {BDAEAB25-991E-46A7-AF1E-4F0E03358DAA} OpenRA.FileFormats - + + False diff --git a/OpenRA.Game/Support/Program.cs b/OpenRA.Game/Support/Program.cs index 26e1e6eac6..38432c5f53 100644 --- a/OpenRA.Game/Support/Program.cs +++ b/OpenRA.Game/Support/Program.cs @@ -24,7 +24,7 @@ namespace OpenRA // brutal hack Application.CurrentCulture = CultureInfo.InvariantCulture; - if (Debugger.IsAttached || args.Contains("--just-die")) + if (Debugger.IsAttached) { Run(args); return; @@ -38,7 +38,8 @@ namespace OpenRA { Log.AddChannel("exception", "openra.exception.txt", true, false); Log.Write("exception", "{0}", e.ToString()); - Log.Upload(Game.GetGameId()); + if (!Game.Settings.DeveloperMode || ( Game.Settings.DeveloperMode && Game.GetGameId() != 0) ) + Log.Upload(Game.GetGameId()); throw; } } diff --git a/OpenRA.Game/Traits/Player/ProductionQueue.cs b/OpenRA.Game/Traits/Player/ProductionQueue.cs index 9b5c528534..e21835cb26 100644 --- a/OpenRA.Game/Traits/Player/ProductionQueue.cs +++ b/OpenRA.Game/Traits/Player/ProductionQueue.cs @@ -17,7 +17,7 @@ namespace OpenRA.Traits { class ProductionQueueInfo : ITraitInfo { - public readonly float BuildSpeed = 0.4f; + public float BuildSpeed = 0.4f; public readonly int LowPowerSlowdown = 3; public object Create(ActorInitializer init) { return new ProductionQueue(init.self); } } diff --git a/OpenRA.Game/Widgets/ButtonWidget.cs b/OpenRA.Game/Widgets/ButtonWidget.cs index 63fca04adf..78cabed4ae 100644 --- a/OpenRA.Game/Widgets/ButtonWidget.cs +++ b/OpenRA.Game/Widgets/ButtonWidget.cs @@ -53,7 +53,7 @@ namespace OpenRA.Widgets var wasPressed = Depressed; return (LoseFocus(mi) && wasPressed); } - + if (mi.Event == MouseInputEvent.Down) Depressed = true; else if (mi.Event == MouseInputEvent.Move && Focused) diff --git a/OpenRA.Game/Widgets/Delegates/DeveloperModeDelegate.cs b/OpenRA.Game/Widgets/Delegates/DeveloperModeDelegate.cs new file mode 100644 index 0000000000..e81c3af495 --- /dev/null +++ b/OpenRA.Game/Widgets/Delegates/DeveloperModeDelegate.cs @@ -0,0 +1,96 @@ +#region Copyright & License Information +/* + * Copyright 2007,2009,2010 Chris Forbes, Robert Pepperell, Matthew Bowra-Dean, Paul Chote, Alli Witheford. + * This file is part of OpenRA. + * + * OpenRA is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenRA is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenRA. If not, see . + */ +#endregion + +using System; +using OpenRA; +using OpenRA.Traits; +using OpenRA.Widgets; + + +namespace OpenRA.Widgets.Delegates +{ + + public class DeveloperModeDelegate : IWidgetDelegate + { + + float oldBuildSpeed = 0; + bool slowed = false; + + public DeveloperModeDelegate () + { + var devmodeBG = Chrome.rootWidget.GetWidget("INGAME_ROOT").GetWidget("DEVELOPERMODE_BG"); + var devModeButton = Chrome.rootWidget.GetWidget("INGAME_DEVELOPERMODE_BUTTON"); + + devModeButton.OnMouseUp = mi => + { + devmodeBG.Visible ^= true; + return true; + }; + + devmodeBG.GetWidget("SETTINGS_CHECKBOX_SHROUD").Checked = + () => Game.world.LocalPlayer.Shroud.Disabled; + devmodeBG.GetWidget("SETTINGS_CHECKBOX_SHROUD").OnMouseDown = mi => + { + Game.world.LocalPlayer.Shroud.Disabled ^= true; + return true; + }; + + devmodeBG.GetWidget("SETTINGS_CHECKBOX_UNITDEBUG").Checked = + () => {return Game.Settings.UnitDebug;}; + devmodeBG.GetWidget("SETTINGS_CHECKBOX_UNITDEBUG").OnMouseDown = mi => { + Game.Settings.UnitDebug ^= true; + return true; + }; + + devmodeBG.GetWidget("SETTINGS_CHECKBOX_PATHDEBUG").Checked = + () => {return Game.Settings.PathDebug;}; + devmodeBG.GetWidget("SETTINGS_CHECKBOX_PATHDEBUG").OnMouseDown = mi => { + Game.Settings.PathDebug ^= true; + return true; + }; + + devmodeBG.GetWidget("SETTINGS_CHECKBOX_INDEXDEBUG").Checked = + () => {return Game.Settings.IndexDebug;}; + devmodeBG.GetWidget("SETTINGS_CHECKBOX_INDEXDEBUG").OnMouseDown = mi => { + Game.Settings.IndexDebug ^= true; + return true; + }; + + //danger will robinson + devmodeBG.GetWidget("SETTINGS_GIVE_CASH").OnMouseUp = mi => + { + Game.world.LocalPlayer.PlayerActor.traits.Get().GiveCash(5000); + return true; + }; + + devmodeBG.GetWidget("SETTINGS_BUILD_SPEED").OnMouseDown = mi => + { + oldBuildSpeed = (!slowed)? Game.world.LocalPlayer.PlayerActor.Info.Traits.Get().BuildSpeed : oldBuildSpeed; + Game.world.LocalPlayer.PlayerActor.Info.Traits.Get().BuildSpeed = (slowed)? oldBuildSpeed : 0; + slowed ^= true; + return true; + }; + devmodeBG.GetWidget("SETTINGS_BUILD_SPEED").Checked = + () => {return slowed;}; + + devModeButton.IsVisible = () => { return Game.Settings.DeveloperMode; }; + } + } +} diff --git a/OpenRA.Game/Widgets/Delegates/DiplomacyDelegate.cs b/OpenRA.Game/Widgets/Delegates/DiplomacyDelegate.cs index 796b73d2da..70839aff59 100644 --- a/OpenRA.Game/Widgets/Delegates/DiplomacyDelegate.cs +++ b/OpenRA.Game/Widgets/Delegates/DiplomacyDelegate.cs @@ -27,7 +27,7 @@ namespace OpenRA.Widgets.Delegates Chrome.rootWidget.GetWidget("INGAME_DIPLOMACY_BUTTON").OnMouseUp = mi => { diplomacyBG.Visible = !diplomacyBG.Visible; - if (diplomacyBG.Visible) + if (diplomacyBG.IsVisible()) LayoutDialog(diplomacyBG); return true; }; diff --git a/OpenRA.Game/Widgets/MoneyBinWidget.cs b/OpenRA.Game/Widgets/MoneyBinWidget.cs index bd5005aba9..ae88b03ca6 100644 --- a/OpenRA.Game/Widgets/MoneyBinWidget.cs +++ b/OpenRA.Game/Widgets/MoneyBinWidget.cs @@ -126,7 +126,7 @@ namespace OpenRA.Widgets } public override bool HandleInput(MouseInput mi) - { + { if (mi.Event == MouseInputEvent.Down) { var action = buttons.Where(a => a.First.Contains(mi.Location.ToPoint())) diff --git a/OpenRA.Game/Widgets/Widget.cs b/OpenRA.Game/Widgets/Widget.cs index 7136dda479..5310b91fdb 100644 --- a/OpenRA.Game/Widgets/Widget.cs +++ b/OpenRA.Game/Widgets/Widget.cs @@ -140,7 +140,7 @@ namespace OpenRA.Widgets public Rectangle GetEventBounds() { return Children - .Where(c => c.Visible) + .Where(c => c.IsVisible()) .Select(c => c.GetEventBounds()) .Aggregate(RenderBounds, Rectangle.Union); } diff --git a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj index c3dfc3127a..b61eedb8e8 100644 --- a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj +++ b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj @@ -233,4 +233,9 @@ copy "$(TargetPath)" "$(SolutionDir)mods/ra/" cd "$(SolutionDir)" ralint ra + + + + + \ No newline at end of file diff --git a/mods/cnc/chrome/ingame.yaml b/mods/cnc/chrome/ingame.yaml index dd7d418cb2..9e2959a82e 100644 --- a/mods/cnc/chrome/ingame.yaml +++ b/mods/cnc/chrome/ingame.yaml @@ -46,6 +46,15 @@ Container@ROOT: Bold:True WorldTooltip@INGAME_WORLD_TOOLTIP: Id:INGAME_WORLD_TOOLTIP + Button@INGAME_DEVELOPERMODE_BUTTON: + Id:INGAME_DEVELOPERMODE_BUTTON + X:324 + Y:0 + Width:160 + Height:25 + Text:Developer Mode + Visible:false + Bold:True RadarBin@INGAME_RADAR_BIN: Id:INGAME_RADAR_BIN PowerBin@INGAME_POWER_BIN: @@ -146,4 +155,68 @@ Container@ROOT: Y:WINDOW_BOTTOM - HEIGHT Width: 760 Height: 30 - ClickThrough: True \ No newline at end of file + ClickThrough: True + Background@DEVELOPERMODE_BG: + Id:DEVELOPERMODE_BG + Delegate:DeveloperModeDelegate + X:(WINDOW_RIGHT - WIDTH)/2 + Y:(WINDOW_BOTTOM - HEIGHT)/2 + Width:450 + Height:400 + Visible:false + Children: + Label@LABEL_TITLE: + Id:LABEL_TITLE + X:(PARENT_RIGHT - WIDTH)/2 + Y:20 + Width:250 + Height:25 + Text:Developer Mode + Align:Center + Checkbox@SETTINGS_CHECKBOX_SHROUD + Id:SETTINGS_CHECKBOX_SHROUD + X:100 + Y:50 + Height:20 + Width:20 + Text:Disable Shroud + Checkbox@SETTINGS_CHECKBOX_UNITDEBUG: + Id:SETTINGS_CHECKBOX_UNITDEBUG + X:100 + Y:80 + Width:300 + Height:20 + Text:Show Occupied Cells + Checkbox@SETTINGS_CHECKBOX_PATHDEBUG: + Id:SETTINGS_CHECKBOX_PATHDEBUG + X:100 + Y:110 + Width:300 + Height:20 + Text:Show Unit Paths + Checkbox@SETTINGS_CHECKBOX_INDEXDEBUG: + Id:SETTINGS_CHECKBOX_INDEXDEBUG + X:100 + Y:140 + Width:300 + Height:20 + Text:Show Spatial Index Debug + Label@LABEL_MP_WARNING + Id:LABEL_MP_WARNING + X:100 + Y:170 + Text:May cause errors under multiplayer: + Button@SETTINGS_GIVE_CASH + Id:SETTINGS_GIVE_CASH + X:100 + Y:200 + Width:150 + Height:20 + Text: Give Cash + Checkbox@SETTINGS_BUILD_SPEED + Id:SETTINGS_BUILD_SPEED + X:100 + Y:230 + Width:20 + Height:20 + Text:Instant Build Speed \ No newline at end of file diff --git a/mods/ra/chrome/ingame.yaml b/mods/ra/chrome/ingame.yaml index 3d229dee35..a2ca75fd2e 100644 --- a/mods/ra/chrome/ingame.yaml +++ b/mods/ra/chrome/ingame.yaml @@ -43,6 +43,15 @@ Container@ROOT: Bold:True WorldTooltip@INGAME_WORLD_TOOLTIP: Id:INGAME_WORLD_TOOLTIP + Button@INGAME_DEVELOPERMODE_BUTTON: + Id:INGAME_DEVELOPERMODE_BUTTON + X:324 + Y:0 + Width:160 + Height:25 + Text:Developer Mode + Visible:false + Bold:True RadarBin@INGAME_RADAR_BIN: Id:INGAME_RADAR_BIN PowerBin@INGAME_POWER_BIN: @@ -143,4 +152,68 @@ Container@ROOT: Y:WINDOW_BOTTOM - HEIGHT Width: 760 Height: 30 - ClickThrough: True \ No newline at end of file + ClickThrough: True + Background@DEVELOPERMODE_BG: + Id:DEVELOPERMODE_BG + Delegate:DeveloperModeDelegate + X:(WINDOW_RIGHT - WIDTH)/2 + Y:(WINDOW_BOTTOM - HEIGHT)/2 + Width:450 + Height:400 + Visible:false + Children: + Label@LABEL_TITLE: + Id:LABEL_TITLE + X:(PARENT_RIGHT - WIDTH)/2 + Y:20 + Width:250 + Height:25 + Text:Developer Mode + Align:Center + Checkbox@SETTINGS_CHECKBOX_SHROUD + Id:SETTINGS_CHECKBOX_SHROUD + X:100 + Y:50 + Height:20 + Width:20 + Text:Disable Shroud + Checkbox@SETTINGS_CHECKBOX_UNITDEBUG: + Id:SETTINGS_CHECKBOX_UNITDEBUG + X:100 + Y:80 + Width:300 + Height:20 + Text:Show Occupied Cells + Checkbox@SETTINGS_CHECKBOX_PATHDEBUG: + Id:SETTINGS_CHECKBOX_PATHDEBUG + X:100 + Y:110 + Width:300 + Height:20 + Text:Show Unit Paths + Checkbox@SETTINGS_CHECKBOX_INDEXDEBUG: + Id:SETTINGS_CHECKBOX_INDEXDEBUG + X:100 + Y:140 + Width:300 + Height:20 + Text:Show Spatial Index Debug + Label@LABEL_MP_WARNING + Id:LABEL_MP_WARNING + X:100 + Y:170 + Text:May cause errors under multiplayer: + Button@SETTINGS_GIVE_CASH + Id:SETTINGS_GIVE_CASH + X:100 + Y:200 + Width:150 + Height:20 + Text: Give Cash + Checkbox@SETTINGS_BUILD_SPEED + Id:SETTINGS_BUILD_SPEED + X:100 + Y:230 + Width:20 + Height:20 + Text:Instant Build Speed \ No newline at end of file