IChromeButton support & RA rules change for it

This commit is contained in:
Chris Forbes
2010-02-26 21:05:35 +13:00
parent b976447d67
commit e0ecebf204
5 changed files with 70 additions and 40 deletions

View File

@@ -685,50 +685,22 @@ namespace OpenRa
rgbaRenderer.Flush();
}
const int chromeButtonGap = 2;
void DrawButtons( World world )
{
int2 buttonOrigin = new int2(Game.viewport.Width - 320, 2);
// Repair
Rectangle repairRect = new Rectangle(buttonOrigin.X, buttonOrigin.Y, repairButton.Image.bounds.Width, repairButton.Image.bounds.Height);
var repairDrawPos = new float2(repairRect.Location);
var origin = new int2(Game.viewport.Width - 200, 2);
var hasFact = world.Queries.OwnedBy[world.LocalPlayer].WithTrait<ConstructionYard>().Any();
if (Game.Settings.RepairRequiresConyard && !hasFact)
repairButton.ReplaceAnim("disabled");
else
foreach (var cb in world.WorldActor.traits.WithInterface<IChromeButton>())
{
repairButton.ReplaceAnim(Game.controller.orderGenerator is RepairOrderGenerator ? "pressed" : "normal");
AddButton(repairRect, isLmb => Game.controller.ToggleInputMode<RepairOrderGenerator>());
var button = cb;
var anim = new Animation(cb.Image);
anim.Play(cb.Enabled ? cb.Pressed ? "pressed" : "normal" : "disabled");
origin.X -= (int)anim.Image.size.X + chromeButtonGap;
shpRenderer.DrawSprite(anim.Image, origin, "chrome");
AddButton(new RectangleF(origin.X, origin.Y, anim.Image.size.X, anim.Image.size.Y),
_ => { if (button.Enabled) button.OnClick(); });
}
shpRenderer.DrawSprite(repairButton.Image, repairDrawPos, "chrome");
// Sell
Rectangle sellRect = new Rectangle(buttonOrigin.X+40, buttonOrigin.Y,
sellButton.Image.bounds.Width, sellButton.Image.bounds.Height);
var sellDrawPos = new float2(sellRect.Location);
sellButton.ReplaceAnim(Game.controller.orderGenerator is SellOrderGenerator ? "pressed" : "normal");
AddButton(sellRect, isLmb => Game.controller.ToggleInputMode<SellOrderGenerator>());
shpRenderer.DrawSprite(sellButton.Image, sellDrawPos, "chrome");
shpRenderer.Flush();
if (Game.Settings.PowerDownBuildings)
{
// Power Down
Rectangle pwrdownRect = new Rectangle(buttonOrigin.X+80, buttonOrigin.Y,
pwrdownButton.Image.bounds.Width, pwrdownButton.Image.bounds.Height);
var pwrdownDrawPos = new float2(pwrdownRect.Location);
pwrdownButton.ReplaceAnim(Game.controller.orderGenerator is PowerDownOrderGenerator ? "pressed" : "normal");
AddButton(pwrdownRect, isLmb => Game.controller.ToggleInputMode<PowerDownOrderGenerator>());
shpRenderer.DrawSprite(pwrdownButton.Image, pwrdownDrawPos, "chrome");
}
shpRenderer.Flush();
//Options
Rectangle optionsRect = new Rectangle(0,0, optionsButton.Image.bounds.Width,

View File

@@ -108,6 +108,7 @@
<Compile Include="Support\PerfHistory.cs" />
<Compile Include="Sync.cs" />
<Compile Include="Traits\Attack\AttackOmni.cs" />
<Compile Include="Traits\Chrome\PowerDownButton.cs" />
<Compile Include="Traits\CustomSellValue.cs" />
<Compile Include="Traits\Player\SpawnDefaultUnits.cs" />
<Compile Include="Traits\World\BridgeLoadHook.cs" />

View File

@@ -0,0 +1,47 @@
using System;
using System.Linq;
using OpenRa.Orders;
namespace OpenRa.Traits
{
class PowerDownButtonInfo : StatelessTraitInfo<PowerDownButton> { }
class PowerDownButton : IChromeButton
{
public string Image { get { return "repair"; } } // todo: art
public bool Enabled { get { return true; } }
public bool Pressed { get { return Game.controller.orderGenerator is PowerDownOrderGenerator; } }
public void OnClick() { Game.controller.ToggleInputMode<PowerDownOrderGenerator>(); }
}
class SellButtonInfo : StatelessTraitInfo<SellButton> { }
class SellButton : IChromeButton
{
public string Image { get { return "sell"; } }
public bool Enabled { get { return true; } }
public bool Pressed { get { return Game.controller.orderGenerator is SellOrderGenerator; } }
public void OnClick() { Game.controller.ToggleInputMode<SellOrderGenerator>(); }
}
class RepairButtonInfo : StatelessTraitInfo<RepairButton> { }
class RepairButton : IChromeButton
{
public string Image { get { return "repair"; } } // todo: art
public bool Enabled
{
get
{
if (!Game.Settings.RepairRequiresConyard)
return true;
return Game.world.Queries.OwnedBy[Game.world.LocalPlayer]
.WithTrait<ConstructionYard>().Any();
}
}
public bool Pressed { get { return Game.controller.orderGenerator is RepairOrderGenerator; } }
public void OnClick() { Game.controller.ToggleInputMode<RepairOrderGenerator>(); }
}
}

View File

@@ -132,4 +132,12 @@ namespace OpenRa.Traits
IActivity Tick(Actor self);
void Cancel(Actor self);
}
public interface IChromeButton
{
string Image { get; }
bool Enabled { get; }
bool Pressed { get; }
void OnClick();
}
}

View File

@@ -188,7 +188,9 @@ World:
Country@7:
Name: Spain
Race: allies
SellButton:
RepairButton:
PowerDownButton:
MGG:
GeneratesGap: