From 179d071a97fe96687d3b7b56862ba885fdca9e3c Mon Sep 17 00:00:00 2001 From: Bob Date: Fri, 30 Oct 2009 04:44:29 +1300 Subject: [PATCH] Minor changes on Sidebar --- OpenRa.Game/MainWindow.cs | 284 +++++++++++++++---------------- OpenRa.Game/Player.cs | 2 +- OpenRa.Game/Sidebar.cs | 32 ++-- OpenRa.Game/TechTree/Item.cs | 3 +- OpenRa.Game/TechTree/TechTree.cs | 146 ++++++++-------- 5 files changed, 234 insertions(+), 233 deletions(-) diff --git a/OpenRa.Game/MainWindow.cs b/OpenRa.Game/MainWindow.cs index e741d2a9b0..8fe3360d2b 100755 --- a/OpenRa.Game/MainWindow.cs +++ b/OpenRa.Game/MainWindow.cs @@ -1,146 +1,146 @@ -using System.Drawing; -using System.Windows.Forms; -using OpenRa.FileFormats; -using OpenRa.Game.Graphics; -using OpenRa.TechTree; -using System.Runtime.InteropServices; - -namespace OpenRa.Game -{ - using GRegion = OpenRa.Game.Graphics.Region; - - - class MainWindow : Form - { - readonly Renderer renderer; - - public readonly Sidebar sidebar; - - static Size GetResolution(Settings settings) - { - Size desktopResolution = Screen.PrimaryScreen.Bounds.Size; - - return new Size(settings.GetValue("width", desktopResolution.Width), - settings.GetValue("height", desktopResolution.Height)); - } - - [DllImport("user32")] - static extern int ShowCursor([MarshalAs(UnmanagedType.Bool)] bool visible); - - public MainWindow(Settings settings) - { - FileSystem.Mount(new Folder("../../../../")); - FileSystem.Mount(new Package("redalert.mix")); - FileSystem.Mount(new Package("conquer.mix")); - FileSystem.Mount(new Package("hires.mix")); - FileSystem.Mount(new Package("general.mix")); - FileSystem.Mount(new Package("local.mix")); - FileSystem.Mount(new Package("sounds.mix")); - FileSystem.Mount(new Package("speech.mix")); - FileSystem.Mount(new Package("allies.mix")); - FileSystem.Mount(new Package("russian.mix")); - - FormBorderStyle = FormBorderStyle.None; - BackColor = Color.Black; - StartPosition = FormStartPosition.Manual; - Location = Point.Empty; - Visible = true; - - bool windowed = !settings.GetValue("fullscreen", false); - renderer = new Renderer(this, GetResolution(settings), windowed); - SheetBuilder.Initialize(renderer); - - UiOverlay.ShowUnitDebug = settings.GetValue("udebug", false); - WorldRenderer.ShowUnitPaths = settings.GetValue("pathdebug", false); - Game.Replay = settings.GetValue("replay", ""); - - Game.Initialize(settings.GetValue("map", "scg11eb.ini"), renderer, new int2(ClientSize), - settings.GetValue("player", 1)); - - SequenceProvider.ForcePrecache(); - +using System.Drawing; +using System.Windows.Forms; +using OpenRa.FileFormats; +using OpenRa.Game.Graphics; +using OpenRa.TechTree; +using System.Runtime.InteropServices; + +namespace OpenRa.Game +{ + using GRegion = OpenRa.Game.Graphics.Region; + + + class MainWindow : Form + { + readonly Renderer renderer; + + public readonly Sidebar sidebar; + + static Size GetResolution(Settings settings) + { + Size desktopResolution = Screen.PrimaryScreen.Bounds.Size; + + return new Size(settings.GetValue("width", desktopResolution.Width), + settings.GetValue("height", desktopResolution.Height)); + } + + [DllImport("user32")] + static extern int ShowCursor([MarshalAs(UnmanagedType.Bool)] bool visible); + + public MainWindow(Settings settings) + { + FileSystem.Mount(new Folder("../../../../")); + FileSystem.Mount(new Package("redalert.mix")); + FileSystem.Mount(new Package("conquer.mix")); + FileSystem.Mount(new Package("hires.mix")); + FileSystem.Mount(new Package("general.mix")); + FileSystem.Mount(new Package("local.mix")); + FileSystem.Mount(new Package("sounds.mix")); + FileSystem.Mount(new Package("speech.mix")); + FileSystem.Mount(new Package("allies.mix")); + FileSystem.Mount(new Package("russian.mix")); + + FormBorderStyle = FormBorderStyle.None; + BackColor = Color.Black; + StartPosition = FormStartPosition.Manual; + Location = Point.Empty; + Visible = true; + + bool windowed = !settings.GetValue("fullscreen", false); + renderer = new Renderer(this, GetResolution(settings), windowed); + SheetBuilder.Initialize(renderer); + + UiOverlay.ShowUnitDebug = settings.GetValue("udebug", false); + WorldRenderer.ShowUnitPaths = settings.GetValue("pathdebug", false); + Game.Replay = settings.GetValue("replay", ""); + + Game.Initialize(settings.GetValue("map", "scg11eb.ini"), renderer, new int2(ClientSize), + settings.GetValue("player", 1)); + + SequenceProvider.ForcePrecache(); + Game.world.Add( new Actor( "mcv", Game.map.Offset + new int2( 5, 5 ), Game.players[ 1 ]) ); Game.world.Add( new Actor( "mcv", Game.map.Offset + new int2( 7, 5 ), Game.players[ 2 ] ) ); Game.world.Add( new Actor( "mcv", Game.map.Offset + new int2( 9, 5 ), Game.players[ 0 ] ) ); Game.world.Add( new Actor( "jeep", Game.map.Offset + new int2( 9, 15 ), Game.players[ 1 ] ) ); - Game.world.Add( new Actor( "3tnk", Game.map.Offset + new int2( 12, 7 ), Game.players[ 1 ] ) ); - - sidebar = new Sidebar(renderer); - - renderer.BuildPalette(Game.map); - - ShowCursor(false); - - Game.world.ResetTimer(); - } - - internal void Run() - { - while (Created && Visible) - { - Game.Tick(); - Game.viewport.cursor = Game.controller.ChooseCursor(); - Application.DoEvents(); - } - } - - int2 lastPos; - - protected override void OnMouseDown(MouseEventArgs e) - { - base.OnMouseDown(e); - lastPos = new int2(e.Location); - - Game.viewport.DispatchMouseInput(new MouseInput - { - Button = e.Button, - Event = MouseInputEvent.Down, - Location = new int2(e.Location) - }); - } - - protected override void OnMouseMove(MouseEventArgs e) - { - base.OnMouseMove(e); - - if (e.Button == MouseButtons.Middle) - { - int2 p = new int2(e.Location); - Game.viewport.Scroll(lastPos - p); - lastPos = p; - } - - Game.viewport.DispatchMouseInput(new MouseInput - { - Button = e.Button, - Event = MouseInputEvent.Move, - Location = new int2(e.Location) - }); - - if (Game.controller.orderGenerator != null) - Game.controller.orderGenerator.PrepareOverlay( - ((1 / 24f) * (new float2(e.Location) + Game.viewport.Location)).ToInt2()); - } - - protected override void OnMouseUp(MouseEventArgs e) - { - base.OnMouseUp(e); - - Game.viewport.DispatchMouseInput(new MouseInput - { - Button = e.Button, - Event = MouseInputEvent.Up, - Location = new int2(e.Location) - }); - } - } - - struct MouseInput - { - public MouseInputEvent Event; - public int2 Location; - public MouseButtons Button; - } - - enum MouseInputEvent { Down, Move, Up }; -} + Game.world.Add( new Actor( "3tnk", Game.map.Offset + new int2( 12, 7 ), Game.players[ 1 ] ) ); + + sidebar = new Sidebar(renderer, Game.LocalPlayer); + + renderer.BuildPalette(Game.map); + + ShowCursor(false); + + Game.world.ResetTimer(); + } + + internal void Run() + { + while (Created && Visible) + { + Game.Tick(); + Game.viewport.cursor = Game.controller.ChooseCursor(); + Application.DoEvents(); + } + } + + int2 lastPos; + + protected override void OnMouseDown(MouseEventArgs e) + { + base.OnMouseDown(e); + lastPos = new int2(e.Location); + + Game.viewport.DispatchMouseInput(new MouseInput + { + Button = e.Button, + Event = MouseInputEvent.Down, + Location = new int2(e.Location) + }); + } + + protected override void OnMouseMove(MouseEventArgs e) + { + base.OnMouseMove(e); + + if (e.Button == MouseButtons.Middle) + { + int2 p = new int2(e.Location); + Game.viewport.Scroll(lastPos - p); + lastPos = p; + } + + Game.viewport.DispatchMouseInput(new MouseInput + { + Button = e.Button, + Event = MouseInputEvent.Move, + Location = new int2(e.Location) + }); + + if (Game.controller.orderGenerator != null) + Game.controller.orderGenerator.PrepareOverlay( + ((1 / 24f) * (new float2(e.Location) + Game.viewport.Location)).ToInt2()); + } + + protected override void OnMouseUp(MouseEventArgs e) + { + base.OnMouseUp(e); + + Game.viewport.DispatchMouseInput(new MouseInput + { + Button = e.Button, + Event = MouseInputEvent.Up, + Location = new int2(e.Location) + }); + } + } + + struct MouseInput + { + public MouseInputEvent Event; + public int2 Location; + public MouseButtons Button; + } + + enum MouseInputEvent { Down, Move, Up }; +} diff --git a/OpenRa.Game/Player.cs b/OpenRa.Game/Player.cs index 55a022e4a3..7193edd52a 100644 --- a/OpenRa.Game/Player.cs +++ b/OpenRa.Game/Player.cs @@ -43,7 +43,7 @@ namespace OpenRa.Game } } - // Key: Production category. Categories are: building, infantry, vehicle, boat, plane (and one per super, if they're done in here) + // Key: Production category. Categories are: building, infantry, vehicle, ship, plane (and one per super, if they're done in here) readonly Dictionary production = new Dictionary(); public void ProductionInit( string category ) diff --git a/OpenRa.Game/Sidebar.cs b/OpenRa.Game/Sidebar.cs index a4189b75dd..74550b8f35 100644 --- a/OpenRa.Game/Sidebar.cs +++ b/OpenRa.Game/Sidebar.cs @@ -13,7 +13,7 @@ namespace OpenRa.Game class Sidebar { - TechTree.TechTree techTree; + Player player; SpriteRenderer spriteRenderer, clockRenderer; Sprite blank; @@ -25,17 +25,17 @@ namespace OpenRa.Game Dictionary sprites = new Dictionary(); const int spriteWidth = 64, spriteHeight = 48; - static string[] groups = new string[] { "building", "vehicle", "boat", "infantry", "plane" }; + static string[] groups = new string[] { "building", "vehicle", "ship", "infantry", "plane" }; Dictionary itemGroups = new Dictionary(); //item->group Dictionary clockAnimations = new Dictionary(); //group->clockAnimation List items = new List(); - public Sidebar( Renderer renderer ) + public Sidebar( Renderer renderer, Player player ) { - this.techTree = Game.LocalPlayer.TechTree; - this.techTree.BuildableItemsChanged += PopulateItemList; + this.player = player; + this.player.TechTree.BuildableItemsChanged += PopulateItemList; region = GRegion.Create(Game.viewport, DockStyle.Right, 128, Paint, MouseHandler); Game.viewport.AddRegion( region ); spriteRenderer = new SpriteRenderer(renderer, false); @@ -44,12 +44,12 @@ namespace OpenRa.Game LoadSprites( "BuildingTypes", "building" ); LoadSprites( "VehicleTypes", "vehicle" ); LoadSprites( "InfantryTypes", "infantry" ); - LoadSprites( "ShipTypes", "boat" ); + LoadSprites( "ShipTypes", "ship" ); LoadSprites( "PlaneTypes", "plane" ); foreach (string group in groups) { - Game.LocalPlayer.ProductionInit( group ); + player.ProductionInit( group ); clockAnimations.Add( group, new Animation( "clock" ) ); clockAnimations[ group ].PlayFetchIndex( "idle", ClockAnimFrame( group ) ); } @@ -62,7 +62,7 @@ namespace OpenRa.Game { return () => { - var producing = Game.LocalPlayer.Producing( group ); + var producing = player.Producing( group ); if( producing == null ) return 0; return ( producing.TotalTime - producing.RemainingTime ) * NumClockFrames / producing.TotalTime; }; @@ -73,10 +73,10 @@ namespace OpenRa.Game if (item == null) return; if (item.techTreeItem.IsStructure) - Game.controller.orderGenerator = new PlaceBuilding(Game.LocalPlayer, + Game.controller.orderGenerator = new PlaceBuilding(player, item.techTreeItem.tag.ToLowerInvariant()); else - Game.controller.AddOrder(Order.BuildUnit(Game.LocalPlayer, item.techTreeItem.tag.ToLowerInvariant())); + Game.controller.AddOrder(Order.BuildUnit(player, item.techTreeItem.tag.ToLowerInvariant())); } void LoadSprites( string category, string group ) @@ -112,7 +112,7 @@ namespace OpenRa.Game items.Clear(); - foreach (Item i in techTree.BuildableItems) + foreach (Item i in player.TechTree.BuildableItems) { Sprite sprite; if (!sprites.TryGetValue(i.tag, out sprite)) continue; @@ -125,7 +125,7 @@ namespace OpenRa.Game unitPos += spriteHeight; } - foreach( string g in groups ) Game.LocalPlayer.CancelProduction( g ); + foreach( string g in groups ) player.CancelProduction( g ); } void Paint() @@ -133,7 +133,7 @@ namespace OpenRa.Game foreach( SidebarItem i in items ) { var group = itemGroups[ i.techTreeItem.tag ]; - var producing = Game.LocalPlayer.Producing( group ); + var producing = player.Producing( group ); if( producing != null && producing.Item == i.techTreeItem.tag ) { clockAnimations[ group ].Tick(); @@ -167,9 +167,9 @@ namespace OpenRa.Game if (item != null) { string group = itemGroups[item.techTreeItem.tag]; - if (Game.LocalPlayer.Producing(group) == null) + if (player.Producing(group) == null) { - Game.LocalPlayer.BeginProduction( group, new ProductionItem( item.techTreeItem.tag, 25, 0 ) ); + player.BeginProduction( group, new ProductionItem( item.techTreeItem.tag, 25, 0 ) ); Build(item); } } @@ -181,7 +181,7 @@ namespace OpenRa.Game if( item != null ) { string group = itemGroups[ item.techTreeItem.tag ]; - Game.LocalPlayer.CancelProduction( group ); + player.CancelProduction( group ); } } } diff --git a/OpenRa.Game/TechTree/Item.cs b/OpenRa.Game/TechTree/Item.cs index 5f9733202d..3b56fc23e1 100755 --- a/OpenRa.Game/TechTree/Item.cs +++ b/OpenRa.Game/TechTree/Item.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using OpenRa.FileFormats; using OpenRa.Game.GameRules; +using IjwFramework.Types; namespace OpenRa.TechTree { @@ -33,7 +34,7 @@ namespace OpenRa.TechTree Race race = Race.None; foreach (string s in owners) - race |= (Race)Enum.Parse(typeof(Race), s, true); + race |= Enum.Parse(s); return race; } diff --git a/OpenRa.Game/TechTree/TechTree.cs b/OpenRa.Game/TechTree/TechTree.cs index b4eb5114be..884037a1fc 100644 --- a/OpenRa.Game/TechTree/TechTree.cs +++ b/OpenRa.Game/TechTree/TechTree.cs @@ -1,77 +1,77 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Text; -using System.Text.RegularExpressions; -using OpenRa.FileFormats; -using System.Linq; -using OpenRa.Game; - -namespace OpenRa.TechTree -{ - public class TechTree - { - Dictionary objects = new Dictionary(); - public ICollection built = new List(); - - Race currentRace = Race.None; - - public Race CurrentRace - { - get { return currentRace; } - set - { - currentRace = value; - CheckAll(); - } - } - - public TechTree() - { - LoadRules(); - CheckAll(); - } - - void LoadRules() - { - var allBuildings = Rules.AllRules.GetSection( "BuildingTypes" ).Select( x => x.Key.ToLowerInvariant() ).ToList(); - - foreach( var unit in Rules.UnitInfo ) - objects.Add( unit.Key, new Item( unit.Key, unit.Value, allBuildings.Contains( unit.Key ) ) ); - } - - public bool Build(string key, bool force) - { - if( string.IsNullOrEmpty( key ) ) return false; - key = key.ToLowerInvariant(); - Item b = objects[ key ]; - if (!force && !b.CanBuild) return false; - built.Add(key); - CheckAll(); - return true; +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using OpenRa.FileFormats; +using System.Linq; +using OpenRa.Game; + +namespace OpenRa.TechTree +{ + public class TechTree + { + Dictionary objects = new Dictionary(); + public ICollection built = new List(); + + Race currentRace = Race.None; + + public Race CurrentRace + { + get { return currentRace; } + set + { + currentRace = value; + CheckAll(); + } } - public bool Build(string key) { return Build(key, false); } - - public bool Unbuild(string key) - { - key = key.ToLowerInvariant(); - Item b = objects[key]; - if (!built.Contains(key)) return false; - built.Remove(key); - CheckAll(); - return true; - } - - void CheckAll() - { - foreach (Item unit in objects.Values) - unit.CheckPrerequisites(built, currentRace); - - BuildableItemsChanged(); + public TechTree() + { + LoadRules(); + CheckAll(); } - public IEnumerable BuildableItems { get { return objects.Values.Where(b => b.CanBuild); } } - public event Action BuildableItemsChanged = () => { }; - } -} + void LoadRules() + { + var allBuildings = Rules.AllRules.GetSection( "BuildingTypes" ).Select( x => x.Key.ToLowerInvariant() ).ToList(); + + foreach( var unit in Rules.UnitInfo ) + objects.Add( unit.Key, new Item( unit.Key, unit.Value, allBuildings.Contains( unit.Key ) ) ); + } + + public bool Build(string key, bool force) + { + if( string.IsNullOrEmpty( key ) ) return false; + key = key.ToLowerInvariant(); + Item b = objects[ key ]; + if (!force && !b.CanBuild) return false; + built.Add(key); + CheckAll(); + return true; + } + + public bool Build(string key) { return Build(key, false); } + + public bool Unbuild(string key) + { + key = key.ToLowerInvariant(); + Item b = objects[key]; + if (!built.Contains(key)) return false; + built.Remove(key); + CheckAll(); + return true; + } + + void CheckAll() + { + foreach (Item unit in objects.Values) + unit.CheckPrerequisites(built, currentRace); + + BuildableItemsChanged(); + } + + public IEnumerable BuildableItems { get { return objects.Values.Where(b => b.CanBuild); } } + public event Action BuildableItemsChanged = () => { }; + } +}