Merge pull request #5972 from pchote/new-ra-ui

Closes #2394
Closes #2385
Closes #4980
Closes #5108
This commit is contained in:
Matthias Mailänder
2014-07-26 10:22:03 +02:00
80 changed files with 2032 additions and 608 deletions

View File

@@ -30,7 +30,7 @@ namespace OpenRA.Widgets
public override bool HandleMouseInput(MouseInput mi)
{
if (ClickThrough || !Bounds.Contains(mi.Location))
if (ClickThrough || !RenderBounds.Contains(mi.Location))
return false;
if (!Draggable || moving && (!TakeMouseFocus(mi) || mi.Button != MouseButton.Left))

View File

@@ -17,6 +17,7 @@ namespace OpenRA.Widgets
{
public string ImageCollection = "";
public string ImageName = "";
public bool ClickThrough = true;
public Func<string> GetImageName;
public Func<string> GetImageCollection;
@@ -29,6 +30,7 @@ namespace OpenRA.Widgets
protected ImageWidget(ImageWidget other)
: base(other)
{
ClickThrough = other.ClickThrough;
ImageName = other.ImageName;
GetImageName = other.GetImageName;
ImageCollection = other.ImageCollection;
@@ -48,5 +50,10 @@ namespace OpenRA.Widgets
WidgetUtils.DrawRGBA(sprite, RenderOrigin);
}
public override bool HandleMouseInput(MouseInput mi)
{
return !ClickThrough && RenderBounds.Contains(mi.Location);
}
}
}

View File

@@ -162,6 +162,7 @@ namespace OpenRA.Widgets
IsVisible = widget.IsVisible;
IgnoreChildMouseOver = widget.IgnoreChildMouseOver;
IgnoreMouseOver = widget.IgnoreMouseOver;
foreach (var child in widget.Children)
AddChild(child.Clone());

View File

@@ -71,24 +71,16 @@
<Compile Include="IonCannonPower.cs" />
<Compile Include="PoisonedByTiberium.cs" />
<Compile Include="ProductionAirdrop.cs" />
<Compile Include="ProductionQueueFromSelection.cs" />
<Compile Include="WithCargo.cs" />
<Compile Include="RenderGunboat.cs" />
<Compile Include="SpawnViceroid.cs" />
<Compile Include="TiberiumRefinery.cs" />
<Compile Include="Widgets\Logic\CncConquestObjectivesLogic.cs" />
<Compile Include="Widgets\Logic\CncIngameChromeLogic.cs" />
<Compile Include="Widgets\Logic\CncIngameMenuLogic.cs" />
<Compile Include="Widgets\Logic\CncMainMenuLogic.cs" />
<Compile Include="Widgets\Logic\ProductionTooltipLogic.cs" />
<Compile Include="Widgets\Logic\SupportPowerTooltipLogic.cs" />
<Compile Include="Widgets\ProductionPaletteWidget.cs" />
<Compile Include="Widgets\ProductionTabsWidget.cs" />
<Compile Include="Widgets\SupportPowersWidget.cs" />
<Compile Include="WithFire.cs" />
<Compile Include="WithRoof.cs" />
<Compile Include="Widgets\Logic\ProductionTabsLogic.cs" />
<Compile Include="Widgets\ProductionTypeButtonWidget.cs" />
<Compile Include="WithDeliveryAnimation.cs" />
</ItemGroup>
<ItemGroup>

View File

@@ -1,50 +0,0 @@
#region Copyright & License Information
/*
* Copyright 2007-2011 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;
using System.Linq;
using OpenRA.Mods.RA;
using OpenRA.Traits;
using OpenRA.Widgets;
namespace OpenRA.Mods.Cnc.Widgets
{
class ProductionQueueFromSelectionInfo : ITraitInfo
{
public string ProductionTabsWidget = null;
public object Create(ActorInitializer init) { return new ProductionQueueFromSelection(init.world, this); }
}
class ProductionQueueFromSelection : INotifySelection
{
readonly World world;
Lazy<ProductionTabsWidget> tabsWidget;
public ProductionQueueFromSelection(World world, ProductionQueueFromSelectionInfo info)
{
this.world = world;
tabsWidget = Exts.Lazy(() =>
Ui.Root.Get<ProductionTabsWidget>(info.ProductionTabsWidget));
}
public void SelectionChanged()
{
// Find an actor with a queue
var producer = world.Selection.Actors.FirstOrDefault(a => a.IsInWorld
&& a.World.LocalPlayer == a.Owner
&& a.TraitsImplementing<ProductionQueue>().Any(q => q.Enabled));
if (producer != null)
tabsWidget.Value.CurrentQueue = producer.TraitsImplementing<ProductionQueue>().First(q => q.Enabled);
}
}
}

View File

@@ -1,133 +0,0 @@
#region Copyright & License Information
/*
* Copyright 2007-2014 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 System.Linq;
using OpenRA.Mods.RA;
using OpenRA.Mods.RA.Buildings;
using OpenRA.Mods.RA.Widgets;
using OpenRA.Traits;
using OpenRA.Widgets;
namespace OpenRA.Mods.Cnc.Widgets.Logic
{
public class CncIngameChromeLogic
{
readonly Widget ingameRoot;
readonly World world;
[ObjectCreator.UseCtor]
public CncIngameChromeLogic(Widget widget, World world)
{
this.world = world;
ingameRoot = widget.Get("INGAME_ROOT");
var playerRoot = ingameRoot.Get("PLAYER_ROOT");
// Observer
if (world.LocalPlayer == null)
InitObserverWidgets(world, playerRoot);
else
InitPlayerWidgets(world, playerRoot);
Game.LoadWidget(world, "CHAT_PANEL", ingameRoot, new WidgetArgs());
}
public void OptionsClicked()
{
var cachedPause = world.PredictedPaused;
ingameRoot.IsVisible = () => false;
if (world.LobbyInfo.IsSinglePlayer)
world.SetPauseState(true);
Game.LoadWidget(world, "INGAME_MENU", Ui.Root, new WidgetArgs()
{
{ "onExit", () =>
{
ingameRoot.IsVisible = () => true;
if (world.LobbyInfo.IsSinglePlayer)
world.SetPauseState(cachedPause);
}
}
});
}
public void InitObserverWidgets(World world, Widget playerRoot)
{
var observerWidgets = Game.LoadWidget(world, "OBSERVER_WIDGETS", playerRoot, new WidgetArgs());
observerWidgets.Get<ButtonWidget>("OPTIONS_BUTTON").OnClick = OptionsClicked;
}
public void InitPlayerWidgets(World world, Widget playerRoot)
{
// Real player
var playerWidgets = Game.LoadWidget(world, "PLAYER_WIDGETS", playerRoot, new WidgetArgs());
playerWidgets.IsVisible = () => true;
var sidebarRoot = playerWidgets.Get("SIDEBAR_BACKGROUND");
var powerManager = world.LocalPlayer.PlayerActor.Trait<PowerManager>();
var playerResources = world.LocalPlayer.PlayerActor.Trait<PlayerResources>();
sidebarRoot.Get<LabelWidget>("CASH").GetText = () =>
"${0}".F(playerResources.DisplayCash + playerResources.DisplayResources);
playerWidgets.Get<ButtonWidget>("OPTIONS_BUTTON").OnClick = OptionsClicked;
var radarEnabled = false;
var cachedRadarEnabled = false;
sidebarRoot.Get<RadarWidget>("RADAR_MINIMAP").IsEnabled = () => radarEnabled;
var sidebarTicker = playerWidgets.Get<LogicTickerWidget>("SIDEBAR_TICKER");
sidebarTicker.OnTick = () =>
{
// Update radar bin
radarEnabled = world.ActorsWithTrait<ProvidesRadar>()
.Any(a => a.Actor.Owner == world.LocalPlayer && a.Trait.IsActive);
if (radarEnabled != cachedRadarEnabled)
Sound.PlayNotification(world.Map.Rules, null, "Sounds", radarEnabled ? "RadarUp" : "RadarDown", null);
cachedRadarEnabled = radarEnabled;
// Switch to observer mode after win/loss
if (world.LocalPlayer.WinState != WinState.Undefined)
Game.RunAfterTick(() =>
{
playerRoot.RemoveChildren();
InitObserverWidgets(world, playerRoot);
});
};
var siloBar = playerWidgets.Get<ResourceBarWidget>("SILOBAR");
siloBar.GetProvided = () => playerResources.ResourceCapacity;
siloBar.GetUsed = () => playerResources.Resources;
siloBar.TooltipFormat = "Silo Usage: {0}/{1}";
siloBar.GetBarColor = () =>
{
if (playerResources.Resources == playerResources.ResourceCapacity)
return Color.Red;
if (playerResources.Resources >= 0.8 * playerResources.ResourceCapacity)
return Color.Orange;
return Color.LimeGreen;
};
var powerBar = playerWidgets.Get<ResourceBarWidget>("POWERBAR");
powerBar.GetProvided = () => powerManager.PowerProvided;
powerBar.GetUsed = () => powerManager.PowerDrained;
powerBar.TooltipFormat = "Power Usage: {0}/{1}";
powerBar.GetBarColor = () =>
{
if (powerManager.PowerState == PowerState.Critical)
return Color.Red;
if (powerManager.PowerState == PowerState.Low)
return Color.Orange;
return Color.LimeGreen;
};
}
}
}

View File

@@ -106,7 +106,7 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
{
panelType = PanelType.Debug;
visibleButtons++;
var debugPanel = Game.LoadWidget(world, "CHEATS_PANEL", panelParent, new WidgetArgs() { { "onExit", doNothing } });
var debugPanel = Game.LoadWidget(world, "DEBUG_PANEL", panelParent, new WidgetArgs() { { "onExit", doNothing }, { "transient", true } });
debugPanel.IsVisible = () => panelType == PanelType.Debug;
debugButton.IsVisible = () => visibleButtons > 1;
}

View File

@@ -9,6 +9,7 @@
#endregion
using System;
using OpenRA.Mods.RA.Widgets;
using OpenRA.Widgets;
namespace OpenRA.Mods.Cnc.Widgets.Logic
@@ -54,6 +55,34 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
var typesContainer = Ui.Root.Get(tabs.TypesContainer);
foreach (var i in typesContainer.Children)
SetupProductionGroupButton(i as ProductionTypeButtonWidget);
var background = Ui.Root.GetOrNull(tabs.BackgroundContainer);
if (background != null)
{
var palette = tabs.Parent.Get<ProductionPaletteWidget>(tabs.PaletteWidget);
var icontemplate = background.Get("ICON_TEMPLATE");
Action<int, int> updateBackground = (oldCount, newCount) =>
{
background.RemoveChildren();
for (var i = 0; i < newCount; i++)
{
var x = i % palette.Columns;
var y = i / palette.Columns;
var bg = icontemplate.Clone();
bg.Bounds.X = palette.IconSize.X * x;
bg.Bounds.Y = palette.IconSize.Y * y;
background.AddChild(bg);
}
};
palette.OnIconCountChanged += updateBackground;
// Set the initial palette state
updateBackground(0, 0);
}
}
void UnregisterEvents()

View File

@@ -9,11 +9,12 @@
#endregion
using System.Linq;
using OpenRA.Mods.RA.Widgets;
using OpenRA.Mods.D2k.Widgets;
using OpenRA.Mods.RA;
using OpenRA.Traits;
using OpenRA.Widgets;
namespace OpenRA.Mods.RA
namespace OpenRA.Mods.D2k
{
class ChooseBuildTabOnSelectInfo : ITraitInfo
{

View File

@@ -77,6 +77,12 @@
<Compile Include="Render\WithDockingOverlay.cs" />
<Compile Include="Render\WithDeliveryOverlay.cs" />
<Compile Include="PaletteFromScaledPalette.cs" />
<Compile Include="Widgets\MoneyBinWidget.cs" />
<Compile Include="Widgets\SupportPowerBinWidget.cs" />
<Compile Include="Widgets\BuildPaletteWidget.cs" />
<Compile Include="Widgets\SlidingContainerWidget.cs" />
<Compile Include="Widgets\Logic\IngameChromeLogic.cs" />
<Compile Include="ChooseBuildTabOnSelect.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
@@ -112,4 +118,8 @@ cd "$(SolutionDir)"</PostBuildEvent>
</BootstrapperPackage>
</ItemGroup>
<ItemGroup />
<ItemGroup>
<Folder Include="Widgets\" />
<Folder Include="Widgets\Logic\" />
</ItemGroup>
</Project>

View File

@@ -13,15 +13,17 @@ using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using OpenRA.Graphics;
using OpenRA.Mods.RA;
using OpenRA.Mods.RA.Buildings;
using OpenRA.Mods.RA.Orders;
using OpenRA.Mods.RA.Render;
using OpenRA.Mods.RA.Widgets;
using OpenRA.Network;
using OpenRA.Primitives;
using OpenRA.Traits;
using OpenRA.Widgets;
namespace OpenRA.Mods.RA.Widgets
namespace OpenRA.Mods.D2k.Widgets
{
class BuildPaletteWidget : Widget
{

View File

@@ -10,11 +10,13 @@
using System.Drawing;
using System.Linq;
using OpenRA.Mods.RA;
using OpenRA.Mods.RA.Buildings;
using OpenRA.Mods.RA.Widgets;
using OpenRA.Traits;
using OpenRA.Widgets;
namespace OpenRA.Mods.RA.Widgets.Logic
namespace OpenRA.Mods.D2k.Widgets.Logic
{
public class IngameChromeLogic
{
@@ -42,6 +44,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic
Widget optionsBG = null;
optionsBG = Game.LoadWidget(world, "INGAME_OPTIONS_BG", Ui.Root, new WidgetArgs
{
{ "transient", false },
{ "onExit", () =>
{
optionsBG.Visible = false;
@@ -52,6 +55,8 @@ namespace OpenRA.Mods.RA.Widgets.Logic
}
});
optionsBG.Visible = false;
gameRoot.Get<ButtonWidget>("INGAME_OPTIONS_BUTTON").OnClick = () =>
{
optionsBG.Visible ^= true;
@@ -73,8 +78,16 @@ namespace OpenRA.Mods.RA.Widgets.Logic
{
var observerWidgets = Game.LoadWidget(world, "OBSERVER_WIDGETS", playerRoot, new WidgetArgs());
Game.LoadWidget(world, "OBSERVER_STATS", observerWidgets, new WidgetArgs());
observerWidgets.Get<ButtonWidget>("INGAME_STATS_BUTTON").OnClick = () => gameRoot.Get("OBSERVER_STATS").Visible ^= true;
Widget observerstats = null;
observerstats = Game.LoadWidget(world, "INGAME_OBSERVERSTATS_BG", observerWidgets, new WidgetArgs
{
{ "transient", false },
{ "onExit", () => observerstats.Visible = false }
});
observerstats.Visible = false;
var statsButton = observerWidgets.Get<ButtonWidget>("OBSERVER_STATS_BUTTON");
statsButton.OnClick = () => observerstats.Visible ^= true;
}
enum RadarBinState { Closed, BinAnimating, RadarAnimating, Open };
@@ -83,10 +96,13 @@ namespace OpenRA.Mods.RA.Widgets.Logic
var playerWidgets = Game.LoadWidget(world, "PLAYER_WIDGETS", playerRoot, new WidgetArgs());
Widget diplomacy = null;
diplomacy = Game.LoadWidget(world, "DIPLOMACY", playerWidgets, new WidgetArgs
diplomacy = Game.LoadWidget(world, "INGAME_DIPLOMACY_BG", playerWidgets, new WidgetArgs
{
{ "transient", false },
{ "onExit", () => diplomacy.Visible = false }
});
diplomacy.Visible = false;
var diplomacyButton = playerWidgets.Get<ButtonWidget>("INGAME_DIPLOMACY_BUTTON");
diplomacyButton.OnClick = () => diplomacy.Visible ^= true;
var validPlayers = 0;
@@ -94,11 +110,14 @@ namespace OpenRA.Mods.RA.Widgets.Logic
diplomacyButton.IsVisible = () => validPlayers > 0;
Widget cheats = null;
cheats = Game.LoadWidget(world, "CHEATS_PANEL", playerWidgets, new WidgetArgs
cheats = Game.LoadWidget(world, "INGAME_DEBUG_BG", playerWidgets, new WidgetArgs
{
{ "transient", false },
{ "onExit", () => cheats.Visible = false }
});
var cheatsButton = playerWidgets.Get<ButtonWidget>("CHEATS_BUTTON");
cheats.Visible = false;
var cheatsButton = playerWidgets.Get<ButtonWidget>("INGAME_DEBUG_BUTTON");
cheatsButton.OnClick = () => cheats.Visible ^= true;
cheatsButton.IsVisible = () => world.LobbyInfo.GlobalSettings.AllowCheats;

View File

@@ -13,7 +13,7 @@ using OpenRA.Graphics;
using OpenRA.Traits;
using OpenRA.Widgets;
namespace OpenRA.Mods.RA.Widgets
namespace OpenRA.Mods.D2k.Widgets
{
class MoneyBinWidget : Widget
{

View File

@@ -12,7 +12,7 @@ using System;
using System.Drawing;
using OpenRA.Widgets;
namespace OpenRA.Mods.RA.Widgets
namespace OpenRA.Mods.D2k.Widgets
{
public class SlidingContainerWidget : Widget
{

View File

@@ -13,10 +13,11 @@ using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using OpenRA.Graphics;
using OpenRA.Mods.RA;
using OpenRA.Primitives;
using OpenRA.Widgets;
namespace OpenRA.Mods.RA.Widgets
namespace OpenRA.Mods.D2k.Widgets
{
class SupportPowerBinWidget : Widget
{

View File

@@ -367,7 +367,6 @@
<Compile Include="Turreted.cs" />
<Compile Include="Valued.cs" />
<Compile Include="WaterPaletteRotation.cs" />
<Compile Include="Widgets\BuildPaletteWidget.cs" />
<Compile Include="Widgets\LogicTickerWidget.cs" />
<Compile Include="Widgets\Logic\KickSpectatorsLogic.cs" />
<Compile Include="Widgets\Logic\MissionBrowserLogic.cs" />
@@ -381,7 +380,6 @@
<Compile Include="Widgets\Logic\DirectConnectLogic.cs" />
<Compile Include="Widgets\Logic\DownloadPackagesLogic.cs" />
<Compile Include="Widgets\Logic\IngameChatLogic.cs" />
<Compile Include="Widgets\Logic\IngameChromeLogic.cs" />
<Compile Include="Widgets\Logic\LobbyLogic.cs" />
<Compile Include="Widgets\Logic\LobbyUtils.cs" />
<Compile Include="Widgets\Logic\MainMenuLogic.cs" />
@@ -393,15 +391,12 @@
<Compile Include="Widgets\Logic\ReplayBrowserLogic.cs" />
<Compile Include="Widgets\Logic\ServerBrowserLogic.cs" />
<Compile Include="Widgets\Logic\ServerCreationLogic.cs" />
<Compile Include="Widgets\MoneyBinWidget.cs" />
<Compile Include="Widgets\ObserverProductionIconsWidget.cs" />
<Compile Include="Widgets\ObserverSupportPowerIconsWidget.cs" />
<Compile Include="Widgets\RadarWidget.cs" />
<Compile Include="Widgets\StrategicProgressWidget.cs" />
<Compile Include="Widgets\SupportPowerTimerWidget.cs" />
<Compile Include="Widgets\SupportPowerBinWidget.cs" />
<Compile Include="Widgets\WorldCommandWidget.cs" />
<Compile Include="World\ChooseBuildTabOnSelect.cs" />
<Compile Include="World\ResourceClaim.cs" />
<Compile Include="World\ResourceClaimLayer.cs" />
<Compile Include="World\PlayMusicOnMapLoad.cs" />
@@ -411,7 +406,6 @@
<Compile Include="InfiltrateForExploration.cs" />
<Compile Include="InfiltrateForCash.cs" />
<Compile Include="RenderShroudCircle.cs" />
<Compile Include="Widgets\Logic\CheatsLogic.cs" />
<Compile Include="CloakPaletteEffect.cs" />
<Compile Include="Widgets\ColorPreviewManagerWidget.cs" />
<Compile Include="Infiltrates.cs" />
@@ -437,7 +431,6 @@
<Compile Include="Widgets\Logic\CreditsLogic.cs" />
<Compile Include="Render\WithResources.cs" />
<Compile Include="Render\WithHarvestAnimation.cs" />
<Compile Include="Widgets\SlidingContainerWidget.cs" />
<Compile Include="Widgets\ResourceBarWidget.cs" />
<Compile Include="Widgets\Logic\SimpleTooltipLogic.cs" />
<Compile Include="World\DomainIndex.cs" />
@@ -531,6 +524,25 @@
<Compile Include="Buildings\ClonesProducedUnits.cs" />
<Compile Include="Cloneable.cs" />
<Compile Include="Graphics\RangeCircleRenderable.cs" />
<Compile Include="Widgets\ProductionPaletteWidget.cs" />
<Compile Include="Widgets\ProductionTabsWidget.cs" />
<Compile Include="Widgets\ProductionTypeButtonWidget.cs" />
<Compile Include="Widgets\Logic\ProductionTooltipLogic.cs" />
<Compile Include="Widgets\Logic\Ingame\IngameRadarDisplayLogic.cs" />
<Compile Include="Widgets\Logic\Ingame\IngameCashCounterLogic.cs" />
<Compile Include="Widgets\Logic\Ingame\IngamePowerCounterLogic.cs" />
<Compile Include="Widgets\Logic\Ingame\IngamePowerBarLogic.cs" />
<Compile Include="Widgets\Logic\Ingame\IngameSiloBarLogic.cs" />
<Compile Include="Widgets\Logic\Ingame\AddRaceSuffixLogic.cs" />
<Compile Include="Widgets\Logic\ClassicProductionLogic.cs" />
<Compile Include="Widgets\SupportPowersWidget.cs" />
<Compile Include="Widgets\Logic\SupportPowerTooltipLogic.cs" />
<Compile Include="Widgets\Logic\SupportPowerBinLogic.cs" />
<Compile Include="Widgets\Logic\Ingame\LoadIngamePlayerOrObserverUILogic.cs" />
<Compile Include="Widgets\MenuButtonWidget.cs" />
<Compile Include="Widgets\Logic\DebugMenuLogic.cs" />
<Compile Include="Widgets\LabelWithTooltipWidget.cs" />
<Compile Include="ProductionQueueFromSelection.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\OpenRA.Game\OpenRA.Game.csproj">
@@ -575,4 +587,7 @@ cd "$(SolutionDir)thirdparty/"
copy "FuzzyLogicLibrary.dll" "$(SolutionDir)"
cd "$(SolutionDir)"</PostBuildEvent>
</PropertyGroup>
<ItemGroup>
<Folder Include="Widgets\Logic\Ingame\" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,73 @@
#region Copyright & License Information
/*
* Copyright 2007-2011 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;
using System.Linq;
using OpenRA.Mods.RA.Widgets;
using OpenRA.Traits;
using OpenRA.Widgets;
namespace OpenRA.Mods.RA
{
class ProductionQueueFromSelectionInfo : ITraitInfo
{
public string ProductionTabsWidget = null;
public string ProductionPaletteWidget = null;
public object Create(ActorInitializer init) { return new ProductionQueueFromSelection(init.world, this); }
}
class ProductionQueueFromSelection : INotifySelection
{
readonly World world;
readonly Lazy<ProductionTabsWidget> tabsWidget;
readonly Lazy<ProductionPaletteWidget> paletteWidget;
public ProductionQueueFromSelection(World world, ProductionQueueFromSelectionInfo info)
{
this.world = world;
tabsWidget = Exts.Lazy(() => Ui.Root.GetOrNull(info.ProductionTabsWidget) as ProductionTabsWidget);
paletteWidget = Exts.Lazy(() => Ui.Root.GetOrNull(info.ProductionPaletteWidget) as ProductionPaletteWidget);
}
public void SelectionChanged()
{
// Disable for spectators
if (world.LocalPlayer == null)
return;
// Queue-per-actor
var queue = world.Selection.Actors
.Where(a => a.IsInWorld && a.World.LocalPlayer == a.Owner)
.SelectMany(a => a.TraitsImplementing<ProductionQueue>())
.FirstOrDefault(q => q.Enabled);
// Queue-per-player
if (queue == null)
{
var types = world.Selection.Actors.Where(a => a.IsInWorld && a.World.LocalPlayer == a.Owner)
.SelectMany(a => a.TraitsImplementing<Production>())
.SelectMany(t => t.Info.Produces);
queue = world.LocalPlayer.PlayerActor.TraitsImplementing<ProductionQueue>()
.FirstOrDefault(q => q.Enabled && types.Contains(q.Info.Type));
}
if (queue == null)
return;
if (tabsWidget.Value != null)
tabsWidget.Value.CurrentQueue = queue;
else if (paletteWidget.Value != null)
paletteWidget.Value.CurrentQueue = queue;
}
}
}

View File

@@ -0,0 +1,62 @@
#region Copyright & License Information
/*
* Copyright 2007-2014 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;
using OpenRA.Widgets;
namespace OpenRA.Mods.RA.Widgets
{
public class LabelWithTooltipWidget : LabelWidget
{
public readonly string TooltipTemplate;
public readonly string TooltipContainer;
Lazy<TooltipContainerWidget> tooltipContainer;
public Func<string> GetTooltipText = () => "";
[ObjectCreator.UseCtor]
public LabelWithTooltipWidget(World world)
: base()
{
tooltipContainer = Exts.Lazy(() =>
Ui.Root.Get<TooltipContainerWidget>(TooltipContainer));
}
protected LabelWithTooltipWidget(LabelWithTooltipWidget other)
: base(other)
{
TooltipTemplate = other.TooltipTemplate;
TooltipContainer = other.TooltipContainer;
tooltipContainer = Exts.Lazy(() =>
Ui.Root.Get<TooltipContainerWidget>(TooltipContainer));
GetTooltipText = other.GetTooltipText;
}
public override Widget Clone() { return new LabelWithTooltipWidget(this); }
public override void MouseEntered()
{
if (TooltipContainer == null)
return;
tooltipContainer.Value.SetTooltip(TooltipTemplate, new WidgetArgs() {{ "getText", GetTooltipText }});
}
public override void MouseExited()
{
if (TooltipContainer == null)
return;
tooltipContainer.Value.RemoveTooltip();
}
}
}

View File

@@ -18,19 +18,24 @@ namespace OpenRA.Mods.RA.Widgets.Logic
public ButtonTooltipLogic(Widget widget, ButtonWidget button)
{
var label = widget.Get<LabelWidget>("LABEL");
var hotkey = widget.Get<LabelWidget>("HOTKEY");
var font = Game.Renderer.Fonts[label.Font];
var labelWidth = font.Measure(button.TooltipText).X;
label.GetText = () => button.TooltipText;
var labelWidth = Game.Renderer.Fonts[label.Font].Measure(button.TooltipText).X;
label.Bounds.Width = labelWidth;
widget.Bounds.Width = 2 * label.Bounds.X + labelWidth;
var hotkeyLabel = "({0})".F(button.Key.DisplayString());
hotkey.GetText = () => hotkeyLabel;
hotkey.Bounds.X = labelWidth + 2 * label.Bounds.X;
if (button.Key.IsValid())
{
var hotkey = widget.Get<LabelWidget>("HOTKEY");
hotkey.Visible = true;
var panelWidth = hotkey.Bounds.X + label.Bounds.X
+ Game.Renderer.Fonts[label.Font].Measure(hotkeyLabel).X;
widget.Bounds.Width = panelWidth;
var hotkeyLabel = "({0})".F(button.Key.DisplayString());
hotkey.GetText = () => hotkeyLabel;
hotkey.Bounds.X = labelWidth + 2 * label.Bounds.X;
widget.Bounds.Width = hotkey.Bounds.X + label.Bounds.X + font.Measure(hotkeyLabel).X;
}
}
}
}

View File

@@ -0,0 +1,141 @@
#region Copyright & License Information
/*
* Copyright 2007-2014 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;
using System.Linq;
using OpenRA.Mods.RA.Widgets;
using OpenRA.Network;
using OpenRA.Widgets;
namespace OpenRA.Mods.RA.Widgets.Logic
{
public class ClassicProductionLogic
{
readonly ProductionPaletteWidget palette;
readonly World world;
void SetupProductionGroupButton(OrderManager orderManager, ProductionTypeButtonWidget button)
{
if (button == null)
return;
// Classic production queues are initialized at game start, and then never change.
var queues = world.LocalPlayer.PlayerActor.TraitsImplementing<ProductionQueue>()
.Where(q => q.Info.Type == button.ProductionGroup)
.ToArray();
Action<bool> selectTab = reverse =>
{
palette.CurrentQueue = queues.FirstOrDefault(q => q.Enabled);
};
button.IsDisabled = () => !queues.Any(q => q.BuildableItems().Any());
button.OnMouseUp = mi => selectTab(mi.Modifiers.HasModifier(Modifiers.Shift));
button.OnKeyPress = e => selectTab(e.Modifiers.HasModifier(Modifiers.Shift));
button.OnClick = () => selectTab(false);
button.IsHighlighted = () => queues.Contains(palette.CurrentQueue);
var chromeName = button.ProductionGroup.ToLowerInvariant();
var icon = button.Get<ImageWidget>("ICON");
icon.GetImageName = () => button.IsDisabled() ? chromeName + "-disabled" :
queues.Any(q => q.CurrentDone) ? chromeName + "-alert" : chromeName;
}
[ObjectCreator.UseCtor]
public ClassicProductionLogic(Widget widget, OrderManager orderManager, World world)
{
this.world = world;
palette = widget.Get<ProductionPaletteWidget>("PRODUCTION_PALETTE");
var background = widget.GetOrNull("PALETTE_BACKGROUND");
var foreground = widget.GetOrNull("PALETTE_FOREGROUND");
if (background != null || foreground != null)
{
Widget backgroundTemplate = null;
Widget backgroundBottom = null;
Widget foregroundTemplate = null;
if (background != null)
{
backgroundTemplate = background.Get("ROW_TEMPLATE");
backgroundBottom = background.GetOrNull("BOTTOM_CAP");
}
if (foreground != null)
foregroundTemplate = foreground.Get("ROW_TEMPLATE");
Action<int, int> updateBackground = (_, icons) =>
{
// Minimum of four rows to make space for the production buttons.
var rows = Math.Max(4, (icons + palette.Columns - 1) / palette.Columns);
if (background != null)
{
background.RemoveChildren();
var rowHeight = backgroundTemplate.Bounds.Height;
for (var i = 0; i < rows; i++)
{
var row = backgroundTemplate.Clone();
row.Bounds.Y = i * rowHeight;
background.AddChild(row);
}
if (backgroundBottom == null)
return;
backgroundBottom.Bounds.Y = rows * rowHeight;
background.AddChild(backgroundBottom);
}
if (foreground != null)
{
foreground.RemoveChildren();
var rowHeight = foregroundTemplate.Bounds.Height;
for (var i = 0; i < rows; i++)
{
var row = foregroundTemplate.Clone();
row.Bounds.Y = i * rowHeight;
foreground.AddChild(row);
}
}
};
palette.OnIconCountChanged += updateBackground;
// Set the initial palette state
updateBackground(0, 0);
}
var typesContainer = widget.Get("PRODUCTION_TYPES");
foreach (var i in typesContainer.Children)
SetupProductionGroupButton(orderManager, i as ProductionTypeButtonWidget);
var ticker = widget.Get<LogicTickerWidget>("PRODUCTION_TICKER");
ticker.OnTick = () =>
{
if (palette.CurrentQueue == null || palette.IconCount == 0)
{
// Select the first active tab
foreach (var b in typesContainer.Children)
{
var button = b as ProductionTypeButtonWidget;
if (button == null || button.IsDisabled())
continue;
button.OnClick();
break;
}
}
};
}
}
}

View File

@@ -15,12 +15,10 @@ using OpenRA.Widgets;
namespace OpenRA.Mods.RA.Widgets.Logic
{
public class CheatsLogic
public class DebugMenuLogic
{
public static MersenneTwister CosmeticRandom = new MersenneTwister();
[ObjectCreator.UseCtor]
public CheatsLogic(Widget widget, Action onExit, World world)
public DebugMenuLogic(Widget widget, Action onExit, World world, bool transient)
{
var devTrait = world.LocalPlayer.PlayerActor.Trait<DeveloperMode>();
@@ -117,7 +115,18 @@ namespace OpenRA.Mods.RA.Widgets.Logic
var close = widget.GetOrNull<ButtonWidget>("CLOSE");
if (close != null)
close.OnClick = () => { Ui.CloseWindow(); onExit(); };
{
close.OnClick = () =>
{
if (transient)
{
Ui.CloseWindow();
Ui.Root.RemoveChild(widget);
}
onExit();
};
}
}
public void Order(World world, string order)

View File

@@ -23,13 +23,28 @@ namespace OpenRA.Mods.RA.Widgets.Logic
ScrollPanelWidget diplomacyPanel;
[ObjectCreator.UseCtor]
public DiplomacyLogic(Widget widget, Action onExit, World world)
public DiplomacyLogic(Widget widget, Action onExit, World world, bool transient)
{
this.world = world;
diplomacyPanel = widget.Get<ScrollPanelWidget>("DIPLOMACY_PANEL");
LayoutPlayers();
var close = widget.GetOrNull<ButtonWidget>("CLOSE");
if (close != null)
{
close.OnClick = () =>
{
if (transient)
{
Ui.CloseWindow();
Ui.Root.RemoveChild(widget);
}
onExit();
};
}
}
void LayoutPlayers()

View File

@@ -8,6 +8,7 @@
*/
#endregion
using System;
using OpenRA.Network;
using OpenRA.Widgets;
@@ -19,27 +20,39 @@ namespace OpenRA.Mods.RA.Widgets.Logic
public GameTimerLogic(Widget widget, OrderManager orderManager, World world)
{
var timer = widget.GetOrNull<LabelWidget>("GAME_TIMER");
if (timer != null)
timer.GetText = () => WidgetUtils.FormatTime(world.WorldTick);
var status = widget.GetOrNull<LabelWidget>("GAME_TIMER_STATUS");
var startTick = Ui.LastTickTime;
Func<bool> shouldShowStatus = () => (world.Paused || world.Timestep != Game.Timestep)
&& (Ui.LastTickTime - startTick) / 1000 % 2 == 0;
Func<string> statusText = () =>
{
if (world.Paused || world.Timestep == 0)
return "Paused";
if (world.Timestep == 1)
return "Max Speed";
return "{0:F1}x Speed".F(Game.Timestep * 1f / world.Timestep);
};
if (timer != null)
{
timer.GetText = () =>
{
if (status == null && shouldShowStatus())
return statusText();
return WidgetUtils.FormatTime(world.WorldTick);
};
}
if (status != null)
{
var startTick = Ui.LastTickTime;
// Blink the status line
status.IsVisible = () => (world.Paused || world.Timestep != Game.Timestep)
&& (Ui.LastTickTime - startTick) / 1000 % 2 == 0;
status.GetText = () =>
{
if (world.Paused || world.Timestep == 0)
return "Paused";
if (world.Timestep == 1)
return "Max Speed";
return "{0:F1}x Speed".F(Game.Timestep * 1f / world.Timestep);
};
status.IsVisible = shouldShowStatus;
status.GetText = statusText;
}
}
}

View File

@@ -0,0 +1,30 @@
#region Copyright & License Information
/*
* Copyright 2007-2014 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;
using OpenRA.Widgets;
namespace OpenRA.Mods.RA.Widgets.Logic
{
public class AddRaceSuffixLogic
{
[ObjectCreator.UseCtor]
public AddRaceSuffixLogic(Widget widget, World world)
{
var suffix = "-" + world.LocalPlayer.Country.Race;
if (widget is ButtonWidget)
((ButtonWidget)widget).Background += suffix;
else if (widget is ImageWidget)
((ImageWidget)widget).ImageCollection += suffix;
else
throw new InvalidOperationException("AddRaceSuffixLogic only supports ButtonWidget and ImageWidget");
}
}
}

View File

@@ -0,0 +1,29 @@
#region Copyright & License Information
/*
* Copyright 2007-2014 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.Traits;
using OpenRA.Widgets;
namespace OpenRA.Mods.RA.Widgets.Logic
{
public class IngameCashCounterLogic
{
[ObjectCreator.UseCtor]
public IngameCashCounterLogic(Widget widget, World world)
{
var playerResources = world.LocalPlayer.PlayerActor.Trait<PlayerResources>();
var cash = widget.Get<LabelWithTooltipWidget>("CASH");
var label = cash.Text;
cash.GetText = () => label.F(playerResources.DisplayCash + playerResources.DisplayResources);
cash.GetTooltipText = () => "Silo Usage: {0}/{1}".F(playerResources.Resources, playerResources.ResourceCapacity);
}
}
}

View File

@@ -0,0 +1,38 @@
#region Copyright & License Information
/*
* Copyright 2007-2014 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.Mods.RA.Buildings;
using OpenRA.Widgets;
namespace OpenRA.Mods.RA.Widgets.Logic
{
public class IngamePowerBarLogic
{
[ObjectCreator.UseCtor]
public IngamePowerBarLogic(Widget widget, World world)
{
var powerManager = world.LocalPlayer.PlayerActor.Trait<PowerManager>();
var powerBar = widget.Get<ResourceBarWidget>("POWERBAR");
powerBar.GetProvided = () => powerManager.PowerProvided;
powerBar.GetUsed = () => powerManager.PowerDrained;
powerBar.TooltipFormat = "Power Usage: {0}/{1}";
powerBar.GetBarColor = () =>
{
if (powerManager.PowerState == PowerState.Critical)
return Color.Red;
if (powerManager.PowerState == PowerState.Low)
return Color.Orange;
return Color.LimeGreen;
};
}
}
}

View File

@@ -0,0 +1,28 @@
#region Copyright & License Information
/*
* Copyright 2007-2014 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.Mods.RA.Buildings;
using OpenRA.Widgets;
namespace OpenRA.Mods.RA.Widgets.Logic
{
public class IngamePowerCounterLogic
{
[ObjectCreator.UseCtor]
public IngamePowerCounterLogic(Widget widget, World world)
{
var powerManager = world.LocalPlayer.PlayerActor.Trait<PowerManager>();
var power = widget.Get<LabelWithTooltipWidget>("POWER");
power.GetText = () => powerManager.PowerProvided == 1000000 ? "inf" : powerManager.ExcessPower.ToString();
power.GetTooltipText = () => "Power Usage: " + powerManager.PowerDrained.ToString() + (powerManager.PowerProvided != 1000000 ? "/" + powerManager.PowerProvided.ToString() : "");
}
}
}

View File

@@ -0,0 +1,49 @@
#region Copyright & License Information
/*
* Copyright 2007-2014 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 System.Linq;
using OpenRA.Mods.RA.Widgets;
using OpenRA.Widgets;
namespace OpenRA.Mods.RA.Widgets.Logic
{
public class IngameRadarDisplayLogic
{
[ObjectCreator.UseCtor]
public IngameRadarDisplayLogic(Widget widget, World world)
{
var radarEnabled = false;
var cachedRadarEnabled = false;
var blockColor = Color.Transparent;
var radar = widget.Get<RadarWidget>("RADAR_MINIMAP");
radar.IsEnabled = () => radarEnabled;
var ticker = widget.Get<LogicTickerWidget>("RADAR_TICKER");
ticker.OnTick = () =>
{
radarEnabled = world.ActorsWithTrait<ProvidesRadar>()
.Any(a => a.Actor.Owner == world.LocalPlayer && a.Trait.IsActive);
if (radarEnabled != cachedRadarEnabled)
Sound.PlayNotification(world.Map.Rules, null, "Sounds", radarEnabled ? "RadarUp" : "RadarDown", null);
cachedRadarEnabled = radarEnabled;
};
var block = widget.GetOrNull<ColorBlockWidget>("RADAR_FADETOBLACK");
if (block != null)
{
radar.Animating = x => blockColor = Color.FromArgb((int)(255 * x), Color.Black);
block.IsVisible = () => blockColor.A != 0;
block.GetColor = () => blockColor;
}
}
}
}

View File

@@ -0,0 +1,40 @@
#region Copyright & License Information
/*
* Copyright 2007-2014 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.Traits;
using OpenRA.Widgets;
namespace OpenRA.Mods.RA.Widgets.Logic
{
public class IngameSiloBarLogic
{
[ObjectCreator.UseCtor]
public IngameSiloBarLogic(Widget widget, World world)
{
var playerResources = world.LocalPlayer.PlayerActor.Trait<PlayerResources>();
var siloBar = widget.Get<ResourceBarWidget>("SILOBAR");
siloBar.GetProvided = () => playerResources.ResourceCapacity;
siloBar.GetUsed = () => playerResources.Resources;
siloBar.TooltipFormat = "Silo Usage: {0}/{1}";
siloBar.GetBarColor = () =>
{
if (playerResources.Resources == playerResources.ResourceCapacity)
return Color.Red;
if (playerResources.Resources >= 0.8 * playerResources.ResourceCapacity)
return Color.Orange;
return Color.LimeGreen;
};
}
}
}

View File

@@ -0,0 +1,31 @@
#region Copyright & License Information
/*
* Copyright 2007-2014 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.Widgets;
namespace OpenRA.Mods.RA.Widgets.Logic
{
public class LoadIngamePlayerOrObserverUILogic
{
[ObjectCreator.UseCtor]
public LoadIngamePlayerOrObserverUILogic(Widget widget, World world)
{
var ingameRoot = widget.Get("INGAME_ROOT");
var playerRoot = ingameRoot.Get("PLAYER_ROOT");
if (world.LocalPlayer == null)
Game.LoadWidget(world, "OBSERVER_WIDGETS", playerRoot, new WidgetArgs());
else
Game.LoadWidget(world, "PLAYER_WIDGETS", playerRoot, new WidgetArgs());
Game.LoadWidget(world, "CHAT_PANEL", ingameRoot, new WidgetArgs());
}
}
}

View File

@@ -17,7 +17,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic
class IngameMenuLogic
{
[ObjectCreator.UseCtor]
public IngameMenuLogic(Widget widget, World world, Action onExit, WorldRenderer worldRenderer)
public IngameMenuLogic(Widget widget, World world, Action onExit, WorldRenderer worldRenderer, bool transient)
{
var resumeDisabled = false;
var mpe = world.WorldActor.TraitOrDefault<MenuPaletteEffect>();
@@ -71,8 +71,17 @@ namespace OpenRA.Mods.RA.Widgets.Logic
};
var resumeButton = widget.Get<ButtonWidget>("RESUME");
resumeButton.OnClick = () => onExit();
resumeButton.IsDisabled = () => resumeDisabled;
resumeButton.OnClick = () =>
{
if (transient)
{
Ui.CloseWindow();
Ui.Root.RemoveChild(widget);
}
onExit();
};
widget.Get<ButtonWidget>("SURRENDER").OnClick = () =>
{

View File

@@ -40,7 +40,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic
WorldRenderer worldRenderer;
[ObjectCreator.UseCtor]
public ObserverStatsLogic(World world, WorldRenderer worldRenderer, Widget widget)
public ObserverStatsLogic(World world, WorldRenderer worldRenderer, Widget widget, Action onExit, bool transient)
{
this.world = world;
this.worldRenderer = worldRenderer;
@@ -136,6 +136,21 @@ namespace OpenRA.Mods.RA.Widgets.Logic
ClearStats();
DisplayStats(BasicStats);
var close = widget.GetOrNull<ButtonWidget>("CLOSE");
if (close != null)
{
close.OnClick = () =>
{
if (transient)
{
Ui.CloseWindow();
Ui.Root.RemoveChild(widget);
}
onExit();
};
}
}
void ClearStats()

View File

@@ -8,6 +8,7 @@
*/
#endregion
using System.Linq;
using OpenRA.Mods.RA.Orders;
using OpenRA.Widgets;
@@ -15,9 +16,17 @@ namespace OpenRA.Mods.RA.Widgets.Logic
{
public class OrderButtonsChromeLogic
{
readonly World world;
readonly Widget ingameRoot;
bool disableSystemButtons;
[ObjectCreator.UseCtor]
public OrderButtonsChromeLogic(Widget widget, World world)
{
this.world = world;
ingameRoot = Ui.Root.Get("INGAME_ROOT");
// Order Buttons
var sell = widget.GetOrNull<ButtonWidget>("SELL_BUTTON");
if (sell != null)
{
@@ -45,6 +54,65 @@ namespace OpenRA.Mods.RA.Widgets.Logic
power.GetKey = _ => Game.Settings.Keys.PowerDownKey;
BindOrderButton<PowerDownOrderGenerator>(world, power, "power");
}
// System buttons
var options = widget.GetOrNull<MenuButtonWidget>("OPTIONS_BUTTON");
if (options != null)
{
options.IsDisabled = () => disableSystemButtons;
options.OnClick = () => OpenMenuPanel(options);
}
var diplomacy = widget.GetOrNull<MenuButtonWidget>("DIPLOMACY_BUTTON");
if (diplomacy != null)
{
diplomacy.Visible = world.Players.Any(a => a != world.LocalPlayer && !a.NonCombatant);
diplomacy.IsDisabled = () => disableSystemButtons;
diplomacy.OnClick = () => OpenMenuPanel(diplomacy);
}
var debug = widget.GetOrNull<MenuButtonWidget>("DEBUG_BUTTON");
if (debug != null)
{
debug.IsVisible = () => world.LobbyInfo.GlobalSettings.AllowCheats;
debug.IsDisabled = () => disableSystemButtons;
debug.OnClick = () => OpenMenuPanel(debug);
}
var stats = widget.GetOrNull<MenuButtonWidget>("OBSERVER_STATS_BUTTON");
if (stats != null)
{
stats.IsDisabled = () => disableSystemButtons;
stats.OnClick = () => OpenMenuPanel(stats);
}
}
void OpenMenuPanel(MenuButtonWidget button)
{
disableSystemButtons = true;
var cachedPause = world.PredictedPaused;
if (button.HideIngameUI)
ingameRoot.IsVisible = () => false;
if (button.Pause && world.LobbyInfo.IsSinglePlayer)
world.SetPauseState(true);
Game.LoadWidget(world, button.MenuContainer, Ui.Root, new WidgetArgs()
{
{ "transient", true },
{ "onExit", () =>
{
if (button.HideIngameUI)
ingameRoot.IsVisible = () => true;
if (button.Pause && world.LobbyInfo.IsSinglePlayer)
world.SetPauseState(cachedPause);
disableSystemButtons = false;
}
}
});
}
static void BindOrderButton<T>(World world, ButtonWidget w, string icon)

View File

@@ -16,7 +16,7 @@ using OpenRA.Mods.RA.Buildings;
using OpenRA.Traits;
using OpenRA.Widgets;
namespace OpenRA.Mods.Cnc.Widgets.Logic
namespace OpenRA.Mods.RA.Widgets.Logic
{
public class ProductionTooltipLogic
{
@@ -29,12 +29,18 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
widget.IsVisible = () => palette.TooltipActor != null;
var nameLabel = widget.Get<LabelWidget>("NAME");
var hotkeyLabel = widget.Get<LabelWidget>("HOTKEY");
var requiresLabel = widget.Get<LabelWidget>("REQUIRES");
var powerLabel = widget.Get<LabelWidget>("POWER");
var powerIcon = widget.Get<ImageWidget>("POWER_ICON");
var timeLabel = widget.Get<LabelWidget>("TIME");
var timeIcon = widget.Get<ImageWidget>("TIME_ICON");
var costLabel = widget.Get<LabelWidget>("COST");
var costIcon = widget.Get<ImageWidget>("COST_ICON");
var descLabel = widget.Get<LabelWidget>("DESC");
var iconMargin = timeIcon.Bounds.X;
var font = Game.Renderer.Fonts[nameLabel.Font];
var descFont = Game.Renderer.Fonts[descLabel.Font];
var requiresFont = Game.Renderer.Fonts[requiresLabel.Font];
@@ -54,25 +60,34 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
nameLabel.GetText = () => tooltip.Name;
var nameWidth = font.Measure(tooltip.Name).X;
var hotkeyText = "({0})".F(buildable.Hotkey.DisplayString());
var hotkeyWidth = buildable.Hotkey.IsValid() ? font.Measure(hotkeyText).X + 2 * nameLabel.Bounds.X : 0;
hotkeyLabel.GetText = () => hotkeyText;
hotkeyLabel.Bounds.X = nameWidth + 2 * nameLabel.Bounds.X;
hotkeyLabel.Visible = buildable.Hotkey.IsValid();
var prereqs = buildable.Prerequisites.Select(a => ActorName(mapRules, a)).Where(s => !s.StartsWith("~"));
var requiresString = prereqs.Any() ? requiresLabel.Text.F(prereqs.JoinWith(", ")) : "";
requiresLabel.GetText = () => requiresString;
var power = bi != null ? bi.Power : 0;
var powerString = "P: {0}".F(power);
var powerString = power.ToString();
powerLabel.GetText = () => powerString;
powerLabel.GetColor = () => ((pm.PowerProvided - pm.PowerDrained) >= -power || power > 0)
? Color.White : Color.Red;
powerLabel.IsVisible = () => power != 0;
powerIcon.IsVisible = () => power != 0;
var lowpower = pm.PowerState != PowerState.Normal;
var time = palette.CurrentQueue == null ? 0 : palette.CurrentQueue.GetBuildTime(actor)
* (lowpower ? palette.CurrentQueue.Info.LowPowerSlowdown : 1);
var timeString = "T: {0}".F(WidgetUtils.FormatTime(time));
var timeString = WidgetUtils.FormatTime(time);
timeLabel.GetText = () => timeString;
timeLabel.GetColor = () => lowpower ? Color.Red : Color.White;
var costString = "$: {0}".F(cost);
var costString = cost.ToString();
costLabel.GetText = () => costString;
costLabel.GetColor = () => pr.DisplayCash + pr.DisplayResources >= cost
? Color.White : Color.Red;
@@ -80,10 +95,12 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
var descString = tooltip.Description.Replace("\\n", "\n");
descLabel.GetText = () => descString;
var leftWidth = new[] { font.Measure(tooltip.Name).X, requiresFont.Measure(requiresString).X, descFont.Measure(descString).X }.Aggregate(Math.Max);
var leftWidth = new[] { nameWidth + hotkeyWidth, requiresFont.Measure(requiresString).X, descFont.Measure(descString).X }.Aggregate(Math.Max);
var rightWidth = new[] { font.Measure(powerString).X, font.Measure(timeString).X, font.Measure(costString).X }.Aggregate(Math.Max);
timeLabel.Bounds.X = powerLabel.Bounds.X = costLabel.Bounds.X = leftWidth + 2 * nameLabel.Bounds.X;
widget.Bounds.Width = leftWidth + rightWidth + 3 * nameLabel.Bounds.X;
timeIcon.Bounds.X = powerIcon.Bounds.X = costIcon.Bounds.X = leftWidth + 2 * nameLabel.Bounds.X;
timeLabel.Bounds.X = powerLabel.Bounds.X = costLabel.Bounds.X = timeIcon.Bounds.Right + iconMargin;
widget.Bounds.Width = leftWidth + rightWidth + 3 * nameLabel.Bounds.X + timeIcon.Bounds.Width + iconMargin;
var leftHeight = font.Measure(tooltip.Name).Y + requiresFont.Measure(requiresString).Y + descFont.Measure(descString).Y;
var rightHeight = font.Measure(powerString).Y + font.Measure(timeString).Y + font.Measure(costString).Y;

View File

@@ -0,0 +1,72 @@
#region Copyright & License Information
/*
* Copyright 2007-2014 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;
using OpenRA.Widgets;
namespace OpenRA.Mods.RA.Widgets.Logic
{
public class SupportPowerBinLogic
{
[ObjectCreator.UseCtor]
public SupportPowerBinLogic(Widget widget, World world)
{
var palette = widget.Get<SupportPowersWidget>("SUPPORT_PALETTE");
var background = widget.GetOrNull("PALETTE_BACKGROUND");
var foreground = widget.GetOrNull("PALETTE_FOREGROUND");
if (background != null || foreground != null)
{
Widget backgroundTemplate = null;
Widget foregroundTemplate = null;
if (background != null)
backgroundTemplate = background.Get("ICON_TEMPLATE");
if (foreground != null)
foregroundTemplate = foreground.Get("ICON_TEMPLATE");
Action<int, int> updateBackground = (_, icons) =>
{
var rowHeight = palette.IconSize.Y + palette.IconMargin;
if (background != null)
{
background.RemoveChildren();
for (var i = 0; i < icons; i++)
{
var row = backgroundTemplate.Clone();
row.Bounds.Y += i * rowHeight;
background.AddChild(row);
}
}
if (foreground != null)
{
foreground.RemoveChildren();
for (var i = 0; i < icons; i++)
{
var row = foregroundTemplate.Clone();
row.Bounds.Y += i * rowHeight;
foreground.AddChild(row);
}
}
};
palette.OnIconCountChanged += updateBackground;
// Set the initial palette state
updateBackground(0, 0);
}
}
}
}

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2011 The OpenRA Developers (see AUTHORS)
* Copyright 2007-2014 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,
@@ -12,7 +12,7 @@ using System;
using OpenRA.Mods.RA;
using OpenRA.Widgets;
namespace OpenRA.Mods.Cnc.Widgets.Logic
namespace OpenRA.Mods.RA.Widgets.Logic
{
public class SupportPowerTooltipLogic
{

View File

@@ -0,0 +1,33 @@
#region Copyright & License Information
/*
* Copyright 2007-2014 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.Widgets;
namespace OpenRA.Mods.RA.Widgets
{
public class MenuButtonWidget : ButtonWidget
{
public readonly string MenuContainer = "INGAME_MENU";
public readonly bool Pause = true;
public readonly bool HideIngameUI = true;
[ObjectCreator.UseCtor]
public MenuButtonWidget(Ruleset modRules)
: base(modRules) { }
protected MenuButtonWidget(MenuButtonWidget other)
: base(other)
{
MenuContainer = other.MenuContainer;
Pause = other.Pause;
HideIngameUI = other.HideIngameUI;
}
}
}

View File

@@ -21,11 +21,12 @@ using OpenRA.Network;
using OpenRA.Traits;
using OpenRA.Widgets;
namespace OpenRA.Mods.Cnc.Widgets
namespace OpenRA.Mods.RA.Widgets
{
public class ProductionIcon
{
public string Name;
public Hotkey Hotkey;
public Sprite Sprite;
public float2 Pos;
public List<ProductionItem> Queued;
@@ -34,9 +35,13 @@ namespace OpenRA.Mods.Cnc.Widgets
public class ProductionPaletteWidget : Widget
{
public enum ReadyTextStyleOptions { Solid, AlternatingColor, Blinking }
public readonly ReadyTextStyleOptions ReadyTextStyle = ReadyTextStyleOptions.Blinking;
public readonly Color ReadyTextAltColor = Color.Red;
public readonly ReadyTextStyleOptions ReadyTextStyle = ReadyTextStyleOptions.AlternatingColor;
public readonly Color ReadyTextAltColor = Color.Gold;
public readonly int Columns = 3;
public readonly int2 IconSize = new int2(64, 48);
public readonly int2 IconMargin = int2.Zero;
public readonly int2 IconSpriteOffset = int2.Zero;
public readonly string TabClick = null;
public readonly string DisabledTabClick = null;
public readonly string TooltipContainer;
@@ -45,6 +50,9 @@ namespace OpenRA.Mods.Cnc.Widgets
[Translate] public readonly string ReadyText = "";
[Translate] public readonly string HoldText = "";
public int IconCount { get; private set; }
public event Action<int, int> OnIconCountChanged = (a, b) => {};
public string TooltipActor { get; private set; }
public readonly World World;
readonly OrderManager orderManager;
@@ -113,14 +121,23 @@ namespace OpenRA.Mods.Cnc.Widgets
if (icon == null)
return false;
// Only support left and right clicks
if (mi.Button != MouseButton.Left && mi.Button != MouseButton.Right)
return false;
// Eat mouse-up events
if (mi.Event != MouseInputEvent.Down)
return true;
return HandleEvent(icon, mi.Button == MouseButton.Left);
}
bool HandleEvent(ProductionIcon icon, bool isLeftClick)
{
var actor = World.Map.Rules.Actors[icon.Name];
var first = icon.Queued.FirstOrDefault();
if (mi.Button == MouseButton.Left)
if (isLeftClick)
{
// Pick up a completed building
if (first != null && first.Done && actor.Traits.Contains<BuildingInfo>())
@@ -145,7 +162,7 @@ namespace OpenRA.Mods.Cnc.Widgets
else
Sound.Play(DisabledTabClick);
}
else if (mi.Button == MouseButton.Right)
else
{
// Hold/Cancel an existing item
if (first != null)
@@ -172,40 +189,66 @@ namespace OpenRA.Mods.Cnc.Widgets
return true;
}
public override bool HandleKeyPress(KeyInput e)
{
if (e.Event == KeyInputEvent.Up || CurrentQueue == null)
return false;
var hotkey = Hotkey.FromKeyInput(e);
var toBuild = icons.Values.FirstOrDefault(i => i.Hotkey == hotkey);
return toBuild != null ? HandleEvent(toBuild, true) : false;
}
public void RefreshIcons()
{
icons = new Dictionary<Rectangle, ProductionIcon>();
if (CurrentQueue == null)
{
if (IconCount != 0)
{
OnIconCountChanged(IconCount, 0);
IconCount = 0;
}
return;
}
var allBuildables = CurrentQueue.AllItems().OrderBy(a => a.Traits.Get<BuildableInfo>().BuildPaletteOrder);
var i = 0;
var oldIconCount = IconCount;
IconCount = 0;
var rb = RenderBounds;
foreach (var item in allBuildables)
{
var x = i % Columns;
var y = i / Columns;
var rect = new Rectangle(rb.X + x * 64 + 1, rb.Y + y * 48 + 1, 64, 48);
var x = IconCount % Columns;
var y = IconCount / Columns;
var rect = new Rectangle(rb.X + x * (IconSize.X + IconMargin.X), rb.Y + y * (IconSize.Y + IconMargin.Y), IconSize.X, IconSize.Y);
var icon = new Animation(World, RenderSimple.GetImage(item));
icon.Play(item.Traits.Get<TooltipInfo>().Icon);
var pi = new ProductionIcon()
{
Name = item.Name,
Hotkey = item.Traits.Get<BuildableInfo>().Hotkey,
Sprite = icon.Image,
Pos = new float2(rect.Location),
Queued = CurrentQueue.AllQueued().Where(a => a.Item == item.Name).ToList(),
};
icons.Add(rect, pi);
i++;
IconCount++;
}
eventBounds = icons.Keys.Aggregate(Rectangle.Union);
eventBounds = icons.Any() ? icons.Keys.Aggregate(Rectangle.Union) : Rectangle.Empty;
if (oldIconCount != IconCount)
OnIconCountChanged(oldIconCount, IconCount);
}
public override void Draw()
{
var iconSize = new float2(64, 48);
var iconOffset = 0.5f * iconSize;
var iconOffset = 0.5f * IconSize.ToFloat2() + IconSpriteOffset;
overlayFont = Game.Renderer.Fonts["TinyBold"];
timeOffset = iconOffset - overlayFont.Measure(WidgetUtils.FormatTime(0)) / 2;
@@ -218,10 +261,6 @@ namespace OpenRA.Mods.Cnc.Widgets
var buildableItems = CurrentQueue.BuildableItems();
// Background
foreach (var rect in icons.Keys)
WidgetUtils.DrawPanel("panel-black", rect.InflateBy(1, 1, 1, 1));
// Icons
foreach (var icon in icons.Values)
{
@@ -235,6 +274,7 @@ namespace OpenRA.Mods.Cnc.Widgets
() => (first.TotalTime - first.RemainingTime)
* (clock.CurrentSequence.Length - 1) / first.TotalTime);
clock.Tick();
WidgetUtils.DrawSHPCentered(clock.Image, icon.Pos + iconOffset, worldRenderer);
}
else if (!buildableItems.Any(a => a.Name == icon.Name))

View File

@@ -16,7 +16,7 @@ using OpenRA.Graphics;
using OpenRA.Mods.RA;
using OpenRA.Widgets;
namespace OpenRA.Mods.Cnc.Widgets
namespace OpenRA.Mods.RA.Widgets
{
public class ProductionTab
{
@@ -57,12 +57,13 @@ namespace OpenRA.Mods.Cnc.Widgets
}
}
class ProductionTabsWidget : Widget
public class ProductionTabsWidget : Widget
{
readonly World world;
public readonly string PaletteWidget = null;
public readonly string TypesContainer = null;
public readonly string BackgroundContainer = null;
public readonly int TabWidth = 30;
public readonly int ArrowWidth = 20;

View File

@@ -10,7 +10,7 @@
using OpenRA.Widgets;
namespace OpenRA.Mods.Cnc.Widgets
namespace OpenRA.Mods.RA.Widgets
{
public class ProductionTypeButtonWidget : ButtonWidget
{

View File

@@ -25,6 +25,7 @@ namespace OpenRA.Mods.RA.Widgets
public Func<bool> IsEnabled = () => true;
public Action AfterOpen = () => { };
public Action AfterClose = () => { };
public Action<float> Animating = _ => {};
float radarMinimapHeight;
int frame;
@@ -227,6 +228,8 @@ namespace OpenRA.Mods.RA.Widgets
frame += enabled ? 1 : -1;
radarMinimapHeight = float2.Lerp(0, 1, (float)frame / AnimationLength);
Animating(frame * 1f / AnimationLength);
// Update map rectangle for event handling
var ro = RenderOrigin;
mapRect = new Rectangle(previewOrigin.X + ro.X, previewOrigin.Y + ro.Y, mapRect.Width, mapRect.Height);

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2011 The OpenRA Developers (see AUTHORS)
* Copyright 2007-2014 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,
@@ -16,17 +16,22 @@ using OpenRA.Graphics;
using OpenRA.Mods.RA;
using OpenRA.Widgets;
namespace OpenRA.Mods.Cnc.Widgets
namespace OpenRA.Mods.RA.Widgets
{
public class SupportPowersWidget : Widget
{
[Translate] public readonly string ReadyText = "";
[Translate] public readonly string HoldText = "";
public readonly int2 IconSize = new int2(64, 48);
public readonly int IconMargin = 10;
public readonly int2 IconSpriteOffset = int2.Zero;
public readonly string TooltipContainer;
public readonly string TooltipTemplate = "SUPPORT_POWER_TOOLTIP";
public int Spacing = 10;
public int IconCount { get; private set; }
public event Action<int, int> OnIconCountChanged = (a, b) => {};
readonly WorldRenderer worldRenderer;
readonly SupportPowerManager spm;
@@ -67,12 +72,15 @@ namespace OpenRA.Mods.Cnc.Widgets
icons = new Dictionary<Rectangle, SupportPowerIcon>();
var powers = spm.Powers.Values.Where(p => !p.Disabled);
var i = 0;
var oldIconCount = IconCount;
IconCount = 0;
var rb = RenderBounds;
foreach (var p in powers)
{
var rect = new Rectangle(rb.X + 1, rb.Y + i * (48 + Spacing) + 1, 64, 48);
var rect = new Rectangle(rb.X, rb.Y + IconCount * (IconSize.Y + IconMargin), IconSize.X, IconSize.Y);
icon.Play(p.Info.Icon);
var power = new SupportPowerIcon()
{
Power = p,
@@ -81,26 +89,24 @@ namespace OpenRA.Mods.Cnc.Widgets
};
icons.Add(rect, power);
i++;
IconCount++;
}
eventBounds = (icons.Count == 0) ? Rectangle.Empty : icons.Keys.Aggregate(Rectangle.Union);
eventBounds = icons.Any() ? icons.Keys.Aggregate(Rectangle.Union) : Rectangle.Empty;
if (oldIconCount != IconCount)
OnIconCountChanged(oldIconCount, IconCount);
}
public override void Draw()
{
var iconSize = new float2(64, 48);
var iconOffset = 0.5f * iconSize;
var iconOffset = 0.5f * IconSize.ToFloat2() + IconSpriteOffset;
overlayFont = Game.Renderer.Fonts["TinyBold"];
holdOffset = iconOffset - overlayFont.Measure(HoldText) / 2;
readyOffset = iconOffset - overlayFont.Measure(ReadyText) / 2;
timeOffset = iconOffset - overlayFont.Measure(WidgetUtils.FormatTime(0)) / 2;
// Background
foreach (var rect in icons.Keys)
WidgetUtils.DrawPanel("panel-black", rect.InflateBy(1, 1, 1, 1));
// Icons
foreach (var p in icons.Values)
{
@@ -110,6 +116,7 @@ namespace OpenRA.Mods.Cnc.Widgets
clock.PlayFetchIndex("idle",
() => (p.Power.TotalTime - p.Power.RemainingTime)
* (clock.CurrentSequence.Length - 1) / p.Power.TotalTime);
clock.Tick();
WidgetUtils.DrawSHPCentered(clock.Image, p.Pos + iconOffset, worldRenderer);
}
@@ -140,14 +147,18 @@ namespace OpenRA.Mods.Cnc.Widgets
public override void MouseEntered()
{
if (TooltipContainer == null) return;
if (TooltipContainer == null)
return;
tooltipContainer.Value.SetTooltip(TooltipTemplate,
new WidgetArgs() { { "palette", this } });
}
public override void MouseExited()
{
if (TooltipContainer == null) return;
if (TooltipContainer == null)
return;
tooltipContainer.Value.RemoveTooltip();
}
@@ -157,7 +168,8 @@ namespace OpenRA.Mods.Cnc.Widgets
{
var icon = icons.Where(i => i.Key.Contains(mi.Location))
.Select(i => i.Value).FirstOrDefault();
TooltipPower = (icon != null) ? icon.Power : null;
TooltipPower = icon != null ? icon.Power : null;
return false;
}
@@ -171,6 +183,7 @@ namespace OpenRA.Mods.Cnc.Widgets
{
if (!clicked.Power.Active)
Sound.PlayToPlayer(spm.self.Owner, clicked.Power.Info.InsufficientPowerSound);
spm.Target(clicked.Power.Info.OrderName);
}

View File

@@ -99,16 +99,16 @@
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="7.9999996"
inkscape:cx="278.36391"
inkscape:cy="462.8318"
inkscape:zoom="8"
inkscape:cx="468.95592"
inkscape:cy="426.49296"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1624"
inkscape:window-height="1006"
inkscape:window-x="56"
inkscape:window-y="22"
inkscape:window-width="1381"
inkscape:window-height="856"
inkscape:window-x="59"
inkscape:window-y="0"
inkscape:window-maximized="0"
showguides="true"
inkscape:guide-bbox="true">
@@ -190,7 +190,7 @@
id="guide3167" />
<sodipodi:guide
orientation="0,1"
position="389.62502,401.06252"
position="518,400.134"
id="guide3995" />
</sodipodi:namedview>
<metadata
@@ -201,7 +201,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
@@ -1393,11 +1393,11 @@
sodipodi:cy="7.9116955"
sodipodi:rx="7.8141294"
sodipodi:ry="7.8141294"
d="m 16.011775,7.9116955 a 7.8141294,7.8141294 0 1 1 -15.62825917,0 7.8141294,7.8141294 0 1 1 15.62825917,0 z"
d="m 16.011775,7.9116955 c 0,4.3156245 -3.498505,7.8141295 -7.8141298,7.8141295 -4.3156245,0 -7.81412937,-3.498505 -7.81412937,-7.8141295 0,-4.3156245 3.49850487,-7.81412937 7.81412937,-7.81412937 4.3156248,0 7.8141298,3.49850487 7.8141298,7.81412937 z"
transform="matrix(1.0877731,0,0,1.0877731,435.58282,596.25606)" />
<path
transform="matrix(1.1517598,0,0,1.1517598,435.05828,595.74983)"
d="m 16.011775,7.9116955 a 7.8141294,7.8141294 0 1 1 -15.62825917,0 7.8141294,7.8141294 0 1 1 15.62825917,0 z"
d="m 16.011775,7.9116955 c 0,4.3156245 -3.498505,7.8141295 -7.8141298,7.8141295 -4.3156245,0 -7.81412937,-3.498505 -7.81412937,-7.8141295 0,-4.3156245 3.49850487,-7.81412937 7.81412937,-7.81412937 4.3156248,0 7.8141298,3.49850487 7.8141298,7.81412937 z"
sodipodi:ry="7.8141294"
sodipodi:rx="7.8141294"
sodipodi:cy="7.9116955"
@@ -1407,7 +1407,7 @@
sodipodi:type="arc" />
<path
transform="matrix(1.0877731,0,0,1.0877731,458.58282,596.25606)"
d="m 16.011775,7.9116955 a 7.8141294,7.8141294 0 1 1 -15.62825917,0 7.8141294,7.8141294 0 1 1 15.62825917,0 z"
d="m 16.011775,7.9116955 c 0,4.3156245 -3.498505,7.8141295 -7.8141298,7.8141295 -4.3156245,0 -7.81412937,-3.498505 -7.81412937,-7.8141295 0,-4.3156245 3.49850487,-7.81412937 7.81412937,-7.81412937 4.3156248,0 7.8141298,3.49850487 7.8141298,7.81412937 z"
sodipodi:ry="7.8141294"
sodipodi:rx="7.8141294"
sodipodi:cy="7.9116955"
@@ -1423,7 +1423,7 @@
sodipodi:cy="7.9116955"
sodipodi:rx="7.8141294"
sodipodi:ry="7.8141294"
d="m 16.011775,7.9116955 a 7.8141294,7.8141294 0 1 1 -15.62825917,0 7.8141294,7.8141294 0 1 1 15.62825917,0 z"
d="m 16.011775,7.9116955 c 0,4.3156245 -3.498505,7.8141295 -7.8141298,7.8141295 -4.3156245,0 -7.81412937,-3.498505 -7.81412937,-7.8141295 0,-4.3156245 3.49850487,-7.81412937 7.81412937,-7.81412937 4.3156248,0 7.8141298,3.49850487 7.8141298,7.81412937 z"
transform="matrix(1.1517598,0,0,1.1517598,458.05828,595.74983)" />
<path
sodipodi:type="arc"
@@ -1433,11 +1433,11 @@
sodipodi:cy="7.9116955"
sodipodi:rx="7.8141294"
sodipodi:ry="7.8141294"
d="m 16.011775,7.9116955 a 7.8141294,7.8141294 0 1 1 -15.62825917,0 7.8141294,7.8141294 0 1 1 15.62825917,0 z"
d="m 16.011775,7.9116955 c 0,4.3156245 -3.498505,7.8141295 -7.8141298,7.8141295 -4.3156245,0 -7.81412937,-3.498505 -7.81412937,-7.8141295 0,-4.3156245 3.49850487,-7.81412937 7.81412937,-7.81412937 4.3156248,0 7.8141298,3.49850487 7.8141298,7.81412937 z"
transform="matrix(0.76783987,0,0,0.76783987,257.70552,574.28728)" />
<path
transform="matrix(0.83182651,0,0,0.83182651,257.18098,573.78104)"
d="m 16.011775,7.9116955 a 7.8141294,7.8141294 0 1 1 -15.62825917,0 7.8141294,7.8141294 0 1 1 15.62825917,0 z"
d="m 16.011775,7.9116955 c 0,4.3156245 -3.498505,7.8141295 -7.8141298,7.8141295 -4.3156245,0 -7.81412937,-3.498505 -7.81412937,-7.8141295 0,-4.3156245 3.49850487,-7.81412937 7.81412937,-7.81412937 4.3156248,0 7.8141298,3.49850487 7.8141298,7.81412937 z"
sodipodi:ry="7.8141294"
sodipodi:rx="7.8141294"
sodipodi:cy="7.9116955"
@@ -1445,6 +1445,170 @@
id="path4006"
style="fill:none;stroke:#800000;stroke-width:1.20217383;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
sodipodi:type="arc" />
<g
transform="matrix(2.6666222,0,0,2.6666222,-902.1431,421.1582)"
style="font-size:6px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#808080;fill-opacity:1;stroke:none;font-family:FontAwesome;-inkscape-font-specification:FontAwesome"
id="flowRoot4050">
<path
d="m 527.46317,69.726807 c 0.0424,-0.04241 0.0636,-0.09263 0.0636,-0.15067 -1e-5,-0.05803 -0.0212,-0.108254 -0.0636,-0.150669 -0.0424,-0.04241 -0.0926,-0.06361 -0.15067,-0.06362 -0.058,4e-6 -0.10826,0.02121 -0.15067,0.06362 -0.0424,0.04242 -0.0636,0.09264 -0.0636,0.150669 0,0.05804 0.0212,0.108264 0.0636,0.15067 0.0424,0.04242 0.0926,0.06362 0.15067,0.06362 0.058,4e-6 0.10826,-0.0212 0.15067,-0.06362 m 2.84933,2.99379 0,1.178572 c -10e-6,0.04911 -0.0223,0.08259 -0.067,0.100446 -0.0179,0.0045 -0.0313,0.0067 -0.0402,0.0067 -0.029,-10e-7 -0.0547,-0.01004 -0.077,-0.03013 l -0.31139,-0.311384 c -0.26563,0.319196 -0.62165,0.571428 -1.06808,0.756696 -0.4442,0.187499 -0.92299,0.281249 -1.43638,0.28125 -0.5134,-10e-7 -0.99331,-0.09375 -1.43973,-0.28125 -0.4442,-0.185268 -0.79911,-0.4375 -1.06473,-0.756696 l -0.31139,0.311384 c -0.0201,0.02009 -0.0458,0.03013 -0.077,0.03013 -0.009,-10e-7 -0.0223,-0.0022 -0.0402,-0.0067 -0.0446,-0.01786 -0.067,-0.05134 -0.067,-0.100446 l 0,-1.178572 c 0,-0.03125 0.01,-0.05692 0.0301,-0.07701 0.0201,-0.02009 0.0458,-0.03013 0.077,-0.03013 l 1.17857,0 c 0.0491,2e-6 0.0826,0.02232 0.10045,0.06696 0.0179,0.04241 0.01,0.08147 -0.0234,0.117187 l -0.33482,0.334822 c 0.14955,0.203125 0.36049,0.375 0.63281,0.515625 0.27456,0.138393 0.57813,0.22991 0.91072,0.274553 l 0,-2.166294 -0.64286,0 c -0.058,2e-6 -0.10826,-0.0212 -0.15067,-0.06362 -0.0424,-0.04241 -0.0636,-0.09263 -0.0636,-0.15067 l 0,-0.428572 c -10e-6,-0.05803 0.0212,-0.108256 0.0636,-0.150669 0.0424,-0.04241 0.0926,-0.06361 0.15067,-0.06362 l 0.64286,0 0,-0.583076 c -0.12947,-0.07589 -0.23326,-0.178568 -0.31139,-0.308036 -0.0781,-0.131692 -0.11718,-0.275665 -0.11718,-0.43192 0,-0.236602 0.0837,-0.438611 0.25111,-0.606026 0.16741,-0.167406 0.36942,-0.251111 0.60603,-0.251116 0.2366,5e-6 0.43861,0.08371 0.60603,0.251116 0.1674,0.167415 0.25111,0.369424 0.25111,0.606026 0,0.156255 -0.0391,0.300228 -0.11718,0.43192 -0.0781,0.129468 -0.18193,0.232147 -0.31139,0.308036 l 0,0.583076 0.64286,0 c 0.058,3e-6 0.10825,0.02121 0.15067,0.06362 0.0424,0.04241 0.0636,0.09264 0.0636,0.150669 l 0,0.428572 c 0,0.05804 -0.0212,0.108261 -0.0636,0.15067 -0.0424,0.04241 -0.0926,0.06362 -0.15067,0.06362 l -0.64286,0 0,2.166294 c 0.33259,-0.04464 0.63504,-0.13616 0.90737,-0.274553 0.27455,-0.140625 0.4866,-0.3125 0.63616,-0.515625 l -0.33482,-0.334822 c -0.0335,-0.03571 -0.0413,-0.07478 -0.0234,-0.117187 0.0179,-0.04464 0.0513,-0.06696 0.10045,-0.06696 l 1.17857,0 c 0.0312,2e-6 0.0569,0.01005 0.077,0.03013 0.0201,0.02009 0.0301,0.04576 0.0301,0.07701"
id="path4059"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccsccccccccccscccccssssccccccccssccccccscccscccccssssccccccsccc"
style="fill:#808080;fill-opacity:1" />
</g>
<g
id="g4061"
style="font-size:6px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:FontAwesome;-inkscape-font-specification:FontAwesome"
transform="matrix(2.6666222,0,0,2.6666222,-902.1431,405.1582)">
<path
sodipodi:nodetypes="cccccsccccccccccscccccssssccccccccssccccccscccscccccssssccccccsccc"
inkscape:connector-curvature="0"
id="path4063"
d="m 527.46317,69.726807 c 0.0424,-0.04241 0.0636,-0.09263 0.0636,-0.15067 -1e-5,-0.05803 -0.0212,-0.108254 -0.0636,-0.150669 -0.0424,-0.04241 -0.0926,-0.06361 -0.15067,-0.06362 -0.058,4e-6 -0.10826,0.02121 -0.15067,0.06362 -0.0424,0.04242 -0.0636,0.09264 -0.0636,0.150669 0,0.05804 0.0212,0.108264 0.0636,0.15067 0.0424,0.04242 0.0926,0.06362 0.15067,0.06362 0.058,4e-6 0.10826,-0.0212 0.15067,-0.06362 m 2.84933,2.99379 0,1.178572 c -10e-6,0.04911 -0.0223,0.08259 -0.067,0.100446 -0.0179,0.0045 -0.0313,0.0067 -0.0402,0.0067 -0.029,-10e-7 -0.0547,-0.01004 -0.077,-0.03013 l -0.31139,-0.311384 c -0.26563,0.319196 -0.62165,0.571428 -1.06808,0.756696 -0.4442,0.187499 -0.92299,0.281249 -1.43638,0.28125 -0.5134,-10e-7 -0.99331,-0.09375 -1.43973,-0.28125 -0.4442,-0.185268 -0.79911,-0.4375 -1.06473,-0.756696 l -0.31139,0.311384 c -0.0201,0.02009 -0.0458,0.03013 -0.077,0.03013 -0.009,-10e-7 -0.0223,-0.0022 -0.0402,-0.0067 -0.0446,-0.01786 -0.067,-0.05134 -0.067,-0.100446 l 0,-1.178572 c 0,-0.03125 0.01,-0.05692 0.0301,-0.07701 0.0201,-0.02009 0.0458,-0.03013 0.077,-0.03013 l 1.17857,0 c 0.0491,2e-6 0.0826,0.02232 0.10045,0.06696 0.0179,0.04241 0.01,0.08147 -0.0234,0.117187 l -0.33482,0.334822 c 0.14955,0.203125 0.36049,0.375 0.63281,0.515625 0.27456,0.138393 0.57813,0.22991 0.91072,0.274553 l 0,-2.166294 -0.64286,0 c -0.058,2e-6 -0.10826,-0.0212 -0.15067,-0.06362 -0.0424,-0.04241 -0.0636,-0.09263 -0.0636,-0.15067 l 0,-0.428572 c -10e-6,-0.05803 0.0212,-0.108256 0.0636,-0.150669 0.0424,-0.04241 0.0926,-0.06361 0.15067,-0.06362 l 0.64286,0 0,-0.583076 c -0.12947,-0.07589 -0.23326,-0.178568 -0.31139,-0.308036 -0.0781,-0.131692 -0.11718,-0.275665 -0.11718,-0.43192 0,-0.236602 0.0837,-0.438611 0.25111,-0.606026 0.16741,-0.167406 0.36942,-0.251111 0.60603,-0.251116 0.2366,5e-6 0.43861,0.08371 0.60603,0.251116 0.1674,0.167415 0.25111,0.369424 0.25111,0.606026 0,0.156255 -0.0391,0.300228 -0.11718,0.43192 -0.0781,0.129468 -0.18193,0.232147 -0.31139,0.308036 l 0,0.583076 0.64286,0 c 0.058,3e-6 0.10825,0.02121 0.15067,0.06362 0.0424,0.04241 0.0636,0.09264 0.0636,0.150669 l 0,0.428572 c 0,0.05804 -0.0212,0.108261 -0.0636,0.15067 -0.0424,0.04241 -0.0926,0.06362 -0.15067,0.06362 l -0.64286,0 0,2.166294 c 0.33259,-0.04464 0.63504,-0.13616 0.90737,-0.274553 0.27455,-0.140625 0.4866,-0.3125 0.63616,-0.515625 l -0.33482,-0.334822 c -0.0335,-0.03571 -0.0413,-0.07478 -0.0234,-0.117187 0.0179,-0.04464 0.0513,-0.06696 0.10045,-0.06696 l 1.17857,0 c 0.0312,2e-6 0.0569,0.01005 0.077,0.03013 0.0201,0.02009 0.0301,0.04576 0.0301,0.07701" />
</g>
<g
transform="matrix(2.6666222,0,0,2.6666222,-902.1431,437.1582)"
style="font-size:6px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffc000;fill-opacity:1;stroke:none;font-family:FontAwesome;-inkscape-font-specification:FontAwesome"
id="g4065">
<path
d="m 527.46317,69.726807 c 0.0424,-0.04241 0.0636,-0.09263 0.0636,-0.15067 -1e-5,-0.05803 -0.0212,-0.108254 -0.0636,-0.150669 -0.0424,-0.04241 -0.0926,-0.06361 -0.15067,-0.06362 -0.058,4e-6 -0.10826,0.02121 -0.15067,0.06362 -0.0424,0.04242 -0.0636,0.09264 -0.0636,0.150669 0,0.05804 0.0212,0.108264 0.0636,0.15067 0.0424,0.04242 0.0926,0.06362 0.15067,0.06362 0.058,4e-6 0.10826,-0.0212 0.15067,-0.06362 m 2.84933,2.99379 0,1.178572 c -10e-6,0.04911 -0.0223,0.08259 -0.067,0.100446 -0.0179,0.0045 -0.0313,0.0067 -0.0402,0.0067 -0.029,-10e-7 -0.0547,-0.01004 -0.077,-0.03013 l -0.31139,-0.311384 c -0.26563,0.319196 -0.62165,0.571428 -1.06808,0.756696 -0.4442,0.187499 -0.92299,0.281249 -1.43638,0.28125 -0.5134,-10e-7 -0.99331,-0.09375 -1.43973,-0.28125 -0.4442,-0.185268 -0.79911,-0.4375 -1.06473,-0.756696 l -0.31139,0.311384 c -0.0201,0.02009 -0.0458,0.03013 -0.077,0.03013 -0.009,-10e-7 -0.0223,-0.0022 -0.0402,-0.0067 -0.0446,-0.01786 -0.067,-0.05134 -0.067,-0.100446 l 0,-1.178572 c 0,-0.03125 0.01,-0.05692 0.0301,-0.07701 0.0201,-0.02009 0.0458,-0.03013 0.077,-0.03013 l 1.17857,0 c 0.0491,2e-6 0.0826,0.02232 0.10045,0.06696 0.0179,0.04241 0.01,0.08147 -0.0234,0.117187 l -0.33482,0.334822 c 0.14955,0.203125 0.36049,0.375 0.63281,0.515625 0.27456,0.138393 0.57813,0.22991 0.91072,0.274553 l 0,-2.166294 -0.64286,0 c -0.058,2e-6 -0.10826,-0.0212 -0.15067,-0.06362 -0.0424,-0.04241 -0.0636,-0.09263 -0.0636,-0.15067 l 0,-0.428572 c -10e-6,-0.05803 0.0212,-0.108256 0.0636,-0.150669 0.0424,-0.04241 0.0926,-0.06361 0.15067,-0.06362 l 0.64286,0 0,-0.583076 c -0.12947,-0.07589 -0.23326,-0.178568 -0.31139,-0.308036 -0.0781,-0.131692 -0.11718,-0.275665 -0.11718,-0.43192 0,-0.236602 0.0837,-0.438611 0.25111,-0.606026 0.16741,-0.167406 0.36942,-0.251111 0.60603,-0.251116 0.2366,5e-6 0.43861,0.08371 0.60603,0.251116 0.1674,0.167415 0.25111,0.369424 0.25111,0.606026 0,0.156255 -0.0391,0.300228 -0.11718,0.43192 -0.0781,0.129468 -0.18193,0.232147 -0.31139,0.308036 l 0,0.583076 0.64286,0 c 0.058,3e-6 0.10825,0.02121 0.15067,0.06362 0.0424,0.04241 0.0636,0.09264 0.0636,0.150669 l 0,0.428572 c 0,0.05804 -0.0212,0.108261 -0.0636,0.15067 -0.0424,0.04241 -0.0926,0.06362 -0.15067,0.06362 l -0.64286,0 0,2.166294 c 0.33259,-0.04464 0.63504,-0.13616 0.90737,-0.274553 0.27455,-0.140625 0.4866,-0.3125 0.63616,-0.515625 l -0.33482,-0.334822 c -0.0335,-0.03571 -0.0413,-0.07478 -0.0234,-0.117187 0.0179,-0.04464 0.0513,-0.06696 0.10045,-0.06696 l 1.17857,0 c 0.0312,2e-6 0.0569,0.01005 0.077,0.03013 0.0201,0.02009 0.0301,0.04576 0.0301,0.07701"
id="path4067"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccsccccccccccscccccssssccccccccssccccccscccscccccssssccccccsccc"
style="fill:#ffc000;fill-opacity:1" />
</g>
<g
style="font-size:17.23077011px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sans"
id="text4069">
<path
d="m 492.54807,592.57371 c 0.11537,0.12822 0.13781,0.26924 0.0673,0.42308 l -5.19231,11.125 c -0.0833,0.16025 -0.21795,0.24038 -0.40385,0.24038 -0.0256,0 -0.0705,-0.006 -0.13461,-0.0192 -0.10898,-0.0321 -0.19231,-0.0929 -0.25,-0.18269 -0.0513,-0.0897 -0.0641,-0.1859 -0.0385,-0.28846 l 1.89424,-7.76923 -3.90385,0.97115 c -0.0256,0.006 -0.0641,0.01 -0.11539,0.01 -0.11538,0 -0.21474,-0.0353 -0.29807,-0.10577 -0.11539,-0.0962 -0.15705,-0.22115 -0.125,-0.375 l 1.93269,-7.9327 c 0.0256,-0.0897 0.0769,-0.16344 0.15385,-0.22115 0.0769,-0.0577 0.16666,-0.0865 0.26923,-0.0865 l 3.15384,0 c 0.12179,2e-5 0.22436,0.0417 0.3077,0.125 0.0833,0.0769 0.12499,0.16989 0.125,0.27885 -1e-5,0.0513 -0.016,0.10899 -0.0481,0.17308 l -1.64423,4.45192 3.80769,-0.94231 c 0.0513,-0.0128 0.0897,-0.0192 0.11538,-0.0192 0.12179,10e-6 0.23077,0.0481 0.32693,0.14423"
id="path4078"
style="" />
<path
id="path4080"
d="m 492.54807,592.57371 c 0.11537,0.12822 0.13781,0.26924 0.0673,0.42308 l -5.19231,11.125 c -0.0833,0.16025 -0.21795,0.24038 -0.40385,0.24038 -0.0256,0 -0.0705,-0.006 -0.13461,-0.0192 -0.10898,-0.0321 -0.19231,-0.0929 -0.25,-0.18269 -0.0513,-0.0897 -0.0641,-0.1859 -0.0385,-0.28846 l 1.89424,-7.76923 -3.90385,0.97115 c -0.0256,0.006 -0.0641,0.01 -0.11539,0.01 -0.11538,0 -0.21474,-0.0353 -0.29807,-0.10577 -0.11539,-0.0962 -0.15705,-0.22115 -0.125,-0.375 l 1.93269,-7.9327 c 0.0256,-0.0897 0.0769,-0.16344 0.15385,-0.22115 0.0769,-0.0577 0.16666,-0.0865 0.26923,-0.0865 l 3.15384,0 c 0.12179,2e-5 0.22436,0.0417 0.3077,0.125 0.0833,0.0769 0.12499,0.16989 0.125,0.27885 -1e-5,0.0513 -0.016,0.10899 -0.0481,0.17308 l -1.64423,4.45192 3.80769,-0.94231 c 0.0513,-0.0128 0.0897,-0.0192 0.11538,-0.0192 0.12179,10e-6 0.23077,0.0481 0.32693,0.14423"
style="fill:#ffffff;fill-opacity:1;stroke:none" />
</g>
<g
id="g4110"
style="font-size:17.23077011000000169px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#808080;fill-opacity:1;stroke:none;font-family:Sans"
transform="translate(0,16)">
<path
id="path4112"
d="m 492.54807,592.57371 c 0.11537,0.12822 0.13781,0.26924 0.0673,0.42308 l -5.19231,11.125 c -0.0833,0.16025 -0.21795,0.24038 -0.40385,0.24038 -0.0256,0 -0.0705,-0.006 -0.13461,-0.0192 -0.10898,-0.0321 -0.19231,-0.0929 -0.25,-0.18269 -0.0513,-0.0897 -0.0641,-0.1859 -0.0385,-0.28846 l 1.89424,-7.76923 -3.90385,0.97115 c -0.0256,0.006 -0.0641,0.01 -0.11539,0.01 -0.11538,0 -0.21474,-0.0353 -0.29807,-0.10577 -0.11539,-0.0962 -0.15705,-0.22115 -0.125,-0.375 l 1.93269,-7.9327 c 0.0256,-0.0897 0.0769,-0.16344 0.15385,-0.22115 0.0769,-0.0577 0.16666,-0.0865 0.26923,-0.0865 l 3.15384,0 c 0.12179,2e-5 0.22436,0.0417 0.3077,0.125 0.0833,0.0769 0.12499,0.16989 0.125,0.27885 -1e-5,0.0513 -0.016,0.10899 -0.0481,0.17308 l -1.64423,4.45192 3.80769,-0.94231 c 0.0513,-0.0128 0.0897,-0.0192 0.11538,-0.0192 0.12179,10e-6 0.23077,0.0481 0.32693,0.14423"
inkscape:connector-curvature="0"
style="fill:#808080;fill-opacity:1" />
<path
style="fill:#808080;fill-opacity:1;stroke:none"
d="m 492.54807,592.57371 c 0.11537,0.12822 0.13781,0.26924 0.0673,0.42308 l -5.19231,11.125 c -0.0833,0.16025 -0.21795,0.24038 -0.40385,0.24038 -0.0256,0 -0.0705,-0.006 -0.13461,-0.0192 -0.10898,-0.0321 -0.19231,-0.0929 -0.25,-0.18269 -0.0513,-0.0897 -0.0641,-0.1859 -0.0385,-0.28846 l 1.89424,-7.76923 -3.90385,0.97115 c -0.0256,0.006 -0.0641,0.01 -0.11539,0.01 -0.11538,0 -0.21474,-0.0353 -0.29807,-0.10577 -0.11539,-0.0962 -0.15705,-0.22115 -0.125,-0.375 l 1.93269,-7.9327 c 0.0256,-0.0897 0.0769,-0.16344 0.15385,-0.22115 0.0769,-0.0577 0.16666,-0.0865 0.26923,-0.0865 l 3.15384,0 c 0.12179,2e-5 0.22436,0.0417 0.3077,0.125 0.0833,0.0769 0.12499,0.16989 0.125,0.27885 -1e-5,0.0513 -0.016,0.10899 -0.0481,0.17308 l -1.64423,4.45192 3.80769,-0.94231 c 0.0513,-0.0128 0.0897,-0.0192 0.11538,-0.0192 0.12179,10e-6 0.23077,0.0481 0.32693,0.14423"
id="path4114"
inkscape:connector-curvature="0" />
</g>
<g
transform="translate(0,32)"
style="font-size:17.23077011000000169px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffc000;fill-opacity:1;stroke:none;font-family:Sans"
id="g4116">
<path
inkscape:connector-curvature="0"
d="m 492.54807,592.57371 c 0.11537,0.12822 0.13781,0.26924 0.0673,0.42308 l -5.19231,11.125 c -0.0833,0.16025 -0.21795,0.24038 -0.40385,0.24038 -0.0256,0 -0.0705,-0.006 -0.13461,-0.0192 -0.10898,-0.0321 -0.19231,-0.0929 -0.25,-0.18269 -0.0513,-0.0897 -0.0641,-0.1859 -0.0385,-0.28846 l 1.89424,-7.76923 -3.90385,0.97115 c -0.0256,0.006 -0.0641,0.01 -0.11539,0.01 -0.11538,0 -0.21474,-0.0353 -0.29807,-0.10577 -0.11539,-0.0962 -0.15705,-0.22115 -0.125,-0.375 l 1.93269,-7.9327 c 0.0256,-0.0897 0.0769,-0.16344 0.15385,-0.22115 0.0769,-0.0577 0.16666,-0.0865 0.26923,-0.0865 l 3.15384,0 c 0.12179,2e-5 0.22436,0.0417 0.3077,0.125 0.0833,0.0769 0.12499,0.16989 0.125,0.27885 -1e-5,0.0513 -0.016,0.10899 -0.0481,0.17308 l -1.64423,4.45192 3.80769,-0.94231 c 0.0513,-0.0128 0.0897,-0.0192 0.11538,-0.0192 0.12179,10e-6 0.23077,0.0481 0.32693,0.14423"
id="path4118"
style="fill:#ffc000;fill-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path4122"
d="m 492.54807,592.57371 c 0.11537,0.12822 0.13781,0.26924 0.0673,0.42308 l -5.19231,11.125 c -0.0833,0.16025 -0.21795,0.24038 -0.40385,0.24038 -0.0256,0 -0.0705,-0.006 -0.13461,-0.0192 -0.10898,-0.0321 -0.19231,-0.0929 -0.25,-0.18269 -0.0513,-0.0897 -0.0641,-0.1859 -0.0385,-0.28846 l 1.89424,-7.76923 -3.90385,0.97115 c -0.0256,0.006 -0.0641,0.01 -0.11539,0.01 -0.11538,0 -0.21474,-0.0353 -0.29807,-0.10577 -0.11539,-0.0962 -0.15705,-0.22115 -0.125,-0.375 l 1.93269,-7.9327 c 0.0256,-0.0897 0.0769,-0.16344 0.15385,-0.22115 0.0769,-0.0577 0.16666,-0.0865 0.26923,-0.0865 l 3.15384,0 c 0.12179,2e-5 0.22436,0.0417 0.3077,0.125 0.0833,0.0769 0.12499,0.16989 0.125,0.27885 -1e-5,0.0513 -0.016,0.10899 -0.0481,0.17308 l -1.64423,4.45192 3.80769,-0.94231 c 0.0513,-0.0128 0.0897,-0.0192 0.11538,-0.0192 0.12179,10e-6 0.23077,0.0481 0.32693,0.14423"
style="fill:#ffc000;fill-opacity:1;stroke:none" />
</g>
<path
sodipodi:type="arc"
style="fill:#ffffff;fill-opacity:1;stroke:none"
id="path3234"
sodipodi:cx="504.62503"
sodipodi:cy="98.374992"
sodipodi:rx="2.625"
sodipodi:ry="2.3749907"
d="m 507.25003,98.374992 c 0,1.311672 -1.17525,2.374988 -2.625,2.374988 -1.44975,0 -2.625,-1.063316 -2.625,-2.374988 0,-1.311671 1.17525,-2.37499 2.625,-2.37499 1.44975,0 2.625,1.063319 2.625,2.37499 z"
transform="matrix(1.5238095,0,0,1.6842171,-264.88993,475.67736)" />
<path
style="fill:#ffffff;fill-opacity:1;stroke:none"
d="m 500.5,645.36218 7,0 c 2.493,0 4.5,2.007 4.5,4.5 l 0,2.50002 -16,0 0,-2.50002 c 0,-2.493 2.007,-4.5 4.5,-4.5 z"
id="rect4029"
inkscape:connector-curvature="0"
sodipodi:nodetypes="sssccss" />
<path
transform="matrix(1.5238095,0,0,1.6842171,-264.88993,491.67736)"
d="m 507.25003,98.374992 c 0,1.311672 -1.17525,2.374988 -2.625,2.374988 -1.44975,0 -2.625,-1.063316 -2.625,-2.374988 0,-1.311671 1.17525,-2.37499 2.625,-2.37499 1.44975,0 2.625,1.063319 2.625,2.37499 z"
sodipodi:ry="2.3749907"
sodipodi:rx="2.625"
sodipodi:cy="98.374992"
sodipodi:cx="504.62503"
id="path4032"
style="fill:#808080;fill-opacity:1;stroke:none"
sodipodi:type="arc" />
<path
sodipodi:nodetypes="sssccss"
inkscape:connector-curvature="0"
id="path4034"
d="m 500.5,661.36218 7,0 c 2.493,0 4.5,2.007 4.5,4.5 l 0,2.50002 -16,0 0,-2.50002 c 0,-2.493 2.007,-4.5 4.5,-4.5 z"
style="fill:#808080;fill-opacity:1;stroke:none" />
<path
sodipodi:type="arc"
style="fill:#ffc000;fill-opacity:1;stroke:none"
id="path4036"
sodipodi:cx="504.62503"
sodipodi:cy="98.374992"
sodipodi:rx="2.625"
sodipodi:ry="2.3749907"
d="m 507.25003,98.374992 c 0,1.311672 -1.17525,2.374988 -2.625,2.374988 -1.44975,0 -2.625,-1.063316 -2.625,-2.374988 0,-1.311671 1.17525,-2.37499 2.625,-2.37499 1.44975,0 2.625,1.063319 2.625,2.37499 z"
transform="matrix(1.5238095,0,0,1.6842171,-264.88993,507.67736)" />
<path
style="fill:#ffc000;fill-opacity:1;stroke:none"
d="m 500.5,677.36218 7,0 c 2.493,0 4.5,2.007 4.5,4.5 l 0,2.50002 -16,0 0,-2.50002 c 0,-2.493 2.007,-4.5 4.5,-4.5 z"
id="path4038"
inkscape:connector-curvature="0"
sodipodi:nodetypes="sssccss" />
<path
sodipodi:type="arc"
style="fill:none;stroke:#ffffff;stroke-width:0.95312506;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="path3248"
sodipodi:cx="439.81253"
sodipodi:cy="88.562477"
sodipodi:rx="3.8125002"
sodipodi:ry="3.8125002"
d="m 443.62503,88.562477 a 3.8125002,3.8125002 0 1 1 -7.625,0 3.8125002,3.8125002 0 1 1 7.625,0 z"
transform="matrix(1.5737704,0,0,1.5737704,-252.16394,488.98519)" />
<path
style="fill:none;stroke:#ffffff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 440.0416,625.02887 -0.0412,3.41667 2.87503,1.83333"
id="path4030"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc" />
<flowRoot
xml:space="preserve"
id="flowRoot4039"
style="font-size:6px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:FreeSans;-inkscape-font-specification:FreeSans Bold"
transform="matrix(2.6246719,0,0,2.6246719,-764.958,391.85385)"><flowRegion
id="flowRegion4041"><rect
id="rect4043"
width="9.875"
height="10.375"
x="469.625"
y="86.625"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#ffffff;fill-opacity:1;font-family:FreeSans;-inkscape-font-specification:FreeSans Bold" /></flowRegion><flowPara
id="flowPara4045">$</flowPara></flowRoot> <g
id="g4047"
style="font-size:17.23077011px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sans"
transform="matrix(0.87502461,0,0,0.87502461,29.205207,106.53043)">
<path
id="path4049"
d="m 492.54807,592.57371 c 0.11537,0.12822 0.13781,0.26924 0.0673,0.42308 l -5.19231,11.125 c -0.0833,0.16025 -0.21795,0.24038 -0.40385,0.24038 -0.0256,0 -0.0705,-0.006 -0.13461,-0.0192 -0.10898,-0.0321 -0.19231,-0.0929 -0.25,-0.18269 -0.0513,-0.0897 -0.0641,-0.1859 -0.0385,-0.28846 l 1.89424,-7.76923 -3.90385,0.97115 c -0.0256,0.006 -0.0641,0.01 -0.11539,0.01 -0.11538,0 -0.21474,-0.0353 -0.29807,-0.10577 -0.11539,-0.0962 -0.15705,-0.22115 -0.125,-0.375 l 1.93269,-7.9327 c 0.0256,-0.0897 0.0769,-0.16344 0.15385,-0.22115 0.0769,-0.0577 0.16666,-0.0865 0.26923,-0.0865 l 3.15384,0 c 0.12179,2e-5 0.22436,0.0417 0.3077,0.125 0.0833,0.0769 0.12499,0.16989 0.125,0.27885 -1e-5,0.0513 -0.016,0.10899 -0.0481,0.17308 l -1.64423,4.45192 3.80769,-0.94231 c 0.0513,-0.0128 0.0897,-0.0192 0.11538,-0.0192 0.12179,10e-6 0.23077,0.0481 0.32693,0.14423"
inkscape:connector-curvature="0" />
<path
style="fill:#ffffff;fill-opacity:1;stroke:none"
d="m 492.54807,592.57371 c 0.11537,0.12822 0.13781,0.26924 0.0673,0.42308 l -5.19231,11.125 c -0.0833,0.16025 -0.21795,0.24038 -0.40385,0.24038 -0.0256,0 -0.0705,-0.006 -0.13461,-0.0192 -0.10898,-0.0321 -0.19231,-0.0929 -0.25,-0.18269 -0.0513,-0.0897 -0.0641,-0.1859 -0.0385,-0.28846 l 1.89424,-7.76923 -3.90385,0.97115 c -0.0256,0.006 -0.0641,0.01 -0.11539,0.01 -0.11538,0 -0.21474,-0.0353 -0.29807,-0.10577 -0.11539,-0.0962 -0.15705,-0.22115 -0.125,-0.375 l 1.93269,-7.9327 c 0.0256,-0.0897 0.0769,-0.16344 0.15385,-0.22115 0.0769,-0.0577 0.16666,-0.0865 0.26923,-0.0865 l 3.15384,0 c 0.12179,2e-5 0.22436,0.0417 0.3077,0.125 0.0833,0.0769 0.12499,0.16989 0.125,0.27885 -1e-5,0.0513 -0.016,0.10899 -0.0481,0.17308 l -1.64423,4.45192 3.80769,-0.94231 c 0.0513,-0.0128 0.0897,-0.0192 0.11538,-0.0192 0.12179,10e-6 0.23077,0.0481 0.32693,0.14423"
id="path4051"
inkscape:connector-curvature="0" />
</g>
</g>
<g
inkscape:groupmode="layer"

Before

Width:  |  Height:  |  Size: 86 KiB

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

Binary file not shown.

BIN
artsrc/ra/chrome.psd Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -429,6 +429,9 @@ strategic: strategic.png
sidebar-bits: chrome.png
indicator-left: 416,48,16,8
indicator-right: 416,56,16,8
production-tooltip-time: 432, 80, 16, 16
production-tooltip-power: 448, 80, 16, 16
production-tooltip-cost: 464, 80, 16, 16
production-icons: chrome.png
building: 384,0,16,16

View File

@@ -1,5 +1,5 @@
Container@CHEATS_PANEL:
Logic: CheatsLogic
Container@DEBUG_PANEL:
Logic: DebugMenuLogic
Width: PARENT_RIGHT
Height: PARENT_BOTTOM
Children:

View File

@@ -1,5 +1,5 @@
Container@INGAME_ROOT:
Logic: CncIngameChromeLogic
Logic: LoadIngamePlayerOrObserverUILogic
Children:
LogicTicker@DISCONNECT_WATCHER:
Logic: DisconnectWatcherLogic
@@ -59,7 +59,8 @@ Container@INGAME_ROOT:
Container@OBSERVER_WIDGETS:
Children:
Button@OPTIONS_BUTTON:
MenuButton@OPTIONS_BUTTON:
Logic: OrderButtonsChromeLogic
Key: escape
X: WINDOW_RIGHT-202
Y: 5
@@ -182,12 +183,24 @@ Container@PLAYER_WIDGETS:
WorldCommand:
Width: WINDOW_RIGHT
Height: WINDOW_BOTTOM
SupportPowers:
TooltipContainer: TOOLTIP_CONTAINER
Container@SUPPORT_POWERS:
Logic: SupportPowerBinLogic
X: 10
Y: 10
ReadyText: Ready
HoldText: On Hold
Children:
Container@PALETTE_BACKGROUND:
Children:
Background@ICON_TEMPLATE:
Width: 66
Height: 50
ClickThrough: false
Background: panel-black
SupportPowers@SUPPORT_PALETTE:
X: 1
Y: 1
TooltipContainer: TOOLTIP_CONTAINER
ReadyText: Ready
HoldText: On Hold
Background@SIDEBAR_BACKGROUND:
Logic: OrderButtonsChromeLogic
X: WINDOW_RIGHT - 204
@@ -196,7 +209,7 @@ Container@PLAYER_WIDGETS:
Height: 240
Background: panel-black
Children:
Button@OPTIONS_BUTTON:
MenuButton@OPTIONS_BUTTON:
Key: escape
X: 22
Y: 0-24
@@ -258,12 +271,16 @@ Container@PLAYER_WIDGETS:
Background: panel-gray
Children:
Radar@RADAR_MINIMAP:
Logic: IngameRadarDisplayLogic
X: 1
Y: 1
Width: PARENT_RIGHT-2
Height: PARENT_BOTTOM-2
WorldInteractionController: INTERACTION_CONTROLLER
Children:
LogicTicker@RADAR_TICKER:
Background@POWERBAR_PANEL:
Logic: IngamePowerBarLogic
X: 4
Y: 5
Width: 10
@@ -279,6 +296,7 @@ Container@PLAYER_WIDGETS:
TooltipTemplate: SIMPLE_TOOLTIP
IndicatorImage: indicator-left
Background@SILOBAR_PANEL:
Logic: IngameSiloBarLogic
X: 180
Y: 5
Width: 10
@@ -293,12 +311,14 @@ Container@PLAYER_WIDGETS:
TooltipContainer: TOOLTIP_CONTAINER
TooltipTemplate: SIMPLE_TOOLTIP
IndicatorImage: indicator-right
Label@CASH:
LabelWithTooltip@CASH:
Logic: IngameCashCounterLogic
Y: 170
Width: PARENT_RIGHT
Height: 25
Align: Center
Font: Bold
Text: ${0}
Container@PRODUCTION_TYPES:
X: 12
Y: 197
@@ -369,21 +389,29 @@ Container@PLAYER_WIDGETS:
X: 7
Y: 7
ImageCollection: production-icons
Container@PRODUCTION_BACKGROUND:
X: WINDOW_RIGHT - 204
Y: 287
Children:
Background@ICON_TEMPLATE:
Width: 66
Height: 50
Background: panel-black
ProductionPalette@PRODUCTION_PALETTE:
X: WINDOW_RIGHT - 203
Y: 288
TooltipContainer: TOOLTIP_CONTAINER
ReadyText: Ready
HoldText: On Hold
ProductionTabs@PRODUCTION_TABS:
Logic: ProductionTabsLogic
PaletteWidget: PRODUCTION_PALETTE
TypesContainer: PRODUCTION_TYPES
BackgroundContainer: PRODUCTION_BACKGROUND
X: WINDOW_RIGHT - 204
Y: 268
Width: 194
Height: 20
ProductionPalette@PRODUCTION_PALETTE:
X: WINDOW_RIGHT - 204
Y: 287
TooltipContainer: TOOLTIP_CONTAINER
ReadyText: Ready
HoldText: On Hold
Background@FMVPLAYER:
Width: WINDOW_RIGHT
Height: WINDOW_BOTTOM

View File

@@ -18,6 +18,7 @@ Background@BUTTON_TOOLTIP:
Height: 23
Font: Bold
Label@HOTKEY:
Visible: false
TextColor: 255,255,0
Height: 23
Font: Bold
@@ -55,6 +56,11 @@ Background@PRODUCTION_TOOLTIP:
X: 5
Height: 23
Font: Bold
Label@HOTKEY:
Visible: false
Height: 23
TextColor: 255,255,0
Font: Bold
Label@REQUIRES:
X: 5
Y: 19
@@ -67,21 +73,33 @@ Background@PRODUCTION_TOOLTIP:
Height: 23
Font: TinyBold
VAlign: Top
Image@COST_ICON:
Y: 5
Width: 16
ImageCollection: sidebar-bits
ImageName: production-tooltip-cost
Label@COST:
Height: 23
Font: Bold
Image@TIME_ICON:
X: 3
Y: 24
Width: 16
ImageCollection: sidebar-bits
ImageName: production-tooltip-time
Label@TIME:
Y: 19
Height: 23
Font: Bold
Image@POWER_ICON:
Y: 44
Width: 16
ImageCollection: sidebar-bits
ImageName: production-tooltip-power
Label@POWER:
Y: 39
Height: 23
Font: Bold
Label@TIME:
Y: 39
Height: 23
Font: Bold
Background@SUPPORT_POWER_TOOLTIP:
Logic: SupportPowerTooltipLogic

View File

@@ -88,11 +88,11 @@ ChromeLayout:
mods/cnc/chrome/replaybrowser.yaml
mods/cnc/chrome/ingame.yaml
mods/cnc/chrome/ingame-chat.yaml
mods/cnc/chrome/ingamemenu.yaml
mods/cnc/chrome/ingame-debug.yaml
mods/cnc/chrome/ingame-menu.yaml
mods/cnc/chrome/music.yaml
mods/cnc/chrome/settings.yaml
mods/cnc/chrome/credits.yaml
mods/cnc/chrome/cheats.yaml
mods/cnc/chrome/dialogs.yaml
mods/cnc/chrome/objectives.yaml
mods/cnc/chrome/tooltips.yaml

Binary file not shown.

Before

Width:  |  Height:  |  Size: 76 KiB

After

Width:  |  Height:  |  Size: 78 KiB

View File

@@ -1,6 +1,6 @@
Container@OBSERVER_WIDGETS:
Children:
Button@INGAME_STATS_BUTTON:
Button@OBSERVER_STATS_BUTTON:
X: 162
Y: 0
Width: 160

View File

@@ -11,12 +11,12 @@ Container@PLAYER_WIDGETS:
Text: Diplomacy (F1)
Font: Bold
Key: f1
Button@CHEATS_BUTTON:
Button@INGAME_DEBUG_BUTTON:
X: 324
Y: 0
Width: 160
Height: 25
Text: Cheats (F2)
Text: Debug (F2)
Visible: false
Font: Bold
Key: f2

View File

@@ -20,6 +20,7 @@ Background@BUTTON_TOOLTIP:
Height: 23
Font: Bold
Label@HOTKEY:
Visible: false
Y: 3
Height: 23
TextColor: 255,255,0

View File

@@ -65,6 +65,7 @@ ChromeLayout:
mods/d2k/chrome/ingame-observer.yaml
mods/ra/chrome/ingame-observerstats.yaml
mods/d2k/chrome/ingame-player.yaml
mods/ra/chrome/ingame-debug.yaml
mods/d2k/chrome/mainmenu.yaml
mods/ra/chrome/settings.yaml
mods/ra/chrome/credits.yaml
@@ -80,7 +81,6 @@ ChromeLayout:
mods/ra/chrome/directconnect.yaml
mods/ra/chrome/replaybrowser.yaml
mods/d2k/chrome/dropdowns.yaml
mods/ra/chrome/cheats.yaml
mods/ra/chrome/musicplayer.yaml
mods/d2k/chrome/tooltips.yaml
mods/ra/chrome/assetbrowser.yaml

View File

@@ -1,118 +1,94 @@
chrome-allies: chrome-allies.png
specialbin-top: 0,0,30,51
specialbin-middle: 0,51,30,51
specialbin-bottom: 0,153,30,39
moneybin: 192,0,320,31
radar: 297,31,210,222
tooltip-bg: 0,288,272,136
sidebar-allies: chrome.png
background-top: 0,167,238,290
background-iconrow: 0,457,238,47
background-bottom: 0,504,238,8
background-supportoverlay: 184,118,64,48
power-allies: chrome-allies.png
power-indicator: 187,4,4,7
sidebar-button-allies: chrome.png
background: 56,28,28,28
sidebar-button-allies-hover: chrome.png
background: 56,0,28,28
sidebar-button-allies-pressed: chrome.png
background: 56,28,28,28
sidebar-button-allies-highlighted: chrome.png
background: 84,28,28,28
sidebar-button-allies-highlighted-hover: chrome.png
background: 84,0,28,28
sidebar-button-allies-highlighted-pressed: chrome.png
background: 84,28,28,28
sidebar-button-allies-disabled: chrome.png
background: 112,0,28,28
sidebar-button-allies-highlighted-disabled: chrome.png
background: 112,0,28,28
palette-allies: chrome-allies.png
top: 297,288,201,9
dock-top: 498,274,14,23
bottom: 297,489,201,9
dock-bottom: 498,489,14,23
bg-0: 297,297,201,48
dock-0: 498,297,14,48
bg-1: 297,345,201,48
dock-1: 498,345,14,48
bg-2: 297,393,201,48
dock-2: 498,393,14,48
bg-3: 297,441,201,48
dock-3: 498,441,14,48
sidebar-soviet: chrome.png
background-top: 274,167,238,290
background-iconrow: 274,457,238,47
background-bottom: 274,504,238,8
background-supportoverlay: 249,118,64,48
digits-allies: chrome-allies.png
0: 32,0,13,17
1: 45,0,13,17
2: 58,0,13,17
3: 71,0,13,17
4: 84,0,13,17
5: 97,0,13,17
6: 110,0,13,17
7: 123,0,13,17
8: 136,0,13,17
9: 149,0,13,17
sidebar-button-soviet: chrome.png
background: 0,28,28,28
sidebar-button-soviet-hover: chrome.png
background: 0,0,28,28
sidebar-button-soviet-pressed: chrome.png
background: 0,28,28,28
sidebar-button-soviet-highlighted: chrome.png
background: 28,28,28,28
sidebar-button-soviet-highlighted-hover: chrome.png
background: 28,0,28,28
sidebar-button-soviet-highlighted-pressed: chrome.png
background: 28,28,28,28
sidebar-button-soviet-disabled: chrome.png
background: 112,0,28,28
sidebar-button-soviet-highlighted-disabled: chrome.png
background: 112,0,28,28
chrome-soviet: chrome-soviet.png
specialbin-top: 0,0,30,51
specialbin-middle: 0,51,30,51
specialbin-bottom: 0,153,30,39
moneybin: 192,0,320,31
radar: 297,31,210,222
tooltip-bg: 0,288,272,136
sidebar-bits: chrome.png
production-tooltip-time: 416, 80, 16, 16
production-tooltip-power: 432, 80, 16, 16
production-tooltip-cost: 448, 80, 16, 16
production-iconoverlay: 314,118,238,48
power-soviet: chrome-soviet.png
power-indicator: 187,4,4,7
production-icons: chrome.png
building: 384,0,16,16
building-disabled: 384,16,16,16
building-alert: 384,32,16,16
defense: 400,0,16,16
defense-disabled: 400,16,16,16
defense-alert: 400,32,16,16
infantry: 416,0,16,16
infantry-disabled: 416,16,16,16
infantry-alert: 416,32,16,16
vehicle: 432,0,16,16
vehicle-disabled: 432,16,16,16
vehicle-alert: 432,32,16,16
aircraft: 448,0,16,16
aircraft-disabled: 448,16,16,16
aircraft-alert: 448,32,16,16
ship: 496,48,16,16
ship-disabled: 496,64,16,16
ship-alert: 496,80,16,16
palette-soviet: chrome-soviet.png
top: 297,288,201,9
dock-top: 498,274,14,23
bottom: 297,489,201,9
dock-bottom: 498,489,14,23
bg-0: 297,297,201,48
dock-0: 498,297,14,48
bg-1: 297,345,201,48
dock-1: 498,345,14,48
bg-2: 297,393,201,48
dock-2: 498,393,14,48
bg-3: 297,441,201,48
dock-3: 498,441,14,48
digits-soviet: chrome-soviet.png
0: 32,0,13,17
1: 45,0,13,17
2: 58,0,13,17
3: 71,0,13,17
4: 84,0,13,17
5: 97,0,13,17
6: 110,0,13,17
7: 123,0,13,17
8: 136,0,13,17
9: 149,0,13,17
tabs-selected: tabs.png
allies-Building: 0,0,27,41
allies-Defense: 0,40,27,41
allies-Infantry: 0,80,27,41
allies-Vehicle: 0,120,27,41
allies-Aircraft: 162,200,27,41
allies-Ship: 0,200,27,41
soviet-Building: 81,0,27,41
soviet-Defense: 81,40,27,41
soviet-Infantry: 81,80,27,41
soviet-Vehicle: 81,120,27,41
soviet-Aircraft: 81,160,27,41
soviet-Ship: 81,200,27,41
tabs-ready: tabs.png
allies-Building: 27,0,27,41
allies-Defense: 27,40,27,41
allies-Infantry: 27,80,27,41
allies-Vehicle: 27,120,27,41
allies-Aircraft: 162,160,27,41
allies-Ship: 27,200,27,41
soviet-Building: 108,0,27,41
soviet-Defense: 108,40,27,41
soviet-Infantry: 108,80,27,41
soviet-Vehicle: 108,120,27,41
soviet-Aircraft: 108,160,27,41
soviet-Ship: 108,200,27,41
tabs-normal: tabs.png
allies-Building: 54,0,27,41
allies-Defense: 54,40,27,41
allies-Infantry: 54,80,27,41
allies-Vehicle: 54,120,27,41
allies-Aircraft: 162,120,27,41
allies-Ship: 54,200,27,41
soviet-Building: 135,0,27,41
soviet-Defense: 135,40,27,41
soviet-Infantry: 135,80,27,41
soviet-Vehicle: 135,120,27,41
soviet-Aircraft: 135,160,27,41
soviet-Ship: 135,200,27,41
order-icons: chrome.png
options: 480,0,16,16
options-disabled: 480,16,16,16
options-active: 480,32,16,16
diplomacy: 464,48,16,16
diplomacy-disabled: 464,64,16,16
diplomacy-active: 464,80,16,16
sell: 496,0,16,16
sell-disabled: 496,16,16,16
sell-active: 496,32,16,16
repair: 384,48,16,16
repair-disabled: 384,64,16,16
repair-active: 384,80,16,16
beacon: 400,48,16,16
beacon-disabled: 400,64,16,16
beacon-active: 400,80,16,16
power: 480,48,16,16
power-disabled: 480,64,16,16
power-active: 480,80,16,16
# Used for the menu
dialog: dialog.png
@@ -175,20 +151,6 @@ strategic: strategic.png
enemy_owned: 32,32,32,32
player_owned: 96,0,32,32
order-icons: buttons.png
sell: 0,0,34,28
sell-disabled: 68,0,34,28
sell-active: 34,0,34,28
repair: 0,28,34,28
repair-disabled: 68,28,34,28
repair-active: 34,28,34,28
power: 0,56,34,28
power-disabled: 68,56,34,28
power-active: 34,56,34,28
beacon: 0,84,34,28
beacon-disabled: 68,84,34,28
beacon-active: 34,84,34,28
flags: buttons.png
allies: 30,112,30,15
soviet: 0,112,30,15

View File

@@ -1,17 +1,16 @@
Background@CHEATS_PANEL:
Logic: CheatsLogic
Background@INGAME_DEBUG_BG:
Logic: DebugMenuLogic
X: (WINDOW_RIGHT - WIDTH)/2
Y: (WINDOW_BOTTOM - HEIGHT)/2
Width: 350
Height: 475
Visible: false
Children:
Label@LABEL_TITLE:
X: (PARENT_RIGHT - WIDTH)/2
Y: 20
Width: 250
Height: 25
Text: Cheats
Text: Debug Options
Align: Center
Font: Bold
Checkbox@DISABLE_SHROUD:
@@ -107,4 +106,5 @@ Background@CHEATS_PANEL:
Height: 25
Text: Close
Key: escape
Font: Bold

View File

@@ -1,10 +1,9 @@
Background@DIPLOMACY:
Background@INGAME_DIPLOMACY_BG:
Logic: DiplomacyLogic
X: 25
Y: 50
X: (WINDOW_RIGHT - WIDTH)/2
Y: (WINDOW_BOTTOM - HEIGHT)/2
Width: 490
Height: 300
Visible: false
Height: 355
Children:
Label@LABEL_TITLE:
X: (PARENT_RIGHT - WIDTH)/2
@@ -44,7 +43,7 @@ Background@DIPLOMACY:
X: 20
Y: 67
Width: PARENT_RIGHT-40
Height: PARENT_BOTTOM-87
Height: PARENT_BOTTOM-87-35
ItemSpacing: 5
Children:
ScrollItem@TEAM_TEMPLATE:
@@ -82,3 +81,11 @@ Background@DIPLOMACY:
Width: 100
Height: PARENT_BOTTOM
Button@CLOSE:
X: PARENT_RIGHT-145
Y: PARENT_BOTTOM - 45
Width: 120
Height: 25
Text: Close
Key: escape
Font: Bold

View File

@@ -4,7 +4,6 @@ Background@INGAME_OPTIONS_BG:
Width: 300
Height: 295
Logic: IngameMenuLogic
Visible: false
Children:
Label@LABEL_TITLE:
X: (PARENT_RIGHT - WIDTH)/2

View File

@@ -1,6 +1,40 @@
Container@OBSERVER_WIDGETS:
Logic: OrderButtonsChromeLogic
Children:
Button@INGAME_STATS_BUTTON:
Container@GAME_TIMER_BLOCK:
Logic: GameTimerLogic
X: WINDOW_RIGHT/2 - WIDTH
Width: 100
Height: 55
Children:
Label@GAME_TIMER:
Width: PARENT_RIGHT
Height: 15
Align: Center
Font: Title
Contrast: true
Label@GAME_TIMER_STATUS:
Y: 35
Width: PARENT_RIGHT
Height: 15
Align: Center
Font: Bold
Contrast: true
MenuButton@OPTIONS_BUTTON:
MenuContainer: INGAME_OPTIONS_BG
HideIngameUI: false
Pause: false
X: 0
Y: 0
Width: 160
Height: 25
Text: Options (ESC)
Font: Bold
Key: escape
MenuButton@OBSERVER_STATS_BUTTON:
MenuContainer: INGAME_OBSERVERSTATS_BG
HideIngameUI: false
Pause: false
X: 162
Y: 0
Width: 160

View File

@@ -1,15 +1,14 @@
Container@OBSERVER_STATS:
Background@INGAME_OBSERVERSTATS_BG:
Logic: ObserverStatsLogic
X: 25
Y: 50
Width: 950
Height: 500
Visible: false
Background: dialog
Children:
Background@BACKGROUND:
Container@BACKGROUND:
Width: PARENT_RIGHT
Height: PARENT_BOTTOM
Background: dialog
Height: PARENT_BOTTOM - 35
Children:
Label@TITLE:
X: 0
@@ -486,4 +485,11 @@ Container@OBSERVER_STATS:
YAxisLabel: $
LabelFont: TinyBold
AxisFont: Bold
Button@CLOSE:
X: PARENT_RIGHT - 145
Y: PARENT_BOTTOM - 45
Width: 120
Height: 25
Text: Close
Key: escape
Font: Bold

View File

@@ -3,23 +3,6 @@ Container@PLAYER_WIDGETS:
LogicKeyListener@CONTROLGROUP_KEYHANDLER:
Logic: ControlGroupLogic
LogicTicker@SIDEBAR_TICKER:
Button@INGAME_DIPLOMACY_BUTTON:
X: 162
Y: 0
Width: 160
Height: 25
Text: Diplomacy (F1)
Font: Bold
Key: f1
Button@CHEATS_BUTTON:
X: 324
Y: 0
Width: 160
Height: 25
Text: Cheats (F2)
Visible: false
Font: Bold
Key: f2
Button@OBJECTIVES_BUTTON:
X: 486
Y: 0
@@ -29,87 +12,333 @@ Container@PLAYER_WIDGETS:
Visible: false
Font: Bold
Key: f3
SlidingContainer@INGAME_RADAR_BIN:
X: WINDOW_RIGHT-215
Y: 0
OpenOffset: 0,29
ClosedOffset: 0,-166
AnimationLength: 15
Container@SUPPORT_POWERS:
Logic: SupportPowerBinLogic
X: 10
Y: 10
Children:
Image@RADAR_BIN_BG:
ImageName: radar
Radar@RADAR_MINIMAP:
WorldInteractionController: INTERACTION_CONTROLLER
SupportPowers@SUPPORT_PALETTE:
IconSize: 62, 46
IconSpriteOffset: -1, -1
TooltipContainer: TOOLTIP_CONTAINER
ReadyText: READY
HoldText: ON HOLD
Container@PALETTE_FOREGROUND:
Children:
Image@ICON_TEMPLATE:
Logic: AddRaceSuffixLogic
X:0-2
Y:0-2
Width: 62
Height: 46
IgnoreMouseOver: true
ImageCollection: sidebar
ImageName: background-supportoverlay
Image@SIDEBAR_BACKGROUND_TOP:
Logic: AddRaceSuffixLogic
X: WINDOW_RIGHT - 250
Y: 10
Width: 238
Height: 291
ImageCollection: sidebar
ImageName: background-top
ClickThrough: false
Children:
Container@TOP_BUTTONS:
Logic: OrderButtonsChromeLogic
X: 9
Width: 192
Height: 192
ResourceBar@POWERBAR:
X: 42
Y: 205
Width: 138
Height: 5
Y: 7
Children:
Button@BEACON_BUTTON:
Logic: AddRaceSuffixLogic
Width: 28
Height: 28
Background: sidebar-button
TooltipText: Place Beacon
TooltipContainer: TOOLTIP_CONTAINER
VisualHeight: 0
Children:
Image@ICON:
X: 6
Y: 6
ImageCollection: order-icons
Button@SELL_BUTTON:
Logic: AddRaceSuffixLogic
X: 32
Width: 28
Height: 28
Background: sidebar-button
TooltipText: Sell
TooltipContainer: TOOLTIP_CONTAINER
VisualHeight: 0
Children:
Image@ICON:
X: 6
Y: 6
ImageCollection: order-icons
Button@POWER_BUTTON:
Logic: AddRaceSuffixLogic
X: 64
Width: 28
Height: 28
Background: sidebar-button
TooltipText: Power Down
TooltipContainer: TOOLTIP_CONTAINER
VisualHeight: 0
Children:
Image@ICON:
X: 6
Y: 6
ImageCollection: order-icons
Button@REPAIR_BUTTON:
Logic: AddRaceSuffixLogic
X: 96
Width: 28
Height: 28
Background: sidebar-button
TooltipText: Repair
TooltipContainer: TOOLTIP_CONTAINER
VisualHeight: 0
Children:
Image@ICON:
X: 6
Y: 6
ImageCollection: order-icons
MenuButton@DEBUG_BUTTON:
Logic: AddRaceSuffixLogic
MenuContainer: INGAME_DEBUG_BG
HideIngameUI: false
Pause: false
Key: f2
X: 128
Width: 28
Height: 28
Background: sidebar-button
TooltipText: Debug Menu
TooltipContainer: TOOLTIP_CONTAINER
VisualHeight: 0
Children:
Image@ICON:
X: 6
Y: 6
ImageCollection: order-icons
ImageName: options
MenuButton@DIPLOMACY_BUTTON:
Logic: AddRaceSuffixLogic
MenuContainer: INGAME_DIPLOMACY_BG
HideIngameUI: false
Pause: false
Key: f1
X: 160
Width: 28
Height: 28
Background: sidebar-button
TooltipText: Diplomacy
TooltipContainer: TOOLTIP_CONTAINER
VisualHeight: 0
Children:
Image@ICON:
X: 6
Y: 6
ImageCollection: order-icons
ImageName: diplomacy
MenuButton@OPTIONS_BUTTON:
Logic: AddRaceSuffixLogic
MenuContainer: INGAME_OPTIONS_BG
HideIngameUI: false
Key: escape
X: 192
Width: 28
Height: 28
Background: sidebar-button
TooltipText: Options
TooltipContainer: TOOLTIP_CONTAINER
VisualHeight: 0
Children:
Image@ICON:
X: 6
Y: 6
ImageCollection: order-icons
ImageName: options
Container@RADAR:
Logic: IngameRadarDisplayLogic
Children:
LogicTicker@RADAR_TICKER:
ColorBlock@RADAR_FADETOBLACK:
X: 8
Y: 40
Width: 222
Height: 222
Radar@RADAR_MINIMAP:
WorldInteractionController: INTERACTION_CONTROLLER
X: 9
Y: 41
Width: 220
Height: 220
Children:
Label@GAME_TIMER:
Logic: GameTimerLogic
Y: 263
Width: PARENT_RIGHT
Height: 22
Align: Center
Font: TinyBold
LabelWithTooltip@CASH:
Logic: IngameCashCounterLogic
X: 35
Y: 262
Width: 50
Height: 22
Font: Bold
Text: {0}
TooltipContainer: TOOLTIP_CONTAINER
TooltipTemplate: SIMPLE_TOOLTIP
IndicatorImage: power-indicator
Orientation: Horizontal
Style: Bevelled
MoneyBin@INGAME_MONEY_BIN:
Logic: OrderButtonsChromeLogic
X: WINDOW_RIGHT - WIDTH
Width: 320
Height: 32
Children:
Button@BEACON_BUTTON:
X: 3-36
Width: 34
Height: 28
TooltipText: Place Beacon
LabelWithTooltip@POWER:
Logic: IngamePowerCounterLogic
X: PARENT_RIGHT - WIDTH - 30
Y: 262
Width: 50
Height: 22
Align: Right
Font: Bold
Text: {0}
TooltipContainer: TOOLTIP_CONTAINER
VisualHeight: 0
Children:
Image@ICON:
ImageCollection: order-icons
Button@SELL_BUTTON:
X: 3
Width: 34
Height: 28
TooltipText: Sell
TooltipContainer: TOOLTIP_CONTAINER
VisualHeight: 0
Children:
Image@ICON:
ImageCollection: order-icons
Button@POWER_BUTTON:
X: 39
Width: 34
Height: 28
TooltipText: Power Down
TooltipContainer: TOOLTIP_CONTAINER
VisualHeight: 0
Children:
Image@ICON:
ImageCollection: order-icons
Button@REPAIR_BUTTON:
X: 75
Width: 34
Height: 28
TooltipText: Repair
TooltipContainer: TOOLTIP_CONTAINER
VisualHeight: 0
Children:
Image@ICON:
ImageCollection: order-icons
SupportPowerBin@INGAME_POWERS_BIN:
X: 0
Y: 25
ReadyText: READY
HoldText: ON HOLD
BuildPalette@INGAME_BUILD_PALETTE:
TooltipTemplate: SIMPLE_TOOLTIP
Container@SIDEBAR_PRODUCTION:
Logic: ClassicProductionLogic
X: WINDOW_RIGHT - 250
Y: 280
Width: 250
Height: 500
ReadyText: READY
HoldText: ON HOLD
RequiresText: Requires {0}
Y: 300
Width: 238
Height: 250
Children:
Container@PALETTE_BACKGROUND:
Children:
Image@ROW_TEMPLATE:
Logic: AddRaceSuffixLogic
Width: 238
Height: 47
ClickThrough: false
ImageCollection: sidebar
ImageName: background-iconrow
Image@BOTTOM_CAP:
Logic: AddRaceSuffixLogic
Width: 238
Height: 8
ClickThrough: false
ImageCollection: sidebar
ImageName: background-bottom
LogicTicker@PRODUCTION_TICKER:
ProductionPalette@PRODUCTION_PALETTE:
X: 42
Y: 1
TooltipContainer: TOOLTIP_CONTAINER
ReadyText: READY
HoldText: ON HOLD
IconSize: 62, 46
IconMargin: 1, 1
IconSpriteOffset: -1, -1
Container@PALETTE_FOREGROUND:
X: 40
Y: 0-1
Children:
Image@ROW_TEMPLATE:
Width: 238
Height: 47
IgnoreMouseOver: true
ImageCollection: sidebar-bits
ImageName: production-iconoverlay
Container@PRODUCTION_TYPES:
X: 7
Y: 2
Width: 29
Height: 240
Children:
ProductionTypeButton@BUILDING:
Logic: AddRaceSuffixLogic
Width: 28
Height: 28
VisualHeight: 0
Background: sidebar-button
TooltipText: Buildings
TooltipContainer: TOOLTIP_CONTAINER
ProductionGroup: Building
Children:
Image@ICON:
X: 6
Y: 6
ImageCollection: production-icons
ProductionTypeButton@DEFENSE:
Logic: AddRaceSuffixLogic
Y: 31
Width: 28
Height: 28
VisualHeight: 0
Background: sidebar-button
TooltipText: Defense
TooltipContainer: TOOLTIP_CONTAINER
ProductionGroup: Defense
Children:
Image@ICON:
X: 6
Y: 6
ImageCollection: production-icons
ProductionTypeButton@INFANTRY:
Logic: AddRaceSuffixLogic
Y: 62
Width: 28
Height: 28
VisualHeight: 0
Background: sidebar-button
TooltipText: Infantry
TooltipContainer: TOOLTIP_CONTAINER
ProductionGroup: Infantry
Children:
Image@ICON:
X: 6
Y: 6
ImageCollection: production-icons
ProductionTypeButton@VEHICLE:
Logic: AddRaceSuffixLogic
Y: 93
Width: 28
Height: 28
VisualHeight: 0
Background: sidebar-button
TooltipText: Vehicles
TooltipContainer: TOOLTIP_CONTAINER
ProductionGroup: Vehicle
Children:
Image@ICON:
X: 6
Y: 6
ImageCollection: production-icons
ProductionTypeButton@AIRCRAFT:
Logic: AddRaceSuffixLogic
Y: 124
Width: 28
Height: 28
VisualHeight: 0
Background: sidebar-button
TooltipText: Aircraft
TooltipContainer: TOOLTIP_CONTAINER
ProductionGroup: Aircraft
Children:
Image@ICON:
X: 6
Y: 6
ImageCollection: production-icons
ProductionTypeButton@AIRCRAFT:
Logic: AddRaceSuffixLogic
Y: 155
Width: 28
Height: 28
VisualHeight: 0
Background: sidebar-button
TooltipText: Naval
TooltipContainer: TOOLTIP_CONTAINER
ProductionGroup: Ship
Children:
Image@ICON:
X: 6
Y: 6
ImageCollection: production-icons

View File

@@ -1,5 +1,5 @@
Container@INGAME_ROOT:
Logic: IngameChromeLogic
Logic: LoadIngamePlayerOrObserverUILogic
Children:
LogicTicker@DISCONNECT_WATCHER:
Logic: DisconnectWatcherLogic
@@ -19,41 +19,14 @@ Container@INGAME_ROOT:
Y: 0
Width: WINDOW_RIGHT
Height: WINDOW_BOTTOM
Container@GAME_TIMER_BLOCK:
Logic: GameTimerLogic
X: WINDOW_RIGHT/2 - WIDTH
Width: 100
Height: 55
Children:
Label@GAME_TIMER:
Width: PARENT_RIGHT
Height: 15
Align: Center
Font: Title
Contrast: true
Label@GAME_TIMER_STATUS:
Y: 35
Width: PARENT_RIGHT
Height: 15
Align: Center
Font: Bold
Contrast: true
StrategicProgress@STRATEGIC_PROGRESS:
X: WINDOW_RIGHT/2
Y: 40
SupportPowerTimer@SUPPORT_POWER_TIMER:
X: 80
Y: 34
Y: 10
Order: Descending
Container@PLAYER_ROOT:
Button@INGAME_OPTIONS_BUTTON:
X: 0
Y: 0
Width: 160
Height: 25
Text: Options (ESC)
Font: Bold
Key: escape
Container@PERFORMANCE_INFO:
Logic: PerfDebugLogic
Children:

View File

@@ -20,6 +20,7 @@ Background@BUTTON_TOOLTIP:
Height: 23
Font: Bold
Label@HOTKEY:
Visible: false
Y: 2
Height: 23
TextColor: 255,255,0
@@ -107,3 +108,81 @@ Background@CLIENT_TOOLTIP:
Height: 10
Font: TinyBold
Background@PRODUCTION_TOOLTIP:
Logic: ProductionTooltipLogic
Background: dialog4
Width: 200
Height: 65
Children:
Label@NAME:
X: 7
Y: 2
Height: 23
Font: Bold
Label@HOTKEY:
Visible: false
Y: 2
Height: 23
TextColor: 255,255,0
Font: Bold
Label@REQUIRES:
X: 7
Y: 21
Height: 23
Font: TinyBold
Text: Requires {0}
Label@DESC:
X: 7
Y: 41
Height: 23
Font: TinyBold
VAlign: Top
Image@COST_ICON:
Y: 5
Width: 16
ImageCollection: sidebar-bits
ImageName: production-tooltip-cost
Label@COST:
Height: 23
Font: Bold
Image@TIME_ICON:
X: 3
Y: 26
Width: 16
ImageCollection: sidebar-bits
ImageName: production-tooltip-time
Label@TIME:
Y: 21
Height: 23
Font: Bold
Image@POWER_ICON:
Y: 46
Width: 16
ImageCollection: sidebar-bits
ImageName: production-tooltip-power
Label@POWER:
Y: 41
Height: 23
Font: Bold
Background@SUPPORT_POWER_TOOLTIP:
Logic: SupportPowerTooltipLogic
Background: dialog4
Width: 200
Height: 29
Children:
Label@NAME:
X: 7
Y: 2
Height: 20
Font: Bold
Label@TIME:
X: 20
Y: 8
Font: TinyBold
VAlign: Top
Label@DESC:
X: 7
Y: 22
Font: TinyBold
VAlign: Top

View File

@@ -79,6 +79,7 @@ ChromeLayout:
mods/ra/chrome/ingame-observer.yaml
mods/ra/chrome/ingame-observerstats.yaml
mods/ra/chrome/ingame-player.yaml
mods/ra/chrome/ingame-debug.yaml
mods/ra/chrome/mainmenu.yaml
mods/ra/chrome/settings.yaml
mods/ra/chrome/credits.yaml
@@ -94,7 +95,6 @@ ChromeLayout:
mods/ra/chrome/directconnect.yaml
mods/ra/chrome/replaybrowser.yaml
mods/ra/chrome/dropdowns.yaml
mods/ra/chrome/cheats.yaml
mods/ra/chrome/musicplayer.yaml
mods/ra/chrome/tooltips.yaml
mods/ra/chrome/assetbrowser.yaml

View File

@@ -39,9 +39,6 @@ Sounds:
DisablePower: bleep11
EnablePower: bleep12
ChatLine: scold1
BuildPaletteOpen: bleep13
BuildPaletteClose: bleep13
TabClick: ramenu1
ClickSound:
ClickSound: ramenu1
ClickDisabledSound:
Beacon: beepslct

View File

@@ -16,7 +16,8 @@ World:
LightPaletteRotator:
ExcludePalettes: terrain, effect
BuildingInfluence:
ChooseBuildTabOnSelect:
ProductionQueueFromSelection:
ProductionPaletteWidget: PRODUCTION_PALETTE
BridgeLayer:
Bridges: bridge1, bridge2, br1, br2, br3, sbridge1, sbridge2, sbridge3, sbridge4
CrateSpawner:

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

BIN
mods/ra/uibits/chrome.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

View File

@@ -0,0 +1,115 @@
Container@PLAYER_WIDGETS:
Children:
LogicKeyListener@CONTROLGROUP_KEYHANDLER:
Logic: ControlGroupLogic
LogicTicker@SIDEBAR_TICKER:
Button@INGAME_DIPLOMACY_BUTTON:
X: 162
Y: 0
Width: 160
Height: 25
Text: Diplomacy (F1)
Font: Bold
Key: f1
Button@INGAME_DEBUG_BUTTON:
X: 324
Y: 0
Width: 160
Height: 25
Text: Cheats (F2)
Visible: false
Font: Bold
Key: f2
Button@OBJECTIVES_BUTTON:
X: 486
Y: 0
Width: 160
Height: 25
Text: Objectives (F3)
Visible: false
Font: Bold
Key: f3
SlidingContainer@INGAME_RADAR_BIN:
X: WINDOW_RIGHT-215
Y: 0
OpenOffset: 0,29
ClosedOffset: 0,-166
AnimationLength: 15
Children:
Image@RADAR_BIN_BG:
ImageName: radar
Radar@RADAR_MINIMAP:
WorldInteractionController: INTERACTION_CONTROLLER
X: 9
Width: 192
Height: 192
ResourceBar@POWERBAR:
X: 42
Y: 205
Width: 138
Height: 5
TooltipContainer: TOOLTIP_CONTAINER
TooltipTemplate: SIMPLE_TOOLTIP
IndicatorImage: power-indicator
Orientation: Horizontal
Style: Bevelled
MoneyBin@INGAME_MONEY_BIN:
Logic: OrderButtonsChromeLogic
X: WINDOW_RIGHT - WIDTH
Width: 320
Height: 32
Children:
Button@BEACON_BUTTON:
X: 3-36
Width: 34
Height: 28
TooltipText: Place Beacon
TooltipContainer: TOOLTIP_CONTAINER
VisualHeight: 0
Children:
Image@ICON:
ImageCollection: order-icons
Button@SELL_BUTTON:
X: 3
Width: 34
Height: 28
TooltipText: Sell
TooltipContainer: TOOLTIP_CONTAINER
VisualHeight: 0
Children:
Image@ICON:
ImageCollection: order-icons
Button@POWER_BUTTON:
X: 39
Width: 34
Height: 28
TooltipText: Power Down
TooltipContainer: TOOLTIP_CONTAINER
VisualHeight: 0
Children:
Image@ICON:
ImageCollection: order-icons
Button@REPAIR_BUTTON:
X: 75
Width: 34
Height: 28
TooltipText: Repair
TooltipContainer: TOOLTIP_CONTAINER
VisualHeight: 0
Children:
Image@ICON:
ImageCollection: order-icons
SupportPowerBin@INGAME_POWERS_BIN:
X: 0
Y: 25
ReadyText: READY
HoldText: ON HOLD
BuildPalette@INGAME_BUILD_PALETTE:
X: WINDOW_RIGHT - 250
Y: 280
Width: 250
Height: 500
ReadyText: READY
HoldText: ON HOLD
RequiresText: Requires {0}

View File

@@ -0,0 +1,80 @@
Container@INGAME_ROOT:
Logic: IngameChromeLogic
Children:
LogicTicker@DISCONNECT_WATCHER:
Logic: DisconnectWatcherLogic
WorldInteractionController@INTERACTION_CONTROLLER:
X: 0
Y: 0
Width: WINDOW_RIGHT
Height: WINDOW_BOTTOM
ViewportController:
X: 0
Y: 0
Width: WINDOW_RIGHT
Height: WINDOW_BOTTOM
TooltipContainer: TOOLTIP_CONTAINER
WorldCommand:
X: 0
Y: 0
Width: WINDOW_RIGHT
Height: WINDOW_BOTTOM
Container@GAME_TIMER_BLOCK:
Logic: GameTimerLogic
X: WINDOW_RIGHT/2 - WIDTH
Width: 100
Height: 55
Children:
Label@GAME_TIMER:
Width: PARENT_RIGHT
Height: 15
Align: Center
Font: Title
Contrast: true
Label@GAME_TIMER_STATUS:
Y: 35
Width: PARENT_RIGHT
Height: 15
Align: Center
Font: Bold
Contrast: true
StrategicProgress@STRATEGIC_PROGRESS:
X: WINDOW_RIGHT/2
Y: 40
SupportPowerTimer@SUPPORT_POWER_TIMER:
X: 80
Y: 34
Order: Descending
Container@PLAYER_ROOT:
Button@INGAME_OPTIONS_BUTTON:
X: 0
Y: 0
Width: 160
Height: 25
Text: Options (ESC)
Font: Bold
Key: escape
Container@PERFORMANCE_INFO:
Logic: PerfDebugLogic
Children:
Label@PERF_TEXT:
X: WINDOW_RIGHT - 200
Y: WINDOW_BOTTOM - 70
Width: 170
Height: 40
Contrast: true
Background@GRAPH_BG:
ClickThrough: true
Background: dialog4
X: 30
Y: WINDOW_BOTTOM - 240
Width: 210
Height: 210
Children:
PerfGraph@GRAPH:
X: 5
Y: 5
Width: 200
Height: 200
TooltipContainer@TOOLTIP_CONTAINER:

View File

@@ -99,7 +99,7 @@ Assemblies:
ChromeLayout:
mods/ts/chrome/install.yaml
mods/ra/chrome/ingame.yaml
mods/ts/chrome/ingame.yaml
mods/ra/chrome/ingame-chat.yaml
mods/ra/chrome/ingame-diplomacy.yaml
mods/ra/chrome/ingame-fmvplayer.yaml
@@ -107,7 +107,8 @@ ChromeLayout:
mods/ra/chrome/ingame-objectives.yaml
mods/ra/chrome/ingame-observer.yaml
mods/ra/chrome/ingame-observerstats.yaml
mods/ra/chrome/ingame-player.yaml
mods/ts/chrome/ingame-player.yaml
mods/ra/chrome/ingame-debug.yaml
mods/ra/chrome/mainmenu.yaml
mods/ra/chrome/settings.yaml
mods/ra/chrome/credits.yaml
@@ -123,7 +124,6 @@ ChromeLayout:
mods/ra/chrome/directconnect.yaml
mods/ra/chrome/replaybrowser.yaml
mods/ra/chrome/dropdowns.yaml
mods/ra/chrome/cheats.yaml
mods/ra/chrome/musicplayer.yaml
mods/ra/chrome/tooltips.yaml
mods/ra/chrome/assetbrowser.yaml