diff --git a/OpenRa.Game/Actor.cs b/OpenRa.Game/Actor.cs index ef667e4ef5..ab710e0284 100755 --- a/OpenRa.Game/Actor.cs +++ b/OpenRa.Game/Actor.cs @@ -70,7 +70,6 @@ namespace OpenRa.Game case "stek": case "fact": case "proc": - case "silo": case "hpad": case "afld": case "dome": @@ -106,6 +105,10 @@ namespace OpenRa.Game traits.Add( new Traits.Turreted( this ) ); traits.Add( new Traits.RenderBuildingTurreted( this ) ); break; + case "silo": + traits.Add(new Traits.Building(this)); + traits.Add(new Traits.RenderBuildingOre(this)); + break; default: throw new NotImplementedException( "Actor traits for " + name ); @@ -196,6 +199,15 @@ namespace OpenRa.Game { anim.PlayThen( "make", () => anim.PlayFetchIndex( "idle", () => self.traits.Get().turretFacing ) ); } + } + + class RenderBuildingOre : RenderBuilding + { + public RenderBuildingOre(Actor self) + : base(self) + { + anim.PlayThen("make", () => anim.PlayFetchIndex("idle", () => (int)(5 * self.Owner.GetSiloFullness()))); + } } class RenderWarFactory : RenderBuilding diff --git a/OpenRa.Game/Controller.cs b/OpenRa.Game/Controller.cs index 39339d64eb..f1758de13e 100644 --- a/OpenRa.Game/Controller.cs +++ b/OpenRa.Game/Controller.cs @@ -24,7 +24,7 @@ namespace OpenRa.Game return (1 / 24.0f) * (new float2(mi.Location.X, mi.Location.Y) + game.viewport.Location); } - float2? dragStart, dragEnd; + float2 dragStart, dragEnd; public void HandleMouseInput(MouseInput mi) { var xy = GetWorldPos(mi); @@ -35,20 +35,19 @@ namespace OpenRa.Game } if (mi.Button == MouseButtons.Left && mi.Event == MouseInputEvent.Move) - if (dragEnd != null) - dragEnd = GetWorldPos(mi); + dragEnd = GetWorldPos(mi); if (mi.Button == MouseButtons.Left && mi.Event == MouseInputEvent.Up) { if (!(orderGenerator is PlaceBuilding)) { - if (dragStart.HasValue && !(dragStart.Value == GetWorldPos(mi))) - orderGenerator = new UnitOrderGenerator( FindUnits( game, 24 * dragStart.Value, 24 * xy ) ); /* band-box select */ + if (dragStart != GetWorldPos(mi)) + orderGenerator = new UnitOrderGenerator( FindUnits( game, 24 * dragStart, 24 * xy ) ); /* band-box select */ else orderGenerator = new UnitOrderGenerator( FindUnits( game, 24 * xy, 24 * xy ) ); /* click select */ - } - - dragStart = dragEnd = null; + } + + dragStart = dragEnd; } if (mi.Button == MouseButtons.None && mi.Event == MouseInputEvent.Move) @@ -88,10 +87,8 @@ namespace OpenRa.Game public Pair? SelectionBox() { - if (dragStart == null || dragEnd == null) - return null; - - return Pair.New(24 * dragStart.Value, 24 * dragEnd.Value); + if (dragStart == dragEnd) return null; + return Pair.New(24 * dragStart, 24 * dragEnd); } } } diff --git a/OpenRa.Game/Game Code.cd b/OpenRa.Game/Game Code.cd index 69f4f06f24..b81041cb0b 100644 --- a/OpenRa.Game/Game Code.cd +++ b/OpenRa.Game/Game Code.cd @@ -1,234 +1,195 @@  - - + + - AAAAgAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAIAAQAA= + AAEAAAiAAAAAAAAAAQIAAIAAAQAAAAAAABAAAAAAQAA= Actor.cs + + + - + - AAYAACABAAAAgAAAAIAABgAAAAAAAAAIAAAAAAAAAAA= + AAYAACABABAAgAAAAIAABgAAAAAAAAAIAAAAAAAAAAA= World.cs - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA= - Building.cs - + + + + + + - + - AAAAEAAAAIAAAAEEBAAAIAAQQAAAAQAAJAAAAABAQAA= + AAAAEAAAAIAAAAEEBAAAIAAQQAAAAAAAJAAAAABAQAA= Game.cs - - - - - AAAAAAAAAAAAAAAAAAAAAAAAABAAAAAKIEAACAAAgAI= - MainWindow.cs - - - - - - AAAAAAAAABAAAAAAIAAAAAAAAAAAAAAEAAAAAAAAAAA= - MoveOrder.cs - - - - - - AAAAAAAAABAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - MoveOrder.cs - - - - - - AAAAAAAAABAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - MoveOrder.cs - + + + + + + + + + + + + + - + AAAAEAAAAAAAABAAAAAAAAAAAAAEEAAAMAAAAAAAAAA= PathFinder.cs - + - AAEAAAAAAAAAAAAAAAAAACAAAgAAAAAAAAAAAAAAAAA= + AAEAAAAAAAIAAAAAAAAAACAAAgAAAAAAAAAAAAAAAAA= Player.cs + + + - - + + - AAAAgAAAAAAAIAAAAAAAAIACAAAAAAAAAgAAAIAAAAA= - PlayerOwned.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - Refinery.cs - - - - - - AAAAAAgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - Rules.cs - - - - - - AACAAAQAgECAAGAAEAgCAEAACABAiIAIAAAAIAC8AAA= - Sidebar.cs - - - - - - AAEAAACAAAAAAAAAAAAAAAQAAAAAAAAAAAAAQAAAAAA= - Sidebar.cs - - - - - - - AAAAAAAAAAAAAAAAAAAAAAACEBAAACAAAAAAAAAIAAA= - SidebarItem.cs - - - - - - AAAAAAAAAAAAAAIAAAAAABAAAAAAAAAAAAAAAAAAAAA= - TerrainCosts.cs - - - - - - gAAAgAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAIAAAAA= - Tree.cs - - - - - - AAAAAAAAAIAAAiQAQAAQIABAQAAgAAAYAAAAAAQAAAA= + AAAAAAAAAIAAAiAAAAAQIABAAAAkAAAYAAAAAAQAAAA= UiOverlay.cs + + + + - - + + - AAEAgDgAAAAAAAAAAAAAAAEAAAEGAAgAAAAERAAAQAA= - Unit.cs + IAAAAAAIAAAAAAAAAAACAgAAABAAAAAIAIAAAIAABAA= + Controller.cs - + + + + - - + + - AIAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAA= - UnitInfo.cs + AAAACAAAAAAAAAAAAAAEAAIgAQAAoyACAAAAAAAAAAA= + TechTree\TechTree.cs - - - - + + - AAAAAAAAAYAAAAAAAAACAAABAAAAAAAAABAAAAAAAAA= - UnitMissions.cs + AACAEABAAAAAAmAAAAAAAAAIAAAAAAAAAAAAAAAAAAA= + Graphics\WorldRenderer.cs + + + + + + + + + + + + AAAAAAAABAAAiAAAAIYAAEAAAABCAAAAAABgAAAAgBE= + Graphics\Viewport.cs + + + + + + + + + AACAEAACCAAAAgMAAAAAAEAAAAAAAAAAEAAAAAAAAAA= + Graphics\Renderer.cs - - + + - AAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - MoveOrder.cs + AAAQQAAAAECAAAAAAAAAAAAAABAQABAAAAAAAACIwAQ= + Graphics\SpriteRenderer.cs + + + + + + + + + + AAAQQAAAACCAAAAAAAAAAAAAABIQAAAAAEAAAAAIwAA= + Graphics\LineRenderer.cs + + + + + + + + + AAAAAAAAAACAgAAACAgAAAAIAAAAAgAAAAIAAAAggAA= + Graphics\Sheet.cs + + + + + + + + + AACQEAAAAAAAAgAABAAACgAAABgAAAAAAAAAAAAAgAA= + Graphics\TerrainRenderer.cs + + + + + + + + + + + + AAAAEAAAABAAAiCAAEAAAAAAAAQAAABAAAAAEAAQAAA= + Graphics\OverlayRenderer.cs + + + + + + + + + + + + + AAKAAAAAgAAAAAAAAEAAAAAACAAAAABAAAAAJAAAQAA= + Network\Network.cs - - - - EAAAAAAAABAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - Sidebar.cs - - - - - - AAAAAAAAAAAAAAIAAAEAAAAAAAAAAAQAAAAAAAAAAAA= - PathFinder.cs - - - - - - AAAAAAAAAAAAAAQAAAIAQAAAAAAAAAAAAAAAAAAAAAA= - PathFinder.cs - - - - + AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAA= IOrderGenerator.cs - - - - AAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAQAAAAAAAiAAA= - TerrainCosts.cs - - - - - - AAAAAAABAAAAAAAAIEAAAAAAAABgAAQgAAAAAABQAAA= - TerrainCosts.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAIBAAAAAAAAA= - UnitMissions.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAAAAAAEAAAA= - Race.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAA= - UnitMissions.cs - - \ No newline at end of file diff --git a/OpenRa.Game/Game.cs b/OpenRa.Game/Game.cs index b3ec25dce4..21156f5a2c 100644 --- a/OpenRa.Game/Game.cs +++ b/OpenRa.Game/Game.cs @@ -10,8 +10,8 @@ namespace OpenRa.Game class Game { public readonly World world; - public readonly Map map; - public readonly TreeCache treeCache; + public readonly Map map; + readonly TreeCache treeCache; public readonly TerrainRenderer terrain; public readonly Viewport viewport; public readonly PathFinder pathFinder; diff --git a/OpenRa.Game/Player.cs b/OpenRa.Game/Player.cs index cdac3c29be..bd3357e48e 100644 --- a/OpenRa.Game/Player.cs +++ b/OpenRa.Game/Player.cs @@ -13,5 +13,10 @@ namespace OpenRa.Game this.PlayerName = playerName; TechTree.CurrentRace = race; } + + public float GetSiloFullness() + { + return 0.5f; /* todo: work this out the same way as RA */ + } } } diff --git a/OpenRa.Game/TechTree/TechTree.cs b/OpenRa.Game/TechTree/TechTree.cs index 98f610676f..2b834af0b6 100644 --- a/OpenRa.Game/TechTree/TechTree.cs +++ b/OpenRa.Game/TechTree/TechTree.cs @@ -4,6 +4,7 @@ using System.IO; using System.Text; using System.Text.RegularExpressions; using OpenRa.FileFormats; +using System.Linq; using OpenRa.Game; namespace OpenRa.TechTree @@ -31,14 +32,6 @@ namespace OpenRa.TechTree CheckAll(); } - static IEnumerable Concat(IEnumerable one, IEnumerable two) - { - foreach (T t in one) - yield return t; - foreach (T t in two) - yield return t; - } - IEnumerable> Lines(string filename, bool param) { Regex pattern = new Regex(@"^(\w+),([\w ]+),(\w+)$"); @@ -55,14 +48,12 @@ namespace OpenRa.TechTree void LoadRules() { - IEnumerable> definitions = Concat( Concat( - Lines("buildings.txt", true), - Lines("vehicles.txt", false) ), - Lines("infantry.txt", false) ); + IEnumerable> definitions = + Lines("buildings.txt", true) + .Concat( Lines( "vehicles.txt", false ) ) + .Concat( Lines( "infantry.txt", false ) ); - var rules = SharedResources.Rules; - - foreach (Tuple p in definitions) + foreach (Tuple p in definitions) objects.Add(p.a, new Item(p.a, p.b, Rules.UnitInfo.Get(p.a), p.c)); } diff --git a/OpenRa.Game/World.cs b/OpenRa.Game/World.cs index ad375add9e..1a19514d66 100644 --- a/OpenRa.Game/World.cs +++ b/OpenRa.Game/World.cs @@ -18,20 +18,22 @@ namespace OpenRa.Game public void Remove( Actor a ) { actors.Remove( a ); } public void AddFrameEndTask( Action a ) { frameEndActions.Add( a ); } - int lastTime = Environment.TickCount + 2000; + int lastTime = Environment.TickCount; + + const int timestep = 40; public void Update() { int t = Environment.TickCount; int dt = t - lastTime; - if( dt >= 40 ) - { - lastTime += 40; + if( dt >= timestep ) + { + lastTime += timestep; - foreach( Actor a in actors ) - a.Tick( game, 40 ); + foreach( Actor a in actors ) + a.Tick(game, timestep); - Renderer.waterFrame += 0.05f; + Renderer.waterFrame += 0.00125f * timestep; } foreach (Action a in frameEndActions) a(this);