From 35374d168fd1d489d0a82c3117c33cd97be98028 Mon Sep 17 00:00:00 2001 From: abcdefg30 Date: Sat, 16 May 2015 01:27:14 +0200 Subject: [PATCH] Add support for custom mission timers: UserInterfaceGlobal --- OpenRA.Game/Graphics/HSLColor.cs | 3 +- OpenRA.Mods.Common/OpenRA.Mods.Common.csproj | 2 ++ .../Scripting/Global/HSLColorGlobal.cs | 32 +++++++++++++++++ .../Scripting/Global/UserInterfaceGlobal.cs | 35 +++++++++++++++++++ mods/cnc/chrome/ingame.yaml | 8 +++++ mods/d2k/chrome/ingame.yaml | 8 +++++ mods/ra/chrome/ingame.yaml | 8 +++++ 7 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 OpenRA.Mods.Common/Scripting/Global/HSLColorGlobal.cs create mode 100644 OpenRA.Mods.Common/Scripting/Global/UserInterfaceGlobal.cs diff --git a/OpenRA.Game/Graphics/HSLColor.cs b/OpenRA.Game/Graphics/HSLColor.cs index ec5ca86e3b..c6fa0d9520 100644 --- a/OpenRA.Game/Graphics/HSLColor.cs +++ b/OpenRA.Game/Graphics/HSLColor.cs @@ -9,10 +9,11 @@ #endregion using System.Drawing; +using OpenRA.Scripting; namespace OpenRA.Graphics { - public struct HSLColor + public struct HSLColor : IScriptBindable { public readonly byte H; public readonly byte S; diff --git a/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj b/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj index f26d16d56b..4049908978 100644 --- a/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj +++ b/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj @@ -176,6 +176,8 @@ + + diff --git a/OpenRA.Mods.Common/Scripting/Global/HSLColorGlobal.cs b/OpenRA.Mods.Common/Scripting/Global/HSLColorGlobal.cs new file mode 100644 index 0000000000..5328f62c2f --- /dev/null +++ b/OpenRA.Mods.Common/Scripting/Global/HSLColorGlobal.cs @@ -0,0 +1,32 @@ +#region Copyright & License Information +/* + * Copyright 2007-2015 The OpenRA Developers (see AUTHORS) + * This file is part of OpenRA, which is free software. It is made + * available to you under the terms of the GNU General Public License + * as published by the Free Software Foundation. For more information, + * see COPYING. + */ +#endregion + +using OpenRA.Graphics; +using OpenRA.Scripting; + +namespace OpenRA.Mods.Common.Scripting.Global +{ + [ScriptGlobal("HSLColor")] + public class HSLColorGlobal : ScriptGlobal + { + public HSLColorGlobal(ScriptContext context) + : base(context) { } + + [Desc("Create a new HSL color with the specified hue/saturation/luminosity.")] + public HSLColor New(int hue, int saturation, int luminosity) + { + var h = (byte)hue.Clamp(0, 255); + var s = (byte)saturation.Clamp(0, 255); + var l = (byte)luminosity.Clamp(0, 255); + + return new HSLColor(h, s, l); + } + } +} diff --git a/OpenRA.Mods.Common/Scripting/Global/UserInterfaceGlobal.cs b/OpenRA.Mods.Common/Scripting/Global/UserInterfaceGlobal.cs new file mode 100644 index 0000000000..2c7bee9744 --- /dev/null +++ b/OpenRA.Mods.Common/Scripting/Global/UserInterfaceGlobal.cs @@ -0,0 +1,35 @@ +#region Copyright & License Information +/* + * Copyright 2007-2015 The OpenRA Developers (see AUTHORS) + * This file is part of OpenRA, which is free software. It is made + * available to you under the terms of the GNU General Public License + * as published by the Free Software Foundation. For more information, + * see COPYING. + */ +#endregion + +using System.Drawing; +using OpenRA.Graphics; +using OpenRA.Mods.Common.Widgets; +using OpenRA.Scripting; +using OpenRA.Widgets; + +namespace OpenRA.Mods.Common.Scripting.Global +{ + [ScriptGlobal("UserInterface")] + public class UserInterfaceGlobal : ScriptGlobal + { + public UserInterfaceGlobal(ScriptContext context) + : base(context) { } + + [Desc("Displays a text message at the top center of the screen.")] + public void SetMissionText(string text, HSLColor? color = null) + { + var luaLabel = Ui.Root.Get("INGAME_ROOT").Get("MISSION_TEXT"); + luaLabel.GetText = () => text; + + Color c = color.HasValue ? HSLColor.RGBFromHSL(color.Value.H / 255f, color.Value.S / 255f, color.Value.L / 255f) : Color.White; + luaLabel.GetColor = () => c; + } + } +} diff --git a/mods/cnc/chrome/ingame.yaml b/mods/cnc/chrome/ingame.yaml index 4c9d25a42b..e890e2ee6a 100644 --- a/mods/cnc/chrome/ingame.yaml +++ b/mods/cnc/chrome/ingame.yaml @@ -39,6 +39,14 @@ Container@INGAME_ROOT: Container@PLAYER_ROOT: Container@MENU_ROOT: TooltipContainer@TOOLTIP_CONTAINER: + Label@MISSION_TEXT: + X: WINDOW_RIGHT/2 - 256 + Y: 22 + Width: 512 + Height: 25 + Font: Bold + Align: Center + Contrast: true Container@PERF_WIDGETS: Logic: PerfDebugLogic diff --git a/mods/d2k/chrome/ingame.yaml b/mods/d2k/chrome/ingame.yaml index e8e2bc69bd..dab27e3ff6 100644 --- a/mods/d2k/chrome/ingame.yaml +++ b/mods/d2k/chrome/ingame.yaml @@ -46,3 +46,11 @@ Container@INGAME_ROOT: Contrast: true Container@MENU_ROOT: TooltipContainer@TOOLTIP_CONTAINER: + Label@MISSION_TEXT: + X: WINDOW_RIGHT/2 - 256 + Y: 22 + Width: 512 + Height: 25 + Font: Bold + Align: Center + Contrast: true diff --git a/mods/ra/chrome/ingame.yaml b/mods/ra/chrome/ingame.yaml index 89cc43c27f..2d5d659857 100644 --- a/mods/ra/chrome/ingame.yaml +++ b/mods/ra/chrome/ingame.yaml @@ -27,3 +27,11 @@ Container@INGAME_ROOT: Container@PERF_ROOT: Container@MENU_ROOT: TooltipContainer@TOOLTIP_CONTAINER: + Label@MISSION_TEXT: + X: WINDOW_RIGHT/2 - 256 + Y: 22 + Width: 512 + Height: 25 + Font: Bold + Align: Center + Contrast: true