StyleCop clean Cnc DLL

This commit is contained in:
Matthias Mailänder
2013-08-03 18:14:54 +02:00
parent bcce9ea7f0
commit d278bc84d1
24 changed files with 315 additions and 307 deletions

View File

@@ -19,19 +19,19 @@ namespace OpenRA.Mods.Cnc
{
public class CncLoadScreen : ILoadScreen
{
Dictionary<string, string> Info;
Dictionary<string, string> loadInfo;
Stopwatch loadTimer = new Stopwatch();
Sprite[] ss;
int loadTick;
float2 nodPos, gdiPos, evaPos;
Sprite nodLogo, gdiLogo, evaLogo, brightBlock, dimBlock;
Rectangle Bounds;
Rectangle bounds;
Renderer r;
NullInputHandler nih = new NullInputHandler();
public void Init(Dictionary<string, string> info)
{
Info = info;
loadInfo = info;
// Avoid standard loading mechanisms so we
// can display loadscreen as early as possible
@@ -40,26 +40,26 @@ namespace OpenRA.Mods.Cnc
var s = new Sheet("mods/cnc/uibits/chrome.png");
var res = Renderer.Resolution;
Bounds = new Rectangle(0, 0, res.Width, res.Height);
bounds = new Rectangle(0, 0, res.Width, res.Height);
ss = new []
ss = new[]
{
new Sprite(s, new Rectangle(161,128,62,33), TextureChannel.Alpha),
new Sprite(s, new Rectangle(161,223,62,33), TextureChannel.Alpha),
new Sprite(s, new Rectangle(128,161,33,62), TextureChannel.Alpha),
new Sprite(s, new Rectangle(223,161,33,62), TextureChannel.Alpha),
new Sprite(s, new Rectangle(128,128,33,33), TextureChannel.Alpha),
new Sprite(s, new Rectangle(223,128,33,33), TextureChannel.Alpha),
new Sprite(s, new Rectangle(128,223,33,33), TextureChannel.Alpha),
new Sprite(s, new Rectangle(223,223,33,33), TextureChannel.Alpha)
new Sprite(s, new Rectangle(161, 128, 62, 33), TextureChannel.Alpha),
new Sprite(s, new Rectangle(161, 223, 62, 33), TextureChannel.Alpha),
new Sprite(s, new Rectangle(128, 161, 33, 62), TextureChannel.Alpha),
new Sprite(s, new Rectangle(223, 161, 33, 62), TextureChannel.Alpha),
new Sprite(s, new Rectangle(128, 128, 33, 33), TextureChannel.Alpha),
new Sprite(s, new Rectangle(223, 128, 33, 33), TextureChannel.Alpha),
new Sprite(s, new Rectangle(128, 223, 33, 33), TextureChannel.Alpha),
new Sprite(s, new Rectangle(223, 223, 33, 33), TextureChannel.Alpha)
};
nodLogo = new Sprite(s, new Rectangle(0, 256, 256, 256), TextureChannel.Alpha);
gdiLogo = new Sprite(s, new Rectangle(256, 256, 256, 256), TextureChannel.Alpha);
evaLogo = new Sprite(s, new Rectangle(256, 64, 128, 64), TextureChannel.Alpha);
nodPos = new float2(Bounds.Width / 2 - 384, Bounds.Height / 2 - 128);
gdiPos = new float2(Bounds.Width / 2 + 128, Bounds.Height / 2 - 128);
evaPos = new float2(Bounds.Width - 43 - 128, 43);
nodPos = new float2(bounds.Width / 2 - 384, bounds.Height / 2 - 128);
gdiPos = new float2(bounds.Width / 2 + 128, bounds.Height / 2 - 128);
evaPos = new float2(bounds.Width - 43 - 128, 43);
brightBlock = new Sprite(s, new Rectangle(320, 0, 16, 35), TextureChannel.Alpha);
dimBlock = new Sprite(s, new Rectangle(336, 0, 16, 35), TextureChannel.Alpha);
@@ -83,19 +83,19 @@ namespace OpenRA.Mods.Cnc
r.RgbaSpriteRenderer.DrawSprite(nodLogo, nodPos);
r.RgbaSpriteRenderer.DrawSprite(evaLogo, evaPos);
WidgetUtils.DrawPanelPartial(ss, Bounds, PanelSides.Edges);
var barY = Bounds.Height - 78;
WidgetUtils.DrawPanelPartial(ss, bounds, PanelSides.Edges);
var barY = bounds.Height - 78;
if (!setup && r.Fonts != null)
{
loadingFont = r.Fonts["BigBold"];
loadingText = "Loading";
loadingPos = new float2((Bounds.Width - loadingFont.Measure(loadingText).X) / 2, barY);
loadingPos = new float2((bounds.Width - loadingFont.Measure(loadingText).X) / 2, barY);
versionFont = r.Fonts["Regular"];
versionText = WidgetUtils.ActiveModVersion();
var versionSize = versionFont.Measure(versionText);
versionPos = new float2(Bounds.Width - 107 - versionSize.X/2, 115 - versionSize.Y/2);
versionPos = new float2(bounds.Width - 107 - versionSize.X / 2, 115 - versionSize.Y / 2);
setup = true;
}
@@ -109,9 +109,9 @@ namespace OpenRA.Mods.Cnc
{
var block = loadTick == i ? brightBlock : dimBlock;
r.RgbaSpriteRenderer.DrawSprite(block,
new float2(Bounds.Width / 2 - 114 - i * 32, barY));
new float2(bounds.Width / 2 - 114 - i * 32, barY));
r.RgbaSpriteRenderer.DrawSprite(block,
new float2(Bounds.Width / 2 + 114 + i * 32 - 16, barY));
new float2(bounds.Width / 2 + 114 + i * 32 - 16, barY));
}
r.EndFrame(nih);
@@ -125,19 +125,18 @@ namespace OpenRA.Mods.Cnc
void TestAndContinue()
{
Ui.ResetAll();
if (!FileSystem.Exists(Info["TestFile"]))
if (!FileSystem.Exists(loadInfo["TestFile"]))
{
var args = new WidgetArgs()
{
{ "continueLoading", () => TestAndContinue() },
{ "installData", Info }
{ "installData", loadInfo }
};
Ui.LoadWidget(Info["InstallerBackgroundWidget"], Ui.Root, args);
Ui.OpenWindow(Info["InstallerMenuWidget"], args);
Ui.LoadWidget(loadInfo["InstallerBackgroundWidget"], Ui.Root, args);
Ui.OpenWindow(loadInfo["InstallerMenuWidget"], args);
}
else
Game.LoadShellMap();
}
}
}

View File

@@ -49,7 +49,7 @@ namespace OpenRA.Mods.Cnc
Color ColorForEffect(EffectType t, Color orig)
{
switch(t)
switch (t)
{
case EffectType.Black:
return Color.FromArgb(orig.A, Color.Black);
@@ -62,7 +62,7 @@ namespace OpenRA.Mods.Cnc
}
}
public void AdjustPalette(Dictionary<string,Palette> palettes)
public void AdjustPalette(Dictionary<string, Palette> palettes)
{
if (to == EffectType.None && remainingFrames == 0)
return;

View File

@@ -19,18 +19,18 @@ namespace OpenRA.Mods.RA
{
class CncShellmapScriptInfo : TraitInfo<CncShellmapScript> { }
class CncShellmapScript: IWorldLoaded, ITick
class CncShellmapScript : IWorldLoaded, ITick
{
Dictionary<string, Actor> Actors;
static CPos ViewportOrigin;
static CPos viewportOrigin;
Dictionary<string, Actor> actors;
public void WorldLoaded(World w)
{
var b = w.Map.Bounds;
ViewportOrigin = new CPos(b.Left + b.Width/2, b.Top + b.Height/2);
Game.MoveViewport(ViewportOrigin.ToFloat2());
viewportOrigin = new CPos(b.Left + b.Width / 2, b.Top + b.Height / 2);
Game.MoveViewport(viewportOrigin.ToFloat2());
Actors = w.WorldActor.Trait<SpawnMapActors>().Actors;
actors = w.WorldActor.Trait<SpawnMapActors>().Actors;
SetViewport();
}
@@ -38,7 +38,7 @@ namespace OpenRA.Mods.RA
void SetViewport()
{
var t = (ticks + 45) % (360f * speed) * (Math.PI / 180) * 1f / speed;
var loc = ViewportOrigin.ToFloat2() + (new float2(-15,4) * float2.FromAngle( (float)t ));
var loc = viewportOrigin.ToFloat2() + (new float2(-15, 4) * float2.FromAngle((float)t));
Game.viewport.Center(loc);
}
@@ -51,16 +51,16 @@ namespace OpenRA.Mods.RA
if (ticks == 0)
{
LoopTrack(Actors["boat1"], Actors["tl1"].Location, Actors["tr1"].Location);
LoopTrack(Actors["boat3"], Actors["tl1"].Location, Actors["tr1"].Location);
LoopTrack(Actors["boat2"], Actors["tl3"].Location, Actors["tr3"].Location);
LoopTrack(Actors["boat4"], Actors["tl3"].Location, Actors["tr3"].Location);
CreateUnitsInTransport(Actors["lst1"], new string[] {"htnk"});
CreateUnitsInTransport(Actors["lst2"], new string[] {"mcv"});
CreateUnitsInTransport(Actors["lst3"], new string[] {"htnk"});
LoopTrack(Actors["lst1"], Actors["tl2"].Location, Actors["tr2"].Location);
LoopTrack(Actors["lst2"], Actors["tl2"].Location, Actors["tr2"].Location);
LoopTrack(Actors["lst3"], Actors["tl2"].Location, Actors["tr2"].Location);
LoopTrack(actors["boat1"], actors["tl1"].Location, actors["tr1"].Location);
LoopTrack(actors["boat3"], actors["tl1"].Location, actors["tr1"].Location);
LoopTrack(actors["boat2"], actors["tl3"].Location, actors["tr3"].Location);
LoopTrack(actors["boat4"], actors["tl3"].Location, actors["tr3"].Location);
CreateUnitsInTransport(actors["lst1"], new string[] { "htnk" });
CreateUnitsInTransport(actors["lst2"], new string[] { "mcv" });
CreateUnitsInTransport(actors["lst3"], new string[] { "htnk" });
LoopTrack(actors["lst1"], actors["tl2"].Location, actors["tr2"].Location);
LoopTrack(actors["lst2"], actors["tl2"].Location, actors["tr2"].Location);
LoopTrack(actors["lst3"], actors["tl2"].Location, actors["tr2"].Location);
}
ticks++;
@@ -73,8 +73,8 @@ namespace OpenRA.Mods.RA
foreach (var i in cargo)
c.Load(transport, transport.World.CreateActor(false, i.ToLowerInvariant(), new TypeDictionary
{
new OwnerInit( transport.Owner ),
new FacingInit( f.Facing ),
new OwnerInit(transport.Owner),
new FacingInit(f.Facing),
}));
}
@@ -83,7 +83,7 @@ namespace OpenRA.Mods.RA
var mobile = self.Trait<Mobile>();
self.QueueActivity(mobile.ScriptedMove(left));
self.QueueActivity(new SimpleTeleport(right));
self.QueueActivity(new CallFunc(() => LoopTrack(self,left,right)));
self.QueueActivity(new CallFunc(() => LoopTrack(self, left, right)));
}
}
}

View File

@@ -15,25 +15,25 @@ using OpenRA.FileFormats;
using OpenRA.Mods.RA;
using OpenRA.Mods.RA.Activities;
using OpenRA.Mods.RA.Move;
using OpenRA.Scripting;
using OpenRA.Traits;
using OpenRA.Widgets;
using OpenRA.Scripting;
namespace OpenRA.Mods.Cnc.Missions
{
class Gdi01ScriptInfo : TraitInfo<Gdi01Script> { }
class Gdi01Script: IWorldLoaded, ITick
class Gdi01Script : IWorldLoaded, ITick
{
Dictionary<string, Actor> Actors;
Dictionary<string, Player> Players;
Dictionary<string, Actor> actors;
Dictionary<string, Player> players;
public void WorldLoaded(World w)
{
Players = w.Players.ToDictionary(p => p.InternalName);
Actors = w.WorldActor.Trait<SpawnMapActors>().Actors;
players = w.Players.ToDictionary(p => p.InternalName);
actors = w.WorldActor.Trait<SpawnMapActors>().Actors;
var b = w.Map.Bounds;
Game.MoveViewport(new CPos(b.Left + b.Width/2, b.Top + b.Height/2).ToFloat2());
Game.MoveViewport(new CPos(b.Left + b.Width / 2, b.Top + b.Height / 2).ToFloat2());
Action afterFMV = () =>
{
@@ -48,10 +48,10 @@ namespace OpenRA.Mods.Cnc.Missions
{
Action afterFMV = () =>
{
Players["GoodGuy"].WinState = WinState.Won;
players["GoodGuy"].WinState = WinState.Won;
started = false;
Sound.StopMusic();
Sound.PlayToPlayer(Players["GoodGuy"], "accom1.aud");
Sound.PlayToPlayer(players["GoodGuy"], "accom1.aud");
};
Game.RunAfterDelay(0, () => Media.PlayFMVFullscreen(w, "consyard.vqa", afterFMV));
}
@@ -60,10 +60,10 @@ namespace OpenRA.Mods.Cnc.Missions
{
Action afterFMV = () =>
{
Players["GoodGuy"].WinState = WinState.Lost;
players["GoodGuy"].WinState = WinState.Lost;
started = false;
Sound.StopMusic();
Sound.PlayToPlayer(Players["GoodGuy"], "fail1.aud");
Sound.PlayToPlayer(players["GoodGuy"], "fail1.aud");
};
Game.RunAfterDelay(0, () => Media.PlayFMVFullscreen(w, "gameover.vqa", afterFMV));
}
@@ -82,27 +82,29 @@ namespace OpenRA.Mods.Cnc.Missions
SetGunboatPath();
self.World.AddFrameEndTask(w =>
{
//Initial Nod reinforcements
foreach (var i in new[]{ "e1", "e1" })
// Initial Nod reinforcements
foreach (var i in new[] { "e1", "e1" })
{
var a = self.World.CreateActor(i.ToLowerInvariant(), new TypeDictionary
{
new OwnerInit(Players["BadGuy"]),
new OwnerInit(players["BadGuy"]),
new FacingInit(0),
new LocationInit(Actors["nod0"].Location),
new LocationInit(actors["nod0"].Location),
});
var mobile = a.Trait<Mobile>();
a.QueueActivity(mobile.MoveTo(Actors["nod1"].Location, 2 ));
a.QueueActivity(mobile.MoveTo(Actors["nod2"].Location, 2 ));
a.QueueActivity(mobile.MoveTo(Actors["nod3"].Location, 2 ));
a.QueueActivity(mobile.MoveTo(actors["nod1"].Location, 2));
a.QueueActivity(mobile.MoveTo(actors["nod2"].Location, 2));
a.QueueActivity(mobile.MoveTo(actors["nod3"].Location, 2));
// TODO: Queue hunt order
}
});
}
// GoodGuy win conditions
// BadGuy is dead
var badcount = self.World.Actors.Count(a => a != a.Owner.PlayerActor &&
a.Owner == Players["BadGuy"] && !a.IsDead());
a.Owner == players["BadGuy"] && !a.IsDead());
if (badcount != lastBadCount)
{
Game.Debug("{0} badguys remain".F(badcount));
@@ -112,51 +114,51 @@ namespace OpenRA.Mods.Cnc.Missions
OnVictory(self.World);
}
//GoodGuy lose conditions: MCV/cyard must survive
// GoodGuy lose conditions: MCV/cyard must survive
var hasAnything = self.World.ActorsWithTrait<MustBeDestroyed>()
.Any( a => a.Actor.Owner == Players["GoodGuy"] );
.Any(a => a.Actor.Owner == players["GoodGuy"]);
if (!hasAnything)
OnLose(self.World);
// GoodGuy reinforcements
if (ticks == 25*5)
if (ticks == 25 * 5)
{
ReinforceFromSea(self.World,
Actors["lstStart"].Location,
Actors["lstEnd"].Location,
actors["lstStart"].Location,
actors["lstEnd"].Location,
new CPos(53, 53),
new string[] {"e1","e1","e1"},
Players["GoodGuy"]);
new string[] { "e1", "e1", "e1" },
players["GoodGuy"]);
}
if (ticks == 25*15)
if (ticks == 25 * 15)
{
ReinforceFromSea(self.World,
Actors["lstStart"].Location,
Actors["lstEnd"].Location,
actors["lstStart"].Location,
actors["lstEnd"].Location,
new CPos(53, 53),
new string[] {"e1","e1","e1"},
Players["GoodGuy"]);
new string[] { "e1", "e1", "e1" },
players["GoodGuy"]);
}
if (ticks == 25*30)
if (ticks == 25 * 30)
{
ReinforceFromSea(self.World,
Actors["lstStart"].Location,
Actors["lstEnd"].Location,
actors["lstStart"].Location,
actors["lstEnd"].Location,
new CPos(53, 53),
new string[] {"jeep"},
Players["GoodGuy"]);
new string[] { "jeep" },
players["GoodGuy"]);
}
if (ticks == 25*60)
if (ticks == 25 * 60)
{
ReinforceFromSea(self.World,
Actors["lstStart"].Location,
Actors["lstEnd"].Location,
actors["lstStart"].Location,
actors["lstEnd"].Location,
new CPos(53, 53),
new string[] {"jeep"},
Players["GoodGuy"]);
new string[] { "jeep" },
players["GoodGuy"]);
}
ticks++;
@@ -164,11 +166,11 @@ namespace OpenRA.Mods.Cnc.Missions
void SetGunboatPath()
{
var self = Actors[ "Gunboat" ];
var self = actors["Gunboat"];
var mobile = self.Trait<Mobile>();
self.Trait<AutoTarget>().stance = UnitStance.AttackAnything; //TODO: this is ignored
self.QueueActivity(mobile.ScriptedMove(Actors["gunboatLeft"].Location));
self.QueueActivity(mobile.ScriptedMove(Actors["gunboatRight"].Location));
self.Trait<AutoTarget>().stance = UnitStance.AttackAnything; // TODO: this is ignored
self.QueueActivity(mobile.ScriptedMove(actors["gunboatLeft"].Location));
self.QueueActivity(mobile.ScriptedMove(actors["gunboatRight"].Location));
self.QueueActivity(new CallFunc(() => SetGunboatPath()));
}
@@ -176,13 +178,13 @@ namespace OpenRA.Mods.Cnc.Missions
{
world.AddFrameEndTask(w =>
{
Sound.PlayToPlayer(w.LocalPlayer,"reinfor1.aud");
Sound.PlayToPlayer(w.LocalPlayer, "reinfor1.aud");
var a = w.CreateActor("lst", new TypeDictionary
{
new LocationInit( startPos ),
new OwnerInit( player ),
new FacingInit( 0 ),
new LocationInit(startPos),
new OwnerInit(player),
new FacingInit(0),
});
var mobile = a.Trait<Mobile>();
@@ -190,8 +192,8 @@ namespace OpenRA.Mods.Cnc.Missions
foreach (var i in items)
cargo.Load(a, world.CreateActor(false, i.ToLowerInvariant(), new TypeDictionary
{
new OwnerInit( player ),
new FacingInit( 0 ),
new OwnerInit(player),
new FacingInit(0),
}));
a.CancelActivity();

View File

@@ -11,16 +11,16 @@
using System;
using System.Collections.Generic;
using System.Linq;
using OpenRA.FileFormats;
using OpenRA.Mods.Cnc;
using OpenRA.Mods.RA;
using OpenRA.Mods.RA.Air;
using OpenRA.Mods.RA.Move;
using OpenRA.Mods.RA.Activities;
using OpenRA.Mods.RA.Missions;
using OpenRA.Mods.RA.Air;
using OpenRA.Mods.RA.Buildings;
using OpenRA.Mods.RA.Missions;
using OpenRA.Mods.RA.Move;
using OpenRA.Scripting;
using OpenRA.Traits;
using OpenRA.FileFormats;
namespace OpenRA.Mods.Cnc.Missions
{
@@ -90,6 +90,7 @@ namespace OpenRA.Mods.Cnc.Missions
NODReinforceNthA();
Sound.Play("reinfor1.aud");
}
if (world.FrameNumber == 1400)
{
NODReinforceNthB();
@@ -107,6 +108,7 @@ namespace OpenRA.Mods.Cnc.Missions
Sound.Play("reinfor1.aud");
}
}
if (levelvillage.Status == ObjectiveStatus.InProgress)
{
if (vil01.Destroyed && vil02.Destroyed && vil03.Destroyed && vil04.Destroyed && vil05.Destroyed && vil06.Destroyed &&

View File

@@ -34,12 +34,12 @@ namespace OpenRA.Mods.Cnc
var rl = self.World.WorldActor.Trait<ResourceLayer>();
var r = rl.GetResource(self.Location);
if( r == null ) return;
if( !info.Resources.Contains(r.info.Name) ) return;
if (r == null) return;
if (!info.Resources.Contains(r.info.Name)) return;
var weapon = Rules.Weapons[info.Weapon.ToLowerInvariant()];
self.InflictDamage( self.World.WorldActor, weapon.Warheads[ 0 ].Damage, weapon.Warheads[ 0 ] );
self.InflictDamage(self.World.WorldActor, weapon.Warheads[0].Damage, weapon.Warheads[0]);
poisonTicks = weapon.ROF;
}
}

View File

@@ -20,13 +20,13 @@ namespace OpenRA.Mods.Cnc.Widgets
{
public string ProductionTabsWidget = null;
public object Create( ActorInitializer init ) { return new ProductionQueueFromSelection(init.world, this); }
public object Create(ActorInitializer init) { return new ProductionQueueFromSelection(init.world, this); }
}
class ProductionQueueFromSelection : INotifySelection
{
Lazy<ProductionTabsWidget> tabsWidget;
readonly World world;
Lazy<ProductionTabsWidget> tabsWidget;
public ProductionQueueFromSelection(World world, ProductionQueueFromSelectionInfo info)
{

View File

@@ -26,28 +26,28 @@ namespace OpenRA.Mods.Cnc
class SpawnViceroid : INotifyKilled
{
readonly SpawnViceroidInfo Info;
readonly SpawnViceroidInfo spawnViceroidInfo;
public SpawnViceroid(SpawnViceroidInfo info) { Info = info; }
public SpawnViceroid(SpawnViceroidInfo info) { spawnViceroidInfo = info; }
public void Killed(Actor self, AttackInfo e)
{
if (e.Warhead == null || e.Warhead.InfDeath != Info.InfDeath) return;
if (self.World.SharedRandom.Next(100) > Info.Probability) return;
if (e.Warhead == null || e.Warhead.InfDeath != spawnViceroidInfo.InfDeath) return;
if (self.World.SharedRandom.Next(100) > spawnViceroidInfo.Probability) return;
self.World.AddFrameEndTask(w =>
{
var td = new TypeDictionary
{
new LocationInit( self.Location ),
new OwnerInit( self.World.Players.First(p => p.InternalName == Info.Owner) )
new LocationInit(self.Location),
new OwnerInit(self.World.Players.First(p => p.InternalName == spawnViceroidInfo.Owner))
};
var facing = self.TraitOrDefault<IFacing>();
if (facing != null)
td.Add(new FacingInit( facing.Facing ));
td.Add(new FacingInit(facing.Facing));
w.CreateActor(Info.ViceroidActor, td);
w.CreateActor(spawnViceroidInfo.ViceroidActor, td);
});
}
}

View File

@@ -20,8 +20,7 @@ namespace OpenRA.Mods.Cnc
public class TiberiumRefinery : OreRefinery
{
public TiberiumRefinery(Actor self, TiberiumRefineryInfo info)
: base(self, info) {}
public TiberiumRefinery(Actor self, TiberiumRefineryInfo info) : base(self, info) { }
public override Activity DockSequence(Actor harv, Actor self)
{

View File

@@ -26,7 +26,7 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
var hotkeyLabel = "({0})".F(button.Key.ToUpperInvariant());
hotkey.GetText = () => hotkeyLabel;
hotkey.Bounds.X = labelWidth + 2*label.Bounds.X;
hotkey.Bounds.X = labelWidth + 2 * label.Bounds.X;
var panelWidth = hotkey.Bounds.X + label.Bounds.X
+ Game.Renderer.Fonts[label.Font].Measure(hotkeyLabel).X;
@@ -34,4 +34,3 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
}
}
}

View File

@@ -24,6 +24,17 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
Widget ingameRoot;
World world;
static void BindOrderButton<T>(World world, Widget parent, string button, string icon)
where T : IOrderGenerator, new()
{
var w = parent.Get<ButtonWidget>(button);
w.OnClick = () => world.ToggleInputMode<T>();
w.IsHighlighted = () => world.OrderGenerator is T;
w.Get<ImageWidget>("ICON").GetImageName =
() => world.OrderGenerator is T ? icon + "-active" : icon;
}
void AddChatLine(Color c, string from, string text)
{
ingameRoot.Get<ChatDisplayWidget>("CHAT_DISPLAY").AddLine(c, from, text);
@@ -114,7 +125,7 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
.Any(a => a.Actor.Owner == world.LocalPlayer && a.Trait.IsActive);
if (radarEnabled != cachedRadarEnabled)
Sound.PlayNotification(null, "Sounds", (radarEnabled ? "RadarUp" : "RadarDown"), null);
Sound.PlayNotification(null, "Sounds", radarEnabled ? "RadarUp" : "RadarDown", null);
cachedRadarEnabled = radarEnabled;
// Switch to observer mode after win/loss
@@ -152,16 +163,5 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
return Color.LimeGreen;
};
}
static void BindOrderButton<T>(World world, Widget parent, string button, string icon)
where T : IOrderGenerator, new()
{
var w = parent.Get<ButtonWidget>(button);
w.OnClick = () => world.ToggleInputMode<T>();
w.IsHighlighted = () => world.OrderGenerator is T;
w.Get<ImageWidget>("ICON").GetImageName =
() => world.OrderGenerator is T ? icon+"-active" : icon;
}
}
}

View File

@@ -49,7 +49,7 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
});
};
Action doNothing = () => {};
Action doNothing = () => { };
menu.Get<ButtonWidget>("QUIT_BUTTON").OnClick = () =>
CncWidgetUtils.PromptConfirmAction("Abort Mission", "Leave this game and return to the menu?", onQuit, doNothing);
@@ -92,35 +92,35 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
// Menu panels - ordered from lowest to highest priority
var panelParent = Game.OpenWindow(world, "INGAME_MENU_PANEL");
PanelType Panel = PanelType.Objectives;
PanelType panelType = PanelType.Objectives;
var visibleButtons = 0;
// Debug / Cheats panel
var debugButton = panelParent.Get<ButtonWidget>("DEBUG_BUTTON");
debugButton.OnClick = () => Panel = PanelType.Debug;
debugButton.IsHighlighted = () => Panel == PanelType.Debug;
debugButton.OnClick = () => panelType = PanelType.Debug;
debugButton.IsHighlighted = () => panelType == PanelType.Debug;
if (world.LocalPlayer != null && world.LobbyInfo.GlobalSettings.AllowCheats)
{
Panel = PanelType.Debug;
panelType = PanelType.Debug;
visibleButtons++;
var debugPanel = Game.LoadWidget(world, "CHEATS_PANEL", panelParent, new WidgetArgs(){{"onExit", doNothing}});
debugPanel.IsVisible = () => Panel == PanelType.Debug;
var debugPanel = Game.LoadWidget(world, "CHEATS_PANEL", panelParent, new WidgetArgs() { { "onExit", doNothing } });
debugPanel.IsVisible = () => panelType == PanelType.Debug;
debugButton.IsVisible = () => visibleButtons > 1;
}
// Mission objectives
var iop = world.WorldActor.TraitsImplementing<IObjectivesPanel>().FirstOrDefault();
var objectivesButton = panelParent.Get<ButtonWidget>("OBJECTIVES_BUTTON");
objectivesButton.OnClick = () => Panel = PanelType.Objectives;
objectivesButton.IsHighlighted = () => Panel == PanelType.Objectives;
objectivesButton.OnClick = () => panelType = PanelType.Objectives;
objectivesButton.IsHighlighted = () => panelType == PanelType.Objectives;
if (iop != null && iop.ObjectivesPanel != null)
{
Panel = PanelType.Objectives;
panelType = PanelType.Objectives;
visibleButtons++;
var objectivesPanel = Game.LoadWidget(world, iop.ObjectivesPanel, panelParent, new WidgetArgs());
objectivesPanel.IsVisible = () => Panel == PanelType.Objectives;
objectivesPanel.IsVisible = () => panelType == PanelType.Objectives;
objectivesButton.IsVisible = () => visibleButtons > 1;
}
}

View File

@@ -54,9 +54,9 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
public static bool IsValidDisk(string diskRoot)
{
var files = new string[][] {
new [] { diskRoot, "CONQUER.MIX" },
new [] { diskRoot, "DESERT.MIX" },
new [] { diskRoot, "INSTALL", "SETUP.Z" },
new[] { diskRoot, "CONQUER.MIX" },
new[] { diskRoot, "DESERT.MIX" },
new[] { diskRoot, "INSTALL", "SETUP.Z" },
};
return files.All(f => File.Exists(f.Aggregate(Path.Combine)));
@@ -89,7 +89,7 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
var installTotal = filesToExtract.Count() + filesToExtract.Count();
var onProgress = (Action<string>)(s => Game.RunAfterTick(() =>
{
progressBar.Percentage = installCounter*100/installTotal;
progressBar.Percentage = installCounter * 100 / installTotal;
installCounter++;
statusLabel.GetText = () => s;
@@ -97,12 +97,12 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
var onError = (Action<string>)(s => Game.RunAfterTick(() =>
{
statusLabel.GetText = () => "Error: "+s;
statusLabel.GetText = () => "Error: " + s;
backButton.IsDisabled = () => false;
retryButton.IsDisabled = () => false;
}));
new Thread( _ =>
new Thread(_ =>
{
try
{

View File

@@ -17,7 +17,7 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
public class CncInstallLogic
{
[ObjectCreator.UseCtor]
public CncInstallLogic(Widget widget, Dictionary<string,string> installData, Action continueLoading)
public CncInstallLogic(Widget widget, Dictionary<string, string> installData, Action continueLoading)
{
var panel = widget.Get("INSTALL_PANEL");
var args = new WidgetArgs()
@@ -43,8 +43,7 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
{
Ui.OpenWindow("MODS_PANEL", new WidgetArgs()
{
{ "onExit", () => {} },
// Close this panel
{ "onExit", () => { } },
{ "onSwitch", Ui.CloseWindow },
});
};

View File

@@ -18,7 +18,7 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
{
enum MenuType { Main, Multiplayer, Settings, None }
MenuType Menu = MenuType.Main;
MenuType menuType = MenuType.Main;
Widget rootMenu;
[ObjectCreator.UseCtor]
@@ -32,85 +32,85 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
// Menu buttons
var mainMenu = widget.Get("MAIN_MENU");
mainMenu.IsVisible = () => Menu == MenuType.Main;
mainMenu.IsVisible = () => menuType == MenuType.Main;
mainMenu.Get<ButtonWidget>("SOLO_BUTTON").OnClick = StartSkirmishGame;
mainMenu.Get<ButtonWidget>("MULTIPLAYER_BUTTON").OnClick = () => Menu = MenuType.Multiplayer;
mainMenu.Get<ButtonWidget>("MULTIPLAYER_BUTTON").OnClick = () => menuType = MenuType.Multiplayer;
mainMenu.Get<ButtonWidget>("MODS_BUTTON").OnClick = () =>
{
Menu = MenuType.None;
menuType = MenuType.None;
Ui.OpenWindow("MODS_PANEL", new WidgetArgs()
{
{ "onExit", () => Menu = MenuType.Main },
{ "onExit", () => menuType = MenuType.Main },
{ "onSwitch", RemoveShellmapUI }
});
};
mainMenu.Get<ButtonWidget>("SETTINGS_BUTTON").OnClick = () => Menu = MenuType.Settings;
mainMenu.Get<ButtonWidget>("SETTINGS_BUTTON").OnClick = () => menuType = MenuType.Settings;
mainMenu.Get<ButtonWidget>("QUIT_BUTTON").OnClick = Game.Exit;
// Multiplayer menu
var multiplayerMenu = widget.Get("MULTIPLAYER_MENU");
multiplayerMenu.IsVisible = () => Menu == MenuType.Multiplayer;
multiplayerMenu.IsVisible = () => menuType == MenuType.Multiplayer;
multiplayerMenu.Get<ButtonWidget>("BACK_BUTTON").OnClick = () => Menu = MenuType.Main;
multiplayerMenu.Get<ButtonWidget>("BACK_BUTTON").OnClick = () => menuType = MenuType.Main;
multiplayerMenu.Get<ButtonWidget>("JOIN_BUTTON").OnClick = () => OpenGamePanel("SERVERBROWSER_PANEL");
multiplayerMenu.Get<ButtonWidget>("CREATE_BUTTON").OnClick = () => OpenGamePanel("CREATESERVER_PANEL");
multiplayerMenu.Get<ButtonWidget>("DIRECTCONNECT_BUTTON").OnClick = () => OpenGamePanel("DIRECTCONNECT_PANEL");
// Settings menu
var settingsMenu = widget.Get("SETTINGS_MENU");
settingsMenu.IsVisible = () => Menu == MenuType.Settings;
settingsMenu.IsVisible = () => menuType == MenuType.Settings;
settingsMenu.Get<ButtonWidget>("REPLAYS_BUTTON").OnClick = () =>
{
Menu = MenuType.None;
menuType = MenuType.None;
Ui.OpenWindow("REPLAYBROWSER_PANEL", new WidgetArgs()
{
{ "onExit", () => Menu = MenuType.Settings },
{ "onExit", () => menuType = MenuType.Settings },
{ "onStart", RemoveShellmapUI }
});
};
settingsMenu.Get<ButtonWidget>("MUSIC_BUTTON").OnClick = () =>
{
Menu = MenuType.None;
menuType = MenuType.None;
Ui.OpenWindow("MUSIC_PANEL", new WidgetArgs()
{
{ "onExit", () => Menu = MenuType.Settings },
{ "onExit", () => menuType = MenuType.Settings },
});
};
settingsMenu.Get<ButtonWidget>("CREDITS_BUTTON").OnClick = () =>
{
Menu = MenuType.None;
menuType = MenuType.None;
Ui.OpenWindow("CREDITS_PANEL", new WidgetArgs()
{
{ "onExit", () => Menu = MenuType.Settings },
{ "onExit", () => menuType = MenuType.Settings },
});
};
settingsMenu.Get<ButtonWidget>("SETTINGS_BUTTON").OnClick = () =>
{
Menu = MenuType.None;
menuType = MenuType.None;
Game.OpenWindow("SETTINGS_PANEL", new WidgetArgs()
{
{ "onExit", () => Menu = MenuType.Settings },
{ "onExit", () => menuType = MenuType.Settings },
});
};
settingsMenu.Get<ButtonWidget>("BACK_BUTTON").OnClick = () => Menu = MenuType.Main;
settingsMenu.Get<ButtonWidget>("BACK_BUTTON").OnClick = () => menuType = MenuType.Main;
rootMenu.Get<ImageWidget>("RECBLOCK").IsVisible = () => world.FrameNumber / 25 % 2 == 0;
}
void OpenGamePanel(string id)
{
Menu = MenuType.None;
menuType = MenuType.None;
Ui.OpenWindow(id, new WidgetArgs()
{
{ "onExit", () => Menu = MenuType.Multiplayer },
{ "onExit", () => menuType = MenuType.Multiplayer },
{ "openLobby", () => OpenLobbyPanel(MenuType.Multiplayer, false) }
});
}
@@ -122,10 +122,10 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
void OpenLobbyPanel(MenuType menu, bool addBots)
{
Menu = MenuType.None;
menuType = MenuType.None;
Game.OpenWindow("SERVER_LOBBY", new WidgetArgs()
{
{ "onExit", () => { Game.Disconnect(); Menu = menu; } },
{ "onExit", () => { Game.Disconnect(); menuType = menu; } },
{ "onStart", RemoveShellmapUI },
{ "addBots", addBots }
});
@@ -138,7 +138,7 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
ConnectionLogic.Connect(IPAddress.Loopback.ToString(),
Game.CreateLocalServer(map),
() => OpenLobbyPanel(MenuType.Main, true),
() => { Game.CloseServer(); Menu = MenuType.Main; });
() => { Game.CloseServer(); menuType = MenuType.Main; });
}
}
}

View File

@@ -16,9 +16,9 @@ using OpenRA.FileFormats;
using OpenRA.FileFormats.Graphics;
using OpenRA.GameRules;
using OpenRA.Mods.RA;
using OpenRA.Mods.RA.Widgets;
using OpenRA.Mods.RA.Widgets.Logic;
using OpenRA.Widgets;
using OpenRA.Mods.RA.Widgets;
namespace OpenRA.Mods.Cnc.Widgets.Logic
{
@@ -27,7 +27,7 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
enum PanelType { General, Input }
SoundDevice soundDevice;
PanelType Settings = PanelType.General;
PanelType settingsPanel = PanelType.General;
ColorPreviewManagerWidget colorPreview;
World world;
@@ -39,11 +39,11 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
// General pane
var generalButton = panel.Get<ButtonWidget>("GENERAL_BUTTON");
generalButton.OnClick = () => Settings = PanelType.General;
generalButton.IsHighlighted = () => Settings == PanelType.General;
generalButton.OnClick = () => settingsPanel = PanelType.General;
generalButton.IsHighlighted = () => settingsPanel == PanelType.General;
var generalPane = panel.Get("GENERAL_CONTROLS");
generalPane.IsVisible = () => Settings == PanelType.General;
generalPane.IsVisible = () => settingsPanel == PanelType.General;
var gameSettings = Game.Settings.Game;
var playerSettings = Game.Settings.Player;
@@ -102,7 +102,7 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
// Audio
var soundSlider = generalPane.Get<SliderWidget>("SOUND_SLIDER");
soundSlider.OnChange += x => { soundSettings.SoundVolume = x; Sound.SoundVolume = x;};
soundSlider.OnChange += x => { soundSettings.SoundVolume = x; Sound.SoundVolume = x; };
soundSlider.Value = soundSettings.SoundVolume;
var musicSlider = generalPane.Get<SliderWidget>("MUSIC_SLIDER");
@@ -122,11 +122,11 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
// Input pane
var inputPane = panel.Get("INPUT_CONTROLS");
inputPane.IsVisible = () => Settings == PanelType.Input;
inputPane.IsVisible = () => settingsPanel == PanelType.Input;
var inputButton = panel.Get<ButtonWidget>("INPUT_BUTTON");
inputButton.OnClick = () => Settings = PanelType.Input;
inputButton.IsHighlighted = () => Settings == PanelType.Input;
inputButton.OnClick = () => settingsPanel = PanelType.Input;
inputButton.IsHighlighted = () => settingsPanel == PanelType.Input;
var classicMouseCheckbox = inputPane.Get<CheckboxWidget>("CLASSICORDERS_CHECKBOX");
classicMouseCheckbox.IsChecked = () => gameSettings.UseClassicMouseStyle;
@@ -154,7 +154,7 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
int x, y;
int.TryParse(windowWidth.Text, out x);
int.TryParse(windowHeight.Text, out y);
graphicsSettings.WindowedSize = new int2(x,y);
graphicsSettings.WindowedSize = new int2(x, y);
soundSettings.Device = soundDevice.Device;
soundSettings.Engine = soundDevice.Engine;
Game.Settings.Save();
@@ -163,26 +163,6 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
};
}
bool ShowColorPicker(DropDownButtonWidget color, PlayerSettings s)
{
Action<HSLColor> onChange = c => colorPreview.Color = c;
Action onExit = () =>
{
s.Color = colorPreview.Color;
color.RemovePanel();
};
var colorChooser = Game.LoadWidget(world, "COLOR_CHOOSER", null, new WidgetArgs()
{
{ "onExit", onExit },
{ "onChange", onChange },
{ "initialColor", s.Color }
});
color.AttachPanel(colorChooser, onExit);
return true;
}
static bool ShowMouseScrollDropdown(DropDownButtonWidget dropdown, GameSettings s)
{
var options = new Dictionary<string, MouseScrollType>()
@@ -205,6 +185,26 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
return true;
}
bool ShowColorPicker(DropDownButtonWidget color, PlayerSettings s)
{
Action<HSLColor> onChange = c => colorPreview.Color = c;
Action onExit = () =>
{
s.Color = colorPreview.Color;
color.RemovePanel();
};
var colorChooser = Game.LoadWidget(world, "COLOR_CHOOSER", null, new WidgetArgs()
{
{ "onExit", onExit },
{ "onChange", onChange },
{ "initialColor", s.Color }
});
color.AttachPanel(colorChooser, onExit);
return true;
}
bool ShowAudioDeviceDropdown(DropDownButtonWidget dropdown, SoundSettings s, SoundDevice[] devices)
{
var i = 0;

View File

@@ -10,8 +10,8 @@
using System;
using System.Drawing;
using OpenRA.Mods.RA.Orders;
using OpenRA.Mods.RA.Buildings;
using OpenRA.Mods.RA.Orders;
using OpenRA.Traits;
using OpenRA.Widgets;
@@ -42,8 +42,8 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
var chromeName = button.ProductionGroup.ToLowerInvariant();
var icon = button.Get<ImageWidget>("ICON");
icon.GetImageName = () => button.IsDisabled() ? chromeName+"-disabled" :
tabs.Groups[button.ProductionGroup].Alert ? chromeName+"-alert" : chromeName;
icon.GetImageName = () => button.IsDisabled() ? chromeName + "-disabled" :
tabs.Groups[button.ProductionGroup].Alert ? chromeName + "-alert" : chromeName;
}
[ObjectCreator.UseCtor]

View File

@@ -23,8 +23,8 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
[ObjectCreator.UseCtor]
public ProductionTooltipLogic(Widget widget, TooltipContainerWidget tooltipContainer, ProductionPaletteWidget palette)
{
var pm = palette.world.LocalPlayer.PlayerActor.Trait<PowerManager>();
var pr = palette.world.LocalPlayer.PlayerActor.Trait<PlayerResources>();
var pm = palette.World.LocalPlayer.PlayerActor.Trait<PowerManager>();
var pr = palette.World.LocalPlayer.PlayerActor.Trait<PlayerResources>();
widget.IsVisible = () => palette.TooltipActor != null;
var nameLabel = widget.Get<LabelWidget>("NAME");
@@ -75,20 +75,20 @@ 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 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;
var leftWidth = new[] { font.Measure(tooltip.Name).X, 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;
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;
widget.Bounds.Height = Math.Max(leftHeight, rightHeight)*3/2 + 3*nameLabel.Bounds.Y;
widget.Bounds.Height = Math.Max(leftHeight, rightHeight) * 3 / 2 + 3 * nameLabel.Bounds.Y;
lastActor = actor;
};
}
static string ActorName( string a )
static string ActorName(string a)
{
ActorInfo ai;
Rules.Info.TryGetValue(a.ToLowerInvariant(), out ai);
@@ -99,4 +99,3 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
}
}
}

View File

@@ -43,7 +43,7 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
return; // no instances actually exist (race with destroy)
time = "{0} / {1}".F(WidgetUtils.FormatTime(sp.RemainingTime),
WidgetUtils.FormatTime(sp.Info.ChargeTime*25));
WidgetUtils.FormatTime(sp.Info.ChargeTime * 25));
if (sp == lastPower)
return;
@@ -53,7 +53,7 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
var timeWidth = timeFont.Measure(time).X;
var topWidth = nameFont.Measure(name).X + timeWidth + timeOffset;
var descSize = descFont.Measure(desc);
widget.Bounds.Width = 2*nameLabel.Bounds.X + Math.Max(topWidth, descSize.X);
widget.Bounds.Width = 2 * nameLabel.Bounds.X + Math.Max(topWidth, descSize.X);
widget.Bounds.Height = baseHeight + descSize.Y;
timeLabel.Bounds.X = widget.Bounds.Width - nameLabel.Bounds.X - timeWidth;
lastPower = sp;
@@ -65,4 +65,3 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
}
}
}

View File

@@ -40,7 +40,7 @@ namespace OpenRA.Mods.Cnc.Widgets
public readonly string HoldText = "";
public string TooltipActor { get; private set; }
public readonly World world;
public readonly World World;
Lazy<TooltipContainerWidget> tooltipContainer;
ProductionQueue currentQueue;
@@ -52,7 +52,7 @@ namespace OpenRA.Mods.Cnc.Widgets
}
public override Rectangle EventBounds { get { return eventBounds; } }
Dictionary<Rectangle, ProductionIcon> Icons = new Dictionary<Rectangle, ProductionIcon>();
Dictionary<Rectangle, ProductionIcon> icons = new Dictionary<Rectangle, ProductionIcon>();
Dictionary<string, Sprite> iconSprites;
Animation cantBuild, clock;
Rectangle eventBounds = Rectangle.Empty;
@@ -63,7 +63,7 @@ namespace OpenRA.Mods.Cnc.Widgets
[ObjectCreator.UseCtor]
public ProductionPaletteWidget(World world, WorldRenderer worldRenderer)
{
this.world = world;
this.World = world;
this.worldRenderer = worldRenderer;
tooltipContainer = Lazy.New(() =>
Ui.Root.Get<TooltipContainerWidget>(TooltipContainer));
@@ -93,7 +93,7 @@ namespace OpenRA.Mods.Cnc.Widgets
{
if (TooltipContainer != null)
tooltipContainer.Value.SetTooltip(TooltipTemplate,
new WidgetArgs() {{ "palette", this }});
new WidgetArgs() { { "palette", this } });
}
public override void MouseExited()
@@ -104,7 +104,7 @@ namespace OpenRA.Mods.Cnc.Widgets
public override bool HandleMouseInput(MouseInput mi)
{
var icon = Icons.Where(i => i.Key.Contains(mi.Location))
var icon = icons.Where(i => i.Key.Contains(mi.Location))
.Select(i => i.Value).FirstOrDefault();
if (mi.Event == MouseInputEvent.Move)
@@ -126,29 +126,28 @@ namespace OpenRA.Mods.Cnc.Widgets
if (first != null && first.Done && actor.Traits.Contains<BuildingInfo>())
{
Sound.Play(TabClick);
world.OrderGenerator = new PlaceBuildingOrderGenerator(CurrentQueue.self, icon.Name);
World.OrderGenerator = new PlaceBuildingOrderGenerator(CurrentQueue.self, icon.Name);
}
// Resume a paused item
else if (first != null && first.Paused)
{
// Resume a paused item
Sound.Play(TabClick);
world.IssueOrder(Order.PauseProduction(CurrentQueue.self, icon.Name, false));
World.IssueOrder(Order.PauseProduction(CurrentQueue.self, icon.Name, false));
}
// Queue a new item
else if (CurrentQueue.BuildableItems().Any(a => a.Name == icon.Name))
{
// Queue a new item
Sound.Play(TabClick);
Sound.PlayNotification(world.LocalPlayer, "Speech", CurrentQueue.Info.QueuedAudio, world.LocalPlayer.Country.Race);
world.IssueOrder(Order.StartProduction(CurrentQueue.self, icon.Name,
Sound.PlayNotification(World.LocalPlayer, "Speech", CurrentQueue.Info.QueuedAudio, World.LocalPlayer.Country.Race);
World.IssueOrder(Order.StartProduction(CurrentQueue.self, icon.Name,
Game.GetModifierKeys().HasModifier(Modifiers.Shift) ? 5 : 1));
}
else
Sound.Play(DisabledTabClick);
}
// Hold/Cancel an existing item
else if (mi.Button == MouseButton.Right)
{
// Hold/Cancel an existing item
if (first != null)
{
Sound.Play(TabClick);
@@ -156,25 +155,26 @@ namespace OpenRA.Mods.Cnc.Widgets
// instant cancel of things we havent started yet and things that are finished
if (first.Paused || first.Done || first.TotalCost == first.RemainingCost)
{
Sound.PlayNotification(world.LocalPlayer, "Speech", CurrentQueue.Info.CancelledAudio, world.LocalPlayer.Country.Race);
world.IssueOrder(Order.CancelProduction(CurrentQueue.self, icon.Name,
Sound.PlayNotification(World.LocalPlayer, "Speech", CurrentQueue.Info.CancelledAudio, World.LocalPlayer.Country.Race);
World.IssueOrder(Order.CancelProduction(CurrentQueue.self, icon.Name,
Game.GetModifierKeys().HasModifier(Modifiers.Shift) ? 5 : 1));
}
else
{
Sound.PlayNotification(world.LocalPlayer, "Speech", CurrentQueue.Info.OnHoldAudio, world.LocalPlayer.Country.Race);
world.IssueOrder(Order.PauseProduction(CurrentQueue.self, icon.Name, true));
Sound.PlayNotification(World.LocalPlayer, "Speech", CurrentQueue.Info.OnHoldAudio, World.LocalPlayer.Country.Race);
World.IssueOrder(Order.PauseProduction(CurrentQueue.self, icon.Name, true));
}
}
else
Sound.Play(DisabledTabClick);
}
return true;
}
public void RefreshIcons()
{
Icons = new Dictionary<Rectangle, ProductionIcon>();
icons = new Dictionary<Rectangle, ProductionIcon>();
if (CurrentQueue == null)
return;
@@ -193,20 +193,20 @@ namespace OpenRA.Mods.Cnc.Widgets
Pos = new float2(rect.Location),
Queued = CurrentQueue.AllQueued().Where(a => a.Item == item.Name).ToList(),
};
Icons.Add(rect, pi);
icons.Add(rect, pi);
i++;
}
eventBounds = Icons.Keys.Aggregate(Rectangle.Union);
eventBounds = icons.Keys.Aggregate(Rectangle.Union);
}
public override void Draw()
{
overlayFont = Game.Renderer.Fonts["TinyBold"];
timeOffset = new float2(32,24) - overlayFont.Measure(WidgetUtils.FormatTime(0)) / 2;
queuedOffset = new float2(4,2);
holdOffset = new float2(32,24) - overlayFont.Measure(HoldText) / 2;
readyOffset = new float2(32,24) - overlayFont.Measure(ReadyText) / 2;
timeOffset = new float2(32, 24) - overlayFont.Measure(WidgetUtils.FormatTime(0)) / 2;
queuedOffset = new float2(4, 2);
holdOffset = new float2(32, 24) - overlayFont.Measure(HoldText) / 2;
readyOffset = new float2(32, 24) - overlayFont.Measure(ReadyText) / 2;
if (CurrentQueue == null)
return;
@@ -214,11 +214,11 @@ namespace OpenRA.Mods.Cnc.Widgets
var buildableItems = CurrentQueue.BuildableItems().OrderBy(a => a.Traits.Get<BuildableInfo>().BuildPaletteOrder);
// Background
foreach (var rect in Icons.Keys)
WidgetUtils.DrawPanel("panel-black", rect.InflateBy(1,1,1,1));
foreach (var rect in icons.Keys)
WidgetUtils.DrawPanel("panel-black", rect.InflateBy(1, 1, 1, 1));
// Icons
foreach (var icon in Icons.Values)
foreach (var icon in icons.Values)
{
WidgetUtils.DrawSHP(icon.Sprite, icon.Pos, worldRenderer);
@@ -237,7 +237,7 @@ namespace OpenRA.Mods.Cnc.Widgets
}
// Overlays
foreach (var icon in Icons.Values)
foreach (var icon in icons.Values)
{
var total = icon.Queued.Count;
if (total > 0)
@@ -267,7 +267,7 @@ namespace OpenRA.Mods.Cnc.Widgets
public override string GetCursor(int2 pos)
{
var icon = Icons.Where(i => i.Key.Contains(pos))
var icon = icons.Where(i => i.Key.Contains(pos))
.Select(i => i.Value).FirstOrDefault();
return icon != null ? base.GetCursor(pos) : null;

View File

@@ -68,8 +68,8 @@ namespace OpenRA.Mods.Cnc.Widgets
public readonly int ArrowWidth = 20;
public Dictionary<string, ProductionTabGroup> Groups;
int ContentWidth = 0;
float ListOffset = 0;
int contentWidth = 0;
float listOffset = 0;
bool leftPressed = false;
bool rightPressed = false;
Rectangle leftButtonRect;
@@ -107,10 +107,14 @@ namespace OpenRA.Mods.Cnc.Widgets
public string QueueGroup
{
get { return queueGroup; }
get
{
return queueGroup;
}
set
{
ListOffset = 0;
listOffset = 0;
queueGroup = value;
SelectNextTab(false);
}
@@ -118,7 +122,11 @@ namespace OpenRA.Mods.Cnc.Widgets
public ProductionQueue CurrentQueue
{
get { return paletteWidget.Value.CurrentQueue; }
get
{
return paletteWidget.Value.CurrentQueue;
}
set
{
paletteWidget.Value.CurrentQueue = value;
@@ -134,9 +142,9 @@ namespace OpenRA.Mods.Cnc.Widgets
leftButtonRect = new Rectangle(rb.X, rb.Y, ArrowWidth, rb.Height);
rightButtonRect = new Rectangle(rb.Right - ArrowWidth, rb.Y, ArrowWidth, rb.Height);
var leftDisabled = ListOffset >= 0;
var leftDisabled = listOffset >= 0;
var leftHover = Ui.MouseOverWidget == this && leftButtonRect.Contains(Viewport.LastMousePos);
var rightDisabled = ListOffset <= Bounds.Width - rightButtonRect.Width - leftButtonRect.Width - ContentWidth;
var rightDisabled = listOffset <= Bounds.Width - rightButtonRect.Width - leftButtonRect.Width - contentWidth;
var rightHover = Ui.MouseOverWidget == this && rightButtonRect.Contains(Viewport.LastMousePos);
WidgetUtils.DrawPanel("panel-black", rb);
@@ -150,20 +158,20 @@ namespace OpenRA.Mods.Cnc.Widgets
// Draw tab buttons
Game.Renderer.EnableScissor(leftButtonRect.Right, rb.Y + 1, rightButtonRect.Left - leftButtonRect.Right - 1, rb.Height);
var origin = new int2(leftButtonRect.Right - 1 + (int)ListOffset, leftButtonRect.Y);
var origin = new int2(leftButtonRect.Right - 1 + (int)listOffset, leftButtonRect.Y);
SpriteFont font = Game.Renderer.Fonts["TinyBold"];
ContentWidth = 0;
contentWidth = 0;
foreach (var tab in Groups[queueGroup].Tabs)
{
var rect = new Rectangle(origin.X + ContentWidth, origin.Y, TabWidth, rb.Height);
var rect = new Rectangle(origin.X + contentWidth, origin.Y, TabWidth, rb.Height);
var hover = !leftHover && !rightHover && Ui.MouseOverWidget == this && rect.Contains(Viewport.LastMousePos);
var baseName = tab.Queue == CurrentQueue ? "button-highlighted" : "button";
ButtonWidget.DrawBackground(baseName, rect, false, false, hover, false);
ContentWidth += TabWidth - 1;
contentWidth += TabWidth - 1;
int2 textSize = font.Measure(tab.Name);
int2 position = new int2(rect.X + (rect.Width - textSize.X)/2, rect.Y + (rect.Height - textSize.Y)/2);
int2 position = new int2(rect.X + (rect.Width - textSize.X) / 2, rect.Y + (rect.Height - textSize.Y) / 2);
font.DrawTextWithContrast(tab.Name, position, tab.Queue.CurrentDone ? Color.Gold : Color.White, Color.Black, 1);
}
@@ -172,8 +180,8 @@ namespace OpenRA.Mods.Cnc.Widgets
void Scroll(int direction)
{
ListOffset += direction*ScrollVelocity;
ListOffset = Math.Min(0,Math.Max(Bounds.Width - rightButtonRect.Width - leftButtonRect.Width - ContentWidth, ListOffset));
listOffset += direction * ScrollVelocity;
listOffset = Math.Min(0, Math.Max(Bounds.Width - rightButtonRect.Width - leftButtonRect.Width - contentWidth, listOffset));
}
// Is added to world.ActorAdded by the SidebarLogic handler
@@ -242,8 +250,8 @@ namespace OpenRA.Mods.Cnc.Widgets
leftPressed = leftButtonRect.Contains(mi.Location);
rightPressed = rightButtonRect.Contains(mi.Location);
var leftDisabled = ListOffset >= 0;
var rightDisabled = ListOffset <= Bounds.Width - rightButtonRect.Width - leftButtonRect.Width - ContentWidth;
var leftDisabled = listOffset >= 0;
var rightDisabled = listOffset <= Bounds.Width - rightButtonRect.Width - leftButtonRect.Width - contentWidth;
if (leftPressed || rightPressed)
{
@@ -254,10 +262,10 @@ namespace OpenRA.Mods.Cnc.Widgets
}
// Check production tabs
var offsetloc = mi.Location - new int2(leftButtonRect.Right - 1 + (int)ListOffset, leftButtonRect.Y);
if (offsetloc.X > 0 && offsetloc.X < ContentWidth)
var offsetloc = mi.Location - new int2(leftButtonRect.Right - 1 + (int)listOffset, leftButtonRect.Y);
if (offsetloc.X > 0 && offsetloc.X < contentWidth)
{
CurrentQueue = Groups[queueGroup].Tabs[offsetloc.X/(TabWidth - 1)].Queue;
CurrentQueue = Groups[queueGroup].Tabs[offsetloc.X / (TabWidth - 1)].Queue;
Sound.PlayNotification(null, "Sounds", "ClickSound", null);
}

View File

@@ -19,7 +19,7 @@ namespace OpenRA.Mods.Cnc.Widgets
{
public readonly string ProductionGroup;
public ProductionTypeButtonWidget() : base() {}
public ProductionTypeButtonWidget() : base() { }
protected ProductionTypeButtonWidget(ProductionTypeButtonWidget other)
: base(other)
{

View File

@@ -14,31 +14,33 @@ using System.Drawing;
using System.Linq;
using OpenRA.FileFormats;
using OpenRA.Graphics;
using OpenRA.Widgets;
using OpenRA.Mods.RA;
using OpenRA.Widgets;
namespace OpenRA.Mods.Cnc.Widgets
{
public class SupportPowersWidget : Widget
{
public int Spacing = 10;
public readonly string ReadyText = "";
public readonly string HoldText = "";
Dictionary<string, Sprite> iconSprites;
Animation clock;
Dictionary<Rectangle, SupportPowerIcon> Icons = new Dictionary<Rectangle, SupportPowerIcon>();
public readonly string TooltipContainer;
public readonly string TooltipTemplate = "SUPPORT_POWER_TOOLTIP";
public int Spacing = 10;
readonly WorldRenderer worldRenderer;
readonly SupportPowerManager spm;
Dictionary<string, Sprite> iconSprites;
Animation clock;
Dictionary<Rectangle, SupportPowerIcon> icons = new Dictionary<Rectangle, SupportPowerIcon>();
public SupportPowerInstance TooltipPower { get; private set; }
Lazy<TooltipContainerWidget> tooltipContainer;
Rectangle eventBounds;
public override Rectangle EventBounds { get { return eventBounds; } }
readonly WorldRenderer worldRenderer;
readonly SupportPowerManager spm;
SpriteFont overlayFont;
float2 holdOffset, readyOffset, timeOffset;
@@ -50,7 +52,7 @@ namespace OpenRA.Mods.Cnc.Widgets
tooltipContainer = Lazy.New(() =>
Ui.Root.Get<TooltipContainerWidget>(TooltipContainer));
iconSprites = Rules.Info.Values.SelectMany( u => u.Traits.WithInterface<SupportPowerInfo>() )
iconSprites = Rules.Info.Values.SelectMany(u => u.Traits.WithInterface<SupportPowerInfo>())
.Select(u => u.Image).Distinct()
.ToDictionary(
u => u,
@@ -68,7 +70,7 @@ namespace OpenRA.Mods.Cnc.Widgets
public void RefreshIcons()
{
Icons = new Dictionary<Rectangle, SupportPowerIcon>();
icons = new Dictionary<Rectangle, SupportPowerIcon>();
var powers = spm.Powers.Values.Where(p => !p.Disabled);
var i = 0;
@@ -83,26 +85,26 @@ namespace OpenRA.Mods.Cnc.Widgets
Sprite = iconSprites[p.Info.Image]
};
Icons.Add(rect, power);
icons.Add(rect, power);
i++;
}
eventBounds = (Icons.Count == 0) ? Rectangle.Empty : Icons.Keys.Aggregate(Rectangle.Union);
eventBounds = (icons.Count == 0) ? Rectangle.Empty : icons.Keys.Aggregate(Rectangle.Union);
}
public override void Draw()
{
overlayFont = Game.Renderer.Fonts["TinyBold"];
holdOffset = new float2(32,24) - overlayFont.Measure(HoldText) / 2;
readyOffset = new float2(32,24) - overlayFont.Measure(ReadyText) / 2;
timeOffset = new float2(32,24) - overlayFont.Measure(WidgetUtils.FormatTime(0)) / 2;
holdOffset = new float2(32, 24) - overlayFont.Measure(HoldText) / 2;
readyOffset = new float2(32, 24) - overlayFont.Measure(ReadyText) / 2;
timeOffset = new float2(32, 24) - overlayFont.Measure(WidgetUtils.FormatTime(0)) / 2;
// Background
foreach (var rect in Icons.Keys)
WidgetUtils.DrawPanel("panel-black", rect.InflateBy(1,1,1,1));
foreach (var rect in icons.Keys)
WidgetUtils.DrawPanel("panel-black", rect.InflateBy(1, 1, 1, 1));
// Icons
foreach (var p in Icons.Values)
foreach (var p in icons.Values)
{
WidgetUtils.DrawSHP(p.Sprite, p.Pos, worldRenderer);
@@ -115,7 +117,7 @@ namespace OpenRA.Mods.Cnc.Widgets
}
// Overlay
foreach (var p in Icons.Values)
foreach (var p in icons.Values)
{
if (p.Power.Ready)
overlayFont.DrawTextWithContrast(ReadyText,
@@ -142,7 +144,7 @@ namespace OpenRA.Mods.Cnc.Widgets
{
if (TooltipContainer == null) return;
tooltipContainer.Value.SetTooltip(TooltipTemplate,
new WidgetArgs() {{ "palette", this }});
new WidgetArgs() { { "palette", this } });
}
public override void MouseExited()
@@ -155,7 +157,7 @@ namespace OpenRA.Mods.Cnc.Widgets
{
if (mi.Event == MouseInputEvent.Move)
{
var icon = Icons.Where(i => i.Key.Contains(mi.Location))
var icon = icons.Where(i => i.Key.Contains(mi.Location))
.Select(i => i.Value).FirstOrDefault();
TooltipPower = (icon != null) ? icon.Power : null;
return false;
@@ -164,7 +166,7 @@ namespace OpenRA.Mods.Cnc.Widgets
if (mi.Event != MouseInputEvent.Down)
return false;
var clicked = Icons.Where(i => i.Key.Contains(mi.Location))
var clicked = icons.Where(i => i.Key.Contains(mi.Location))
.Select(i => i.Value).FirstOrDefault();
if (clicked != null)

View File

@@ -21,8 +21,8 @@ namespace OpenRA.Mods.Cnc
public class WithCargoInfo : ITraitInfo, Requires<CargoInfo>, Requires<IBodyOrientationInfo>
{
[Desc("Cargo position relative to turret or body. (forward, right, up) triples")]
public readonly WRange[] LocalOffset = {};
public readonly string[] DisplayTypes = {};
public readonly WRange[] LocalOffset = { };
public readonly string[] DisplayTypes = { };
public object Create(ActorInitializer init) { return new WithCargo(init.self, this); }
}
@@ -31,7 +31,7 @@ namespace OpenRA.Mods.Cnc
{
Cargo cargo;
IFacing facing;
WithCargoInfo Info;
WithCargoInfo cargoInfo;
WVec[] positions;
IBodyOrientation body;
@@ -39,7 +39,7 @@ namespace OpenRA.Mods.Cnc
{
cargo = self.Trait<Cargo>();
facing = self.TraitOrDefault<IFacing>();
Info = info;
cargoInfo = info;
body = self.Trait<IBodyOrientation>();
@@ -48,7 +48,7 @@ namespace OpenRA.Mods.Cnc
positions = new WVec[info.LocalOffset.Length / 3];
for (var i = 0; i < info.LocalOffset.Length / 3; i++)
positions[i] = new WVec(info.LocalOffset[3*i], info.LocalOffset[3*i + 1], info.LocalOffset[3*i + 2]);
positions[i] = new WVec(info.LocalOffset[3 * i], info.LocalOffset[3 * i + 1], info.LocalOffset[3 * i + 2]);
}
public IEnumerable<IRenderable> ModifyRender(Actor self, WorldRenderer wr, IEnumerable<IRenderable> r)
@@ -66,7 +66,7 @@ namespace OpenRA.Mods.Cnc
cargoFacing.Facing = facing.Facing;
var cargoPassenger = c.Trait<Passenger>();
if (Info.DisplayTypes.Contains(cargoPassenger.info.CargoType))
if (cargoInfo.DisplayTypes.Contains(cargoPassenger.info.CargoType))
{
var offset = pos - c.CenterPosition + body.LocalToWorld(positions[i++ % positions.Length].Rotate(bodyOrientation));
foreach (var cr in c.Render(wr))