From 7f5c59a9677d3baeca4511394a898c1780b1fa19 Mon Sep 17 00:00:00 2001 From: Bob Date: Thu, 21 Jan 2010 13:20:46 +1300 Subject: [PATCH] passing refs to World in Chrome --- OpenRa.Game/Chrome.cs | 130 +++++++++++++++---------------- OpenRa.Game/Game.cs | 2 +- OpenRa.Game/Graphics/Viewport.cs | 8 +- 3 files changed, 70 insertions(+), 70 deletions(-) diff --git a/OpenRa.Game/Chrome.cs b/OpenRa.Game/Chrome.cs index 4eadafea70..d21745005b 100644 --- a/OpenRa.Game/Chrome.cs +++ b/OpenRa.Game/Chrome.cs @@ -144,14 +144,14 @@ namespace OpenRa TickRadarAnimation(); } - public void Draw() + public void Draw( World world ) { DrawDownloadBar(); - chromeCollection = (Game.world.LocalPlayer.Race == Race.Allies) ? "chrome-allies" : "chrome-soviet"; - radarCollection = (Game.world.LocalPlayer.Race == Race.Allies) ? "radar-allies" : "radar-soviet"; - paletteCollection = (Game.world.LocalPlayer.Race == Race.Allies) ? "palette-allies" : "palette-soviet"; - digitCollection = (Game.world.LocalPlayer.Race == Race.Allies) ? "digits-allies" : "digits-soviet"; + chromeCollection = (world.LocalPlayer.Race == Race.Allies) ? "chrome-allies" : "chrome-soviet"; + radarCollection = (world.LocalPlayer.Race == Race.Allies) ? "radar-allies" : "radar-soviet"; + paletteCollection = (world.LocalPlayer.Race == Race.Allies) ? "palette-allies" : "palette-soviet"; + digitCollection = (world.LocalPlayer.Race == Race.Allies) ? "digits-allies" : "digits-soviet"; buttons.Clear(); @@ -164,18 +164,18 @@ namespace OpenRa new int2(140, 15), Color.White); if (Game.Settings.PerfGraph) - PerfHistory.Render(renderer, Game.world.WorldRenderer.lineRenderer); + PerfHistory.Render(renderer, world.WorldRenderer.lineRenderer); - DrawRadar(); - DrawPower(); + DrawRadar( world ); + DrawPower( world ); rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer, chromeCollection, "moneybin"), new float2(Game.viewport.Width - 320, 0), PaletteType.Chrome); - DrawMoney(); + DrawMoney( world ); rgbaRenderer.Flush(); - DrawButtons(); + DrawButtons( world ); - int paletteHeight = DrawBuildPalette(currentTab); - DrawSupportPowers(); - DrawBuildTabs(paletteHeight); + int paletteHeight = DrawBuildPalette(world, currentTab); + DrawSupportPowers( world ); + DrawBuildTabs(world, paletteHeight); DrawChat(); DrawOptionsMenu(); } @@ -222,7 +222,7 @@ namespace OpenRa AddButton(r, _ => { }); } - public void DrawLobby() + public void DrawLobby( World world ) { DrawDownloadBar(); @@ -238,8 +238,8 @@ namespace OpenRa DrawDialogBackground(new Rectangle(r.Right - 330, r.Top + 40, 310, r.Bottom - 273 - r.Top - 40), panelSprites, false); - Game.world.Minimap.Update(); - Game.world.Minimap.Draw(new Rectangle(r.Right - 325, r.Top + 45, 300, 277), true); + world.Minimap.Update(); + world.Minimap.Draw(new Rectangle(r.Right - 325, r.Top + 45, 300, 277), true); renderer.DrawText2("Name", new int2(r.Left + 30, r.Top + 50), Color.White); renderer.DrawText2("Color", new int2(r.Left + 230, r.Top + 50), Color.White); @@ -303,9 +303,9 @@ namespace OpenRa } } - void DrawRadar() + void DrawRadar( World world ) { - var hasNewRadar = Game.world.Actors.Any(a => a.Owner == Game.world.LocalPlayer + var hasNewRadar = world.Actors.Any(a => a.Owner == world.LocalPlayer && a.traits.Contains() && a.traits.Get().IsActive(a)); @@ -328,36 +328,36 @@ namespace OpenRa if (radarAnimationFrame >= radarSlideAnimationLength) { RectangleF mapRect = new RectangleF(radarOrigin.X + 9, radarOrigin.Y+(192-radarMinimapHeight)/2, 192, radarMinimapHeight); - Game.world.Minimap.Draw(mapRect, false); + world.Minimap.Draw(mapRect, false); } } void AddButton(RectangleF r, Action b) { buttons.Add(Pair.New(r, b)); } - void DrawBuildTabs(int paletteHeight) + void DrawBuildTabs( World world, int paletteHeight) { const int tabWidth = 24; const int tabHeight = 40; var x = paletteOrigin.X - tabWidth; var y = paletteOrigin.Y + 9; - if (currentTab == null || !Rules.TechTree.BuildableItems(Game.world.LocalPlayer, currentTab).Any()) - ChooseAvailableTab(); + if (currentTab == null || !Rules.TechTree.BuildableItems(world.LocalPlayer, currentTab).Any()) + ChooseAvailableTab( world ); - var queue = Game.world.LocalPlayer.PlayerActor.traits.Get(); + var queue = world.LocalPlayer.PlayerActor.traits.Get(); foreach (var q in tabImageNames) { var groupName = q.Key; - if (!Rules.TechTree.BuildableItems(Game.world.LocalPlayer, groupName).Any()) + if (!Rules.TechTree.BuildableItems(world.LocalPlayer, groupName).Any()) { - CheckDeadTab(groupName); + CheckDeadTab( world, groupName ); continue; } string[] tabKeys = { "normal", "ready", "selected" }; var producing = queue.CurrentItem(groupName); var index = q.Key == currentTab ? 2 : (producing != null && producing.Done) ? 1 : 0; - var race = (Game.world.LocalPlayer.Race == Race.Allies) ? "allies" : "soviet"; + var race = (world.LocalPlayer.Race == Race.Allies) ? "allies" : "soviet"; rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer,"tabs-"+tabKeys[index], race+"-"+q.Key), new float2(x, y), PaletteType.Chrome); buttons.Add(Pair.New(new RectangleF(x, y, tabWidth, tabHeight), @@ -378,22 +378,22 @@ namespace OpenRa paletteAnimating = true; } - void CheckDeadTab( string groupName ) + void CheckDeadTab( World world, string groupName ) { - var queue = Game.world.LocalPlayer.PlayerActor.traits.Get(); + var queue = world.LocalPlayer.PlayerActor.traits.Get(); foreach( var item in queue.AllItems( groupName ) ) - Game.controller.AddOrder(Order.CancelProduction(Game.world.LocalPlayer, item.Item)); + Game.controller.AddOrder(Order.CancelProduction(world.LocalPlayer, item.Item)); } - void ChooseAvailableTab() + void ChooseAvailableTab( World world ) { currentTab = tabImageNames.Select(q => q.Key).FirstOrDefault( - t => Rules.TechTree.BuildableItems(Game.world.LocalPlayer, t).Any()); + t => Rules.TechTree.BuildableItems(world.LocalPlayer, t).Any()); } - void DrawMoney() + void DrawMoney( World world ) { - var moneyDigits = Game.world.LocalPlayer.DisplayCash.ToString(); + var moneyDigits = world.LocalPlayer.DisplayCash.ToString(); var x = Game.viewport.Width - 65; foreach (var d in moneyDigits.Reverse()) { @@ -405,10 +405,10 @@ namespace OpenRa float? lastPowerProvidedPos; float? lastPowerDrainedPos; - void DrawPower() + void DrawPower( World world ) { // Nothing to draw - if (Game.world.LocalPlayer.PowerProvided == 0 && Game.world.LocalPlayer.PowerDrained == 0) + if (world.LocalPlayer.PowerProvided == 0 && world.LocalPlayer.PowerDrained == 0) return; // Draw bar horizontally @@ -416,18 +416,18 @@ namespace OpenRa var barEnd = barStart + new float2(powerSize.Width, 0); float powerScaleBy = 100; - var maxPower = Math.Max(Game.world.LocalPlayer.PowerProvided, Game.world.LocalPlayer.PowerDrained); + var maxPower = Math.Max(world.LocalPlayer.PowerProvided, world.LocalPlayer.PowerDrained); while (maxPower >= powerScaleBy) powerScaleBy *= 2; // Current power supply - var powerLevelTemp = barStart.X + (barEnd.X - barStart.X) * (Game.world.LocalPlayer.PowerProvided / powerScaleBy); + var powerLevelTemp = barStart.X + (barEnd.X - barStart.X) * (world.LocalPlayer.PowerProvided / powerScaleBy); lastPowerProvidedPos = float2.Lerp(lastPowerProvidedPos.GetValueOrDefault(powerLevelTemp), powerLevelTemp, .3f); float2 powerLevel = new float2(lastPowerProvidedPos.Value, barStart.Y); var color = Color.LimeGreen; - if (Game.world.LocalPlayer.GetPowerState() == PowerState.Low) + if (world.LocalPlayer.GetPowerState() == PowerState.Low) color = Color.Orange; - if (Game.world.LocalPlayer.GetPowerState() == PowerState.Critical) + if (world.LocalPlayer.GetPowerState() == PowerState.Critical) color = Color.Red; var colorDark = Graphics.Util.Lerp(0.25f, color, Color.Black); @@ -448,7 +448,7 @@ namespace OpenRa // Power usage indicator var indicator = ChromeProvider.GetImage(renderer, radarCollection, "power-indicator"); - var powerDrainedTemp = barStart.X + (barEnd.X - barStart.X) * (Game.world.LocalPlayer.PowerDrained / powerScaleBy); + var powerDrainedTemp = barStart.X + (barEnd.X - barStart.X) * (world.LocalPlayer.PowerDrained / powerScaleBy); lastPowerDrainedPos = float2.Lerp(lastPowerDrainedPos.GetValueOrDefault(powerDrainedTemp), powerDrainedTemp, .3f); float2 powerDrainLevel = new float2(lastPowerDrainedPos.Value-indicator.size.X/2, barStart.Y-1); @@ -456,14 +456,14 @@ namespace OpenRa rgbaRenderer.Flush(); } - void DrawButtons() + 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 hasFact = Game.world.Actors.Any(a => a.Owner == Game.world.LocalPlayer && a.traits.Contains()); + var hasFact = world.Actors.Any(a => a.Owner == world.LocalPlayer && a.traits.Contains()); if (Game.Settings.RepairRequiresConyard && !hasFact) repairButton.ReplaceAnim("disabled"); @@ -630,7 +630,7 @@ namespace OpenRa // Return an int telling us the y coordinate at the bottom of the palette - int DrawBuildPalette(string queueName) + int DrawBuildPalette( World world, string queueName ) { // Hack int columns = paletteColumns; @@ -641,14 +641,14 @@ namespace OpenRa var x = 0; var y = 0; - var buildableItems = Rules.TechTree.BuildableItems(Game.world.LocalPlayer, queueName).ToArray(); + var buildableItems = Rules.TechTree.BuildableItems(world.LocalPlayer, queueName).ToArray(); - var allBuildables = Rules.TechTree.AllBuildables(Game.world.LocalPlayer, queueName) + var allBuildables = Rules.TechTree.AllBuildables(world.LocalPlayer, queueName) .Where(a => a.Traits.Contains()) - .Where(a => a.Traits.Get().Owner.Contains(Game.world.LocalPlayer.Race)) + .Where(a => a.Traits.Get().Owner.Contains(world.LocalPlayer.Race)) .OrderBy(a => a.Traits.Get().TechLevel); - var queue = Game.world.LocalPlayer.PlayerActor.traits.Get(); + var queue = world.LocalPlayer.PlayerActor.traits.Get(); var overlayBits = new List>(); @@ -722,7 +722,7 @@ namespace OpenRa var closureItemName = item.Name; AddButton(rect, buildableItems.Contains(item.Name) - ? isLmb => HandleBuildPalette(closureItemName, isLmb) + ? isLmb => HandleBuildPalette(world, closureItemName, isLmb) : (Action)(_ => Sound.Play("briefing.aud"))); if (++x == columns) { x = 0; y++; } @@ -751,21 +751,21 @@ namespace OpenRa rgbaRenderer.Flush(); if (tooltipItem != null) - DrawProductionTooltip(tooltipItem, new float2(Game.viewport.Width, origin.Y + y * 48 + 9).ToInt2()/*tooltipPos*/); + DrawProductionTooltip(world, tooltipItem, new float2(Game.viewport.Width, origin.Y + y * 48 + 9).ToInt2()/*tooltipPos*/); return y*48+9; } - void StartProduction( string item ) + void StartProduction( World world, string item ) { var unit = Rules.Info[item]; Sound.Play(unit.Traits.Contains() ? "abldgin1.aud" : "train1.aud"); - Game.controller.AddOrder(Order.StartProduction(Game.world.LocalPlayer, item)); + Game.controller.AddOrder(Order.StartProduction(world.LocalPlayer, item)); } - void HandleBuildPalette(string item, bool isLmb) + void HandleBuildPalette( World world, string item, bool isLmb ) { - var player = Game.world.LocalPlayer; + var player = world.LocalPlayer; var unit = Rules.Info[item]; var queue = player.PlayerActor.traits.Get(); var producing = queue.AllItems(unit.Category).FirstOrDefault( a => a.Item == item ); @@ -790,7 +790,7 @@ namespace OpenRa } } - StartProduction(item); + StartProduction(world, item); } else { @@ -844,7 +844,7 @@ namespace OpenRa renderer.DrawText2(text, pos - new int2(renderer.MeasureText2(text).X/2, 0), c); } - void DrawProductionTooltip(string unit, int2 pos) + void DrawProductionTooltip(World world, string unit, int2 pos) { var tooltipSprite = ChromeProvider.GetImage(renderer, chromeCollection, "tooltip-bg"); var p = pos.ToFloat2() - new float2(tooltipSprite.size.X, 0); @@ -857,18 +857,18 @@ namespace OpenRa renderer.DrawText2(buildable.Description, p.ToInt2() + new int2(5,5), Color.White); DrawRightAligned( "${0}".F(buildable.Cost), pos + new int2(-5,5), - Game.world.LocalPlayer.Cash + Game.world.LocalPlayer.Ore >= buildable.Cost ? Color.White : Color.Red); + world.LocalPlayer.Cash + world.LocalPlayer.Ore >= buildable.Cost ? Color.White : Color.Red); var bi = info.Traits.GetOrDefault(); if (bi != null) DrawRightAligned("ϟ{0}".F(bi.Power), pos + new int2(-5, 20), - Game.world.LocalPlayer.PowerProvided - Game.world.LocalPlayer.PowerDrained + bi.Power >= 0 + world.LocalPlayer.PowerProvided - world.LocalPlayer.PowerDrained + bi.Power >= 0 ? Color.White : Color.Red); - var buildings = Rules.TechTree.GatherBuildings( Game.world.LocalPlayer ); + var buildings = Rules.TechTree.GatherBuildings( world.LocalPlayer ); p += new int2(5, 5); p += new int2(0, 15); - if (!Rules.TechTree.CanBuild(info, Game.world.LocalPlayer, buildings)) + if (!Rules.TechTree.CanBuild(info, world.LocalPlayer, buildings)) { var prereqs = buildable.Prerequisites .Select( a => Description( a ) ); @@ -891,9 +891,9 @@ namespace OpenRa return Rules.Info[ a.ToLowerInvariant() ].Traits.Get().Description; } - void DrawSupportPowers() + void DrawSupportPowers( World world ) { - var numPowers = Game.world.LocalPlayer.SupportPowers.Values + var numPowers = world.LocalPlayer.SupportPowers.Values .Where(a => a.IsAvailable).Count(); if (numPowers == 0) return; @@ -910,7 +910,7 @@ namespace OpenRa string tooltipItem = null; int2 tooltipPos = int2.Zero; - foreach (var sp in Game.world.LocalPlayer.SupportPowers) + foreach (var sp in world.LocalPlayer.SupportPowers) { var image = spsprites[sp.Key]; if (sp.Value.IsAvailable) @@ -949,7 +949,7 @@ namespace OpenRa shpRenderer.Flush(); if (tooltipItem != null) - DrawSupportPowerTooltip(tooltipItem, tooltipPos); + DrawSupportPowerTooltip(world, tooltipItem, tooltipPos); } Action HandleSupportPower(SupportPower sp) @@ -965,7 +965,7 @@ namespace OpenRa return "{0:D2}:{1:D2}".F(minutes, seconds % 60); } - void DrawSupportPowerTooltip(string sp, int2 pos) + void DrawSupportPowerTooltip(World world, string sp, int2 pos) { var tooltipSprite = ChromeProvider.GetImage(renderer, chromeCollection, "tooltip-bg"); rgbaRenderer.DrawSprite(tooltipSprite, pos, PaletteType.Chrome); @@ -977,7 +977,7 @@ namespace OpenRa renderer.DrawText2(info.Description, pos, Color.White); - var timer = "Charge Time: {0}".F(FormatTime(Game.world.LocalPlayer.SupportPowers[sp].RemainingTime)); + var timer = "Charge Time: {0}".F(FormatTime(world.LocalPlayer.SupportPowers[sp].RemainingTime)); DrawRightAligned(timer, pos + new int2((int)tooltipSprite.size.X - 10, 0), Color.White); if (info.LongDesc != null) diff --git a/OpenRa.Game/Game.cs b/OpenRa.Game/Game.cs index 293342084b..2f3e5c075f 100644 --- a/OpenRa.Game/Game.cs +++ b/OpenRa.Game/Game.cs @@ -146,7 +146,7 @@ namespace OpenRa using (new PerfSample("render")) { ++RenderFrame; - viewport.DrawRegions(); + viewport.DrawRegions( world ); } PerfHistory.items["render"].Tick(); diff --git a/OpenRa.Game/Graphics/Viewport.cs b/OpenRa.Game/Graphics/Viewport.cs index b412177374..18fe71cb75 100644 --- a/OpenRa.Game/Graphics/Viewport.cs +++ b/OpenRa.Game/Graphics/Viewport.cs @@ -42,7 +42,7 @@ namespace OpenRa.Graphics this.scrollPosition = Game.CellSize* mapStart; } - public void DrawRegions() + public void DrawRegions( World world ) { Game.world.WorldRenderer.palette.Update(Game.world.Actors.SelectMany( a => a.traits.WithInterface())); @@ -55,7 +55,7 @@ namespace OpenRa.Graphics if( Game.orderManager.GameStarted ) { Game.world.WorldRenderer.Draw(); - Game.chrome.Draw(); + Game.chrome.Draw( world ); if (Game.orderManager.IsNetplay && Game.orderManager.Sources.OfType().First().State == ConnectionState.NotConnected) @@ -77,12 +77,12 @@ namespace OpenRa.Graphics Game.chrome.DrawDialog("Connection failed."); break; case ConnectionState.Connected: - Game.chrome.DrawLobby(); + Game.chrome.DrawLobby( world ); break; } } else - Game.chrome.DrawLobby(); + Game.chrome.DrawLobby( world ); } var c = Game.chrome.HitTest(mousePos) ? Cursor.Default : Game.controller.ChooseCursor();