Bye Bye Chrome!

This commit is contained in:
alzeih
2010-07-21 17:57:06 +12:00
parent 0ac91d3c5e
commit 222b29cec6
35 changed files with 180 additions and 199 deletions

View File

@@ -1,53 +0,0 @@
#region Copyright & License Information
/*
* Copyright 2007-2010 The OpenRA Developers (see AUTHORS)
* This file is part of OpenRA, which is free software. It is made
* available to you under the terms of the GNU General Public License
* as published by the Free Software Foundation. For more information,
* see LICENSE.
*/
#endregion
using System.Linq;
using OpenRA.FileFormats;
using OpenRA.Graphics;
using OpenRA.Widgets;
namespace OpenRA
{
class Chrome
{
public readonly Renderer renderer;
public readonly LineRenderer lineRenderer;
SpriteRenderer rgbaRenderer { get { return renderer.RgbaSpriteRenderer; } }
SpriteRenderer shpRenderer { get { return renderer.WorldSpriteRenderer; } }
public Chrome(Renderer r, Manifest m)
{
this.renderer = r;
lineRenderer = new LineRenderer(renderer);
var widgetYaml = m.ChromeLayout.Select(a => MiniYaml.FromFile(a)).Aggregate(MiniYaml.Merge);
if (Widget.RootWidget == null)
{
Widget.RootWidget = WidgetLoader.LoadWidget( widgetYaml.FirstOrDefault() );
Widget.RootWidget.Initialize();
Widget.RootWidget.InitDelegates();
}
}
public void Tick(World world)
{
Widget.RootWidget.Tick(world);
if (!world.GameHasStarted) return;
if (world.LocalPlayer == null) return;
++Widget.ticksSinceLastMove;
}
public void Draw(World world) { Widget.RootWidget.Draw(world); shpRenderer.Flush(); rgbaRenderer.Flush(); lineRenderer.Flush(); }
}
}

View File

@@ -38,7 +38,6 @@ namespace OpenRA
public static World world;
internal static Viewport viewport;
public static Controller controller;
internal static Chrome chrome;
internal static UserSettings Settings;
internal static OrderManager orderManager;
@@ -47,7 +46,7 @@ namespace OpenRA
public static XRandom CosmeticRandom = new XRandom(); // not synced
internal static Renderer renderer;
public static Renderer Renderer;
static int2 clientSize;
static string mapName;
public static Session LobbyInfo = new Session();
@@ -60,13 +59,13 @@ namespace OpenRA
static internal bool scrollLeft = false;
static internal bool scrollRight = false;
static void LoadModPackages(Manifest manifest)
static void LoadModPackages()
{
FileSystem.UnmountAll();
Timer.Time("reset: {0}");
foreach (var dir in manifest.Folders) FileSystem.Mount(dir);
foreach (var pkg in manifest.Packages) FileSystem.Mount(pkg);
foreach (var dir in Manifest.Folders) FileSystem.Mount(dir);
foreach (var pkg in Manifest.Packages) FileSystem.Mount(pkg);
Timer.Time("mount temporary packages: {0}");
}
@@ -116,20 +115,22 @@ namespace OpenRA
static void ChangeMods()
{
Timer.Time("----ChangeMods");
var manifest = new Manifest(LobbyInfo.GlobalSettings.Mods);
Manifest = new Manifest(LobbyInfo.GlobalSettings.Mods);
Timer.Time("manifest: {0}");
LoadModAssemblies(manifest);
SheetBuilder.Initialize(renderer);
LoadModPackages(manifest);
LoadModAssemblies(Manifest);
SheetBuilder.Initialize(Renderer);
LoadModPackages();
Timer.Time("load assemblies, packages: {0}");
packageChangePending = false;
}
public static Manifest Manifest;
static void LoadMap(string mapName)
{
Timer.Time("----LoadMap");
SheetBuilder.Initialize(renderer);
var manifest = new Manifest(LobbyInfo.GlobalSettings.Mods);
SheetBuilder.Initialize(Renderer);
Manifest = new Manifest(LobbyInfo.GlobalSettings.Mods);
Timer.Time("manifest: {0}");
if (!Game.AvailableMaps.ContainsKey(mapName))
@@ -137,19 +138,16 @@ namespace OpenRA
var map = new Map(Game.AvailableMaps[mapName].Package);
viewport = new Viewport(clientSize, map.TopLeft, map.BottomRight, renderer);
viewport = new Viewport(clientSize, map.TopLeft, map.BottomRight, Renderer);
world = null; // trying to access the old world will NRE, rather than silently doing it wrong.
ChromeProvider.Initialize(manifest.Chrome);
ChromeProvider.Initialize(Manifest.Chrome);
Timer.Time("viewport, ChromeProvider: {0}");
world = new World(manifest, map);
world = new World(Manifest, map);
Timer.Time("world: {0}");
SequenceProvider.Initialize(manifest.Sequences);
SequenceProvider.Initialize(Manifest.Sequences);
Timer.Time("ChromeProv, SeqProv: {0}");
chrome = new Chrome(renderer, manifest);
Timer.Time("chrome: {0}");
Timer.Time("----end LoadMap");
Debug("Map change {0} -> {1}".F(Game.mapName, mapName));
}
@@ -281,7 +279,7 @@ namespace OpenRA
using (new PerfSample("tick_time"))
{
lastTime += Settings.Timestep;
chrome.Tick(world);
Widget.DoTick(world);
orderManager.TickImmediate(world);
@@ -566,15 +564,16 @@ namespace OpenRA
Log.AddChannel("sync", "syncreport.log", true, true);
LobbyInfo.GlobalSettings.Mods = Settings.InitialMods;
Manifest = new Manifest(LobbyInfo.GlobalSettings.Mods);
// Load the default mod to access required files
LoadModPackages(new Manifest(LobbyInfo.GlobalSettings.Mods));
LoadModPackages();
Renderer.SheetSize = Settings.SheetSize;
var resolution = GetResolution(settings, Game.Settings.WindowMode);
renderer = new Renderer(resolution, Game.Settings.WindowMode);
resolution = renderer.Resolution;
Renderer = new Renderer(resolution, Game.Settings.WindowMode);
resolution = Renderer.Resolution;
controller = new Controller();
clientSize = new int2(resolution);
@@ -593,7 +592,7 @@ namespace OpenRA
else
JoinLocal();
LoadShellMap(new Manifest(LobbyInfo.GlobalSettings.Mods).ShellmapUid);
LoadShellMap(Manifest.ShellmapUid);
ResetTimer();
@@ -620,7 +619,7 @@ namespace OpenRA
public static void Disconnect()
{
var shellmap = new Manifest(LobbyInfo.GlobalSettings.Mods).ShellmapUid;
var shellmap = Manifest.ShellmapUid;
LobbyInfo = new Session();
LobbyInfo.GlobalSettings.Mods = Settings.InitialMods;
JoinLocal();
@@ -673,14 +672,14 @@ namespace OpenRA
public static void InitializeEngineWithMods(string[] mods)
{
AppDomain.CurrentDomain.AssemblyResolve += FileSystem.ResolveAssembly;
var manifest = new Manifest(mods);
LoadModAssemblies(manifest);
Manifest = new Manifest(mods);
LoadModAssemblies(Manifest);
FileSystem.UnmountAll();
foreach (var folder in manifest.Folders) FileSystem.Mount(folder);
foreach (var pkg in manifest.Packages) FileSystem.Mount(pkg);
foreach (var folder in Manifest.Folders) FileSystem.Mount(folder);
foreach (var pkg in Manifest.Packages) FileSystem.Mount(pkg);
Rules.LoadRules(manifest, new Map());
Rules.LoadRules(Manifest, new Map());
}
}
}

View File

@@ -81,7 +81,7 @@ namespace OpenRA.Graphics
mod.AdjustPalette(b);
Texture.SetData(b);
Game.renderer.PaletteTexture = Texture;
Game.Renderer.PaletteTexture = Texture;
}
}
}

View File

@@ -13,7 +13,7 @@ using OpenRA.FileFormats.Graphics;
namespace OpenRA.Graphics
{
class LineRenderer
public class LineRenderer
{
Renderer renderer;
IVertexBuffer<Vertex> vertexBuffer;

View File

@@ -18,7 +18,7 @@ using OpenRA.Support;
namespace OpenRA.Graphics
{
internal class Renderer
public class Renderer
{
internal static int SheetSize;
@@ -32,6 +32,7 @@ namespace OpenRA.Graphics
public SpriteRenderer SpriteRenderer { get; private set; }
public SpriteRenderer RgbaSpriteRenderer { get; private set; }
public SpriteRenderer WorldSpriteRenderer { get; private set; }
public LineRenderer LineRenderer { get; private set; }
public ITexture PaletteTexture;
@@ -51,6 +52,7 @@ namespace OpenRA.Graphics
SpriteRenderer = new SpriteRenderer( this, SpriteShader );
RgbaSpriteRenderer = new SpriteRenderer( this, RgbaSpriteShader );
WorldSpriteRenderer = new SpriteRenderer( this, WorldSpriteShader );
LineRenderer = new LineRenderer(this);
RegularFont = new SpriteFont(this, "FreeSans.ttf", 14);
BoldFont = new SpriteFont(this, "FreeSansBold.ttf", 14);
@@ -118,5 +120,12 @@ namespace OpenRA.Graphics
PerfHistory.Increment("batches", 1);
}
public void Flush()
{
WorldSpriteRenderer.Flush();
RgbaSpriteRenderer.Flush();
LineRenderer.Flush();
}
}
}

View File

@@ -17,7 +17,7 @@ using Tao.FreeType;
namespace OpenRA.Graphics
{
class SpriteFont
public class SpriteFont
{
Renderer renderer;
int size;

View File

@@ -12,7 +12,7 @@ using OpenRA.FileFormats.Graphics;
namespace OpenRA.Graphics
{
class SpriteRenderer
public class SpriteRenderer
{
IVertexBuffer<Vertex> vertexBuffer;
IIndexBuffer indexBuffer;

View File

@@ -67,7 +67,7 @@ namespace OpenRA.Graphics
world.WorldRenderer.Draw();
Timer.Time( "worldRenderer: {0}" );
Game.chrome.Draw(world);
Widget.DoDraw(world);
Timer.Time( "widgets: {0}" );
var cursorName = Widget.RootWidget.GetCursorOuter(mousePos) ?? Game.controller.ChooseCursor( world );

View File

@@ -75,7 +75,6 @@
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="Chrome.cs" />
<Compile Include="Effects\RepairIndicator.cs" />
<Compile Include="GameRules\WeaponInfo.cs" />
<Compile Include="Group.cs" />

View File

@@ -34,7 +34,7 @@ namespace OpenRA.Traits
public BibLayer(Actor self, BibLayerInfo info)
{
spriteRenderer = Game.renderer.SpriteRenderer;
spriteRenderer = Game.Renderer.SpriteRenderer;
this.info = info;
bibSprites = info.BibTypes.Select(x => SpriteSheetBuilder.LoadAllSprites(x)).ToArray();

View File

@@ -27,7 +27,7 @@ namespace OpenRA.Traits
public ResourceLayer()
{
sr = Game.renderer.SpriteRenderer;
sr = Game.Renderer.SpriteRenderer;
}
public void Render()

View File

@@ -34,7 +34,7 @@ namespace OpenRA.Traits
public SmudgeLayer(SmudgeLayerInfo info)
{
spriteRenderer = Game.renderer.SpriteRenderer;
spriteRenderer = Game.Renderer.SpriteRenderer;
this.Info = info;
smudgeSprites = Info.Types.Select(x => SpriteSheetBuilder.LoadAllSprites(x)).ToArray();
}

View File

@@ -201,15 +201,15 @@ namespace OpenRA.Widgets
var numActualRows = Math.Max((allBuildables.Length + Columns - 1) / Columns, Rows);
// Palette Background
WidgetUtils.DrawRGBA(ChromeProvider.GetImage(Game.chrome.renderer, paletteCollection, "top"), new float2(origin.X - 9, origin.Y - 9));
WidgetUtils.DrawRGBA(ChromeProvider.GetImage(Game.Renderer, paletteCollection, "top"), new float2(origin.X - 9, origin.Y - 9));
for (var w = 0; w < numActualRows; w++)
WidgetUtils.DrawRGBA(
ChromeProvider.GetImage(Game.chrome.renderer, paletteCollection,
ChromeProvider.GetImage(Game.Renderer, paletteCollection,
"bg-" + (w % 4).ToString()),
new float2(origin.X - 9, origin.Y + 48 * w));
WidgetUtils.DrawRGBA(ChromeProvider.GetImage(Game.chrome.renderer, paletteCollection, "bottom"),
WidgetUtils.DrawRGBA(ChromeProvider.GetImage(Game.Renderer, paletteCollection, "bottom"),
new float2(origin.X - 9, origin.Y - 1 + 48 * numActualRows));
Game.chrome.renderer.RgbaSpriteRenderer.Flush();
Game.Renderer.RgbaSpriteRenderer.Flush();
// Icons
@@ -223,7 +223,7 @@ namespace OpenRA.Widgets
var firstOfThis = queue.AllItems(queueName).FirstOrDefault(a => a.Item == item.Name);
if (rect.Contains(Widget.lastMousePos.ToPoint()))
if (rect.Contains(Widget.LastMousePos.ToPoint()))
tooltipItem = item.Name;
var overlayPos = drawPos + new float2((64 - ready.Image.size.X) / 2, 2);
@@ -275,7 +275,7 @@ namespace OpenRA.Widgets
foreach (var ob in overlayBits)
WidgetUtils.DrawSHP(ob.First, ob.Second);
Game.chrome.renderer.WorldSpriteRenderer.Flush();
Game.Renderer.WorldSpriteRenderer.Flush();
// Tooltip
if (tooltipItem != null && !paletteAnimating && paletteOpen)
@@ -283,16 +283,16 @@ namespace OpenRA.Widgets
new float2(Game.viewport.Width, origin.Y + numActualRows * 48 + 9).ToInt2());
// Palette Dock
WidgetUtils.DrawRGBA(ChromeProvider.GetImage(Game.chrome.renderer, paletteCollection, "dock-top"),
WidgetUtils.DrawRGBA(ChromeProvider.GetImage(Game.Renderer, paletteCollection, "dock-top"),
new float2(Game.viewport.Width - 14, origin.Y - 23));
for (int i = 0; i < numActualRows; i++)
WidgetUtils.DrawRGBA(ChromeProvider.GetImage(Game.chrome.renderer, paletteCollection, "dock-" + (i % 4).ToString()),
WidgetUtils.DrawRGBA(ChromeProvider.GetImage(Game.Renderer, paletteCollection, "dock-" + (i % 4).ToString()),
new float2(Game.viewport.Width - 14, origin.Y + 48 * i));
WidgetUtils.DrawRGBA(ChromeProvider.GetImage(Game.chrome.renderer, paletteCollection, "dock-bottom"),
WidgetUtils.DrawRGBA(ChromeProvider.GetImage(Game.Renderer, paletteCollection, "dock-bottom"),
new float2(Game.viewport.Width - 14, origin.Y - 1 + 48 * numActualRows));
Game.chrome.renderer.RgbaSpriteRenderer.Flush();
Game.Renderer.RgbaSpriteRenderer.Flush();
return 48 * y + 9;
}
@@ -416,33 +416,33 @@ namespace OpenRA.Widgets
var producing = queue.CurrentItem(groupName);
var index = q.Key == currentTab ? 2 : (producing != null && producing.Done) ? 1 : 0;
var race = world.LocalPlayer.Country.Race;
WidgetUtils.DrawRGBA(ChromeProvider.GetImage(Game.chrome.renderer,"tabs-"+tabKeys[index], race+"-"+q.Key), new float2(x, y));
WidgetUtils.DrawRGBA(ChromeProvider.GetImage(Game.Renderer,"tabs-"+tabKeys[index], race+"-"+q.Key), new float2(x, y));
var rect = new Rectangle((int)x,(int)y,(int)tabWidth,(int)tabHeight);
tabs.Add(Pair.New(rect, HandleTabClick(groupName, world)));
if (rect.Contains(Widget.lastMousePos.ToPoint()))
if (rect.Contains(Widget.LastMousePos.ToPoint()))
{
var text = CategoryNameRemaps.ContainsKey(groupName) ? CategoryNameRemaps[groupName] : groupName;
var sz = Game.chrome.renderer.BoldFont.Measure(text);
var sz = Game.Renderer.BoldFont.Measure(text);
WidgetUtils.DrawPanelPartial("dialog4",
Rectangle.FromLTRB((int)rect.Left - sz.X - 30, (int)rect.Top, (int)rect.Left - 5, (int)rect.Bottom),
PanelSides.All);
Game.chrome.renderer.BoldFont.DrawText(text,
Game.Renderer.BoldFont.DrawText(text,
new float2(rect.Left - sz.X - 20, rect.Top + 12), Color.White);
}
y += tabHeight;
}
Game.chrome.renderer.RgbaSpriteRenderer.Flush();
Game.Renderer.RgbaSpriteRenderer.Flush();
}
void DrawRightAligned(string text, int2 pos, Color c)
{
Game.chrome.renderer.BoldFont.DrawText(text,
pos - new int2(Game.chrome.renderer.BoldFont.Measure(text).X, 0), c);
Game.Renderer.BoldFont.DrawText(text,
pos - new int2(Game.Renderer.BoldFont.Measure(text).X, 0), c);
}
void DrawProductionTooltip(World world, string unit, int2 pos)
@@ -458,12 +458,12 @@ namespace OpenRA.Widgets
var buildings = Rules.TechTree.GatherBuildings( pl );
var canBuildThis = Rules.TechTree.CanBuild(info, pl, buildings);
var longDescSize = Game.chrome.renderer.RegularFont.Measure(buildable.LongDesc.Replace("\\n", "\n")).Y;
var longDescSize = Game.Renderer.RegularFont.Measure(buildable.LongDesc.Replace("\\n", "\n")).Y;
if (!canBuildThis) longDescSize += 8;
WidgetUtils.DrawPanel("dialog4", new Rectangle(Game.viewport.Width - 300, pos.Y, 300, longDescSize + 65));
Game.chrome.renderer.BoldFont.DrawText(
Game.Renderer.BoldFont.DrawText(
buildable.Description + ((buildable.Hotkey != null)? " ({0})".F(buildable.Hotkey.ToUpper()) : ""),
p.ToInt2() + new int2(5, 5), Color.White);
@@ -487,7 +487,7 @@ namespace OpenRA.Widgets
{
var prereqs = buildable.Prerequisites
.Select( a => Description( a ) );
Game.chrome.renderer.RegularFont.DrawText(
Game.Renderer.RegularFont.DrawText(
"Requires {0}".F(string.Join(", ", prereqs.ToArray())),
p.ToInt2(),
Color.White);
@@ -496,10 +496,10 @@ namespace OpenRA.Widgets
}
p += new int2(0, 15);
Game.chrome.renderer.RegularFont.DrawText(buildable.LongDesc.Replace("\\n", "\n"),
Game.Renderer.RegularFont.DrawText(buildable.LongDesc.Replace("\\n", "\n"),
p.ToInt2(), Color.White);
Game.chrome.renderer.RgbaSpriteRenderer.Flush();
Game.Renderer.RgbaSpriteRenderer.Flush();
}
bool DoBuildingHotkey(char c, World world)

View File

@@ -64,7 +64,7 @@ namespace OpenRA.Widgets
public override void DrawInner(World world)
{
var font = (Bold) ? Game.chrome.renderer.BoldFont : Game.chrome.renderer.RegularFont;
var font = (Bold) ? Game.Renderer.BoldFont : Game.Renderer.RegularFont;
var stateOffset = (Depressed) ? new int2(VisualHeight, VisualHeight) : new int2(0, 0);
WidgetUtils.DrawPanel(Depressed ? "dialog3" : "dialog2", RenderBounds);

View File

@@ -38,7 +38,7 @@ namespace OpenRA.Widgets
if (DrawBackground)
WidgetUtils.DrawPanel("dialog3", chatLogArea);
var renderer = Game.chrome.renderer;
var renderer = Game.Renderer;
var font = renderer.RegularFont;
renderer.RgbaSpriteRenderer.Flush();

View File

@@ -29,12 +29,12 @@ namespace OpenRA.Widgets
if (composing)
{
var text = teamChat ? "Chat (Team): " : "Chat (All): ";
var w = Game.chrome.renderer.BoldFont.Measure(text).X;
var w = Game.Renderer.BoldFont.Measure(text).X;
Game.chrome.renderer.BoldFont.DrawText(text, RenderOrigin + new float2(3, 7), Color.White);
Game.chrome.renderer.RegularFont.DrawText(content, RenderOrigin + new float2(3 + w, 7), Color.White);
Game.Renderer.BoldFont.DrawText(text, RenderOrigin + new float2(3, 7), Color.White);
Game.Renderer.RegularFont.DrawText(content, RenderOrigin + new float2(3 + w, 7), Color.White);
Game.chrome.renderer.RgbaSpriteRenderer.Flush();
Game.Renderer.RgbaSpriteRenderer.Flush();
}
}

View File

@@ -22,7 +22,7 @@ namespace OpenRA.Widgets
public override void DrawInner(World world)
{
var font = (Bold) ? Game.chrome.renderer.BoldFont : Game.chrome.renderer.RegularFont;
var font = (Bold) ? Game.Renderer.BoldFont : Game.Renderer.RegularFont;
var pos = RenderOrigin;
var rect = RenderBounds;
var check = new Rectangle(rect.Location,
@@ -35,9 +35,9 @@ namespace OpenRA.Widgets
if (Checked())
{
Game.chrome.renderer.RgbaSpriteRenderer.Flush();
Game.Renderer.RgbaSpriteRenderer.Flush();
WidgetUtils.FillRectWithColor(check.InflateBy(-4,-5,-4,-5),Color.White);
Game.chrome.lineRenderer.Flush();
Game.Renderer.LineRenderer.Flush();
}
}

View File

@@ -37,7 +37,7 @@ namespace OpenRA.Widgets
public override void DrawInner(World world)
{
WidgetUtils.FillRectWithColor(RenderBounds, GetColor());
Game.chrome.lineRenderer.Flush();
Game.Renderer.LineRenderer.Flush();
}
}
}

View File

@@ -43,7 +43,7 @@ namespace OpenRA.Widgets
var name = GetImageName();
var collection = GetImageCollection();
WidgetUtils.DrawRGBA(
ChromeProvider.GetImage(Game.chrome.renderer, collection, name),
ChromeProvider.GetImage(Game.Renderer, collection, name),
RenderOrigin);
}
}

View File

@@ -48,7 +48,7 @@ namespace OpenRA.Widgets
if (bg != null)
WidgetUtils.DrawPanel(bg, RenderBounds );
var font = (Bold) ? Game.chrome.renderer.BoldFont : Game.chrome.renderer.RegularFont;
var font = (Bold) ? Game.Renderer.BoldFont : Game.Renderer.RegularFont;
var text = GetText();
if (text == null)
return;

View File

@@ -63,13 +63,13 @@ namespace OpenRA.Widgets
WidgetUtils.DrawPanel(downButtonBg, downButtonRect);
WidgetUtils.DrawPanel(scrollbarBg, scrollbarRect);
Game.chrome.renderer.Device.EnableScissor(backgroundRect.X, backgroundRect.Y + HeaderHeight, backgroundRect.Width, backgroundRect.Height - HeaderHeight);
Game.Renderer.Device.EnableScissor(backgroundRect.X, backgroundRect.Y + HeaderHeight, backgroundRect.Width, backgroundRect.Height - HeaderHeight);
foreach (var child in Children)
child.Draw(world);
Game.chrome.renderer.RgbaSpriteRenderer.Flush();
Game.chrome.renderer.Device.DisableScissor();
Game.Renderer.RgbaSpriteRenderer.Flush();
Game.Renderer.Device.DisableScissor();
}
public override int2 ChildOrigin { get { return RenderOrigin + new int2(0, (int)ListOffset); } }

View File

@@ -73,9 +73,9 @@ namespace OpenRA.Widgets
public override void DrawInner( World world )
{
if (UnownedSpawn == null)
UnownedSpawn = ChromeProvider.GetImage(Game.chrome.renderer, "spawnpoints", "unowned");
UnownedSpawn = ChromeProvider.GetImage(Game.Renderer, "spawnpoints", "unowned");
if (OwnedSpawn == null)
OwnedSpawn = ChromeProvider.GetImage(Game.chrome.renderer, "spawnpoints", "owned");
OwnedSpawn = ChromeProvider.GetImage(Game.Renderer, "spawnpoints", "owned");
var map = Map();
if( map == null ) return;
@@ -87,7 +87,7 @@ namespace OpenRA.Widgets
// Update image data
var preview = PreviewCache[map];
if( mapChooserSheet == null || mapChooserSheet.Size.Width != preview.Width || mapChooserSheet.Size.Height != preview.Height )
mapChooserSheet = new Sheet( Game.renderer, new Size( preview.Width, preview.Height ) );
mapChooserSheet = new Sheet( Game.Renderer, new Size( preview.Width, preview.Height ) );
mapChooserSheet.Texture.SetData( preview );
mapChooserSprite = new Sprite( mapChooserSheet, new Rectangle( 0, 0, map.Width, map.Height ), TextureChannel.Alpha );
@@ -100,7 +100,7 @@ namespace OpenRA.Widgets
MapRect = new Rectangle(RenderBounds.X + dw, RenderBounds.Y + dh, (int)(map.Width * PreviewScale), (int)(map.Height * PreviewScale));
}
Game.chrome.renderer.RgbaSpriteRenderer.DrawSprite( mapChooserSprite,
Game.Renderer.RgbaSpriteRenderer.DrawSprite( mapChooserSprite,
new float2(MapRect.Location),
"chrome",
new float2( MapRect.Size ) );
@@ -119,11 +119,10 @@ namespace OpenRA.Widgets
offset = new int2(-OwnedSpawn.bounds.Width/2, -OwnedSpawn.bounds.Height/2);
WidgetUtils.FillRectWithColor(new Rectangle(pos.X + offset.X + 2, pos.Y + offset.Y + 2, 12, 12), colors[p]);
}
Game.chrome.renderer.RgbaSpriteRenderer.DrawSprite(sprite, pos + offset, "chrome");
Game.Renderer.RgbaSpriteRenderer.DrawSprite(sprite, pos + offset, "chrome");
}
Game.chrome.lineRenderer.Flush();
Game.chrome.renderer.RgbaSpriteRenderer.Flush();
Game.Renderer.Flush();
}
}
}

View File

@@ -39,8 +39,8 @@ namespace OpenRA.Widgets
var digitCollection = "digits-" + world.LocalPlayer.Country.Race;
var chromeCollection = "chrome-" + world.LocalPlayer.Country.Race;
Game.chrome.renderer.RgbaSpriteRenderer.DrawSprite(
ChromeProvider.GetImage(Game.chrome.renderer, chromeCollection, "moneybin"),
Game.Renderer.RgbaSpriteRenderer.DrawSprite(
ChromeProvider.GetImage(Game.Renderer, chromeCollection, "moneybin"),
new float2(Bounds.Left, 0), "chrome");
// Cash
@@ -50,8 +50,8 @@ namespace OpenRA.Widgets
foreach (var d in cashDigits.Reverse())
{
Game.chrome.renderer.RgbaSpriteRenderer.DrawSprite(
ChromeProvider.GetImage(Game.chrome.renderer, digitCollection, (d - '0').ToString()),
Game.Renderer.RgbaSpriteRenderer.DrawSprite(
ChromeProvider.GetImage(Game.Renderer, digitCollection, (d - '0').ToString()),
new float2(x, 6), "chrome");
x -= 14;
}
@@ -64,8 +64,8 @@ namespace OpenRA.Widgets
foreach (var d in oreDigits.Reverse())
{
Game.chrome.renderer.RgbaSpriteRenderer.DrawSprite(
ChromeProvider.GetImage(Game.chrome.renderer, digitCollection, (d - '0').ToString()),
Game.Renderer.RgbaSpriteRenderer.DrawSprite(
ChromeProvider.GetImage(Game.Renderer, digitCollection, (d - '0').ToString()),
new float2(x, 6), "chrome");
x -= 14;
}

View File

@@ -21,17 +21,17 @@ namespace OpenRA.Widgets
public override void DrawInner (World world)
{
var image = ChromeProvider.GetImage(Game.chrome.renderer, Image + "-button", GetImage());
var image = ChromeProvider.GetImage(Game.Renderer, Image + "-button", GetImage());
var rect = new Rectangle(RenderBounds.X, RenderBounds.Y, (int)image.size.X, (int)image.size.Y);
if (rect.Contains(Widget.lastMousePos.ToPoint()))
if (rect.Contains(Widget.LastMousePos.ToPoint()))
{
rect = rect.InflateBy(3, 3, 3, 3);
var pos = new int2(rect.Left, rect.Top);
var m = pos + new int2(rect.Width, rect.Height);
var br = pos + new int2(rect.Width, rect.Height + 20);
var u = Game.chrome.renderer.RegularFont.Measure(GetLongDesc().Replace("\\n", "\n"));
var u = Game.Renderer.RegularFont.Measure(GetLongDesc().Replace("\\n", "\n"));
br.X -= u.X;
br.Y += u.Y;
@@ -53,13 +53,13 @@ namespace OpenRA.Widgets
pos.X = br.X + 8;
pos.Y = m.Y + 8;
Game.chrome.renderer.BoldFont.DrawText(GetDescription(), pos, Color.White);
Game.Renderer.BoldFont.DrawText(GetDescription(), pos, Color.White);
pos += new int2(0, 20);
Game.chrome.renderer.RegularFont.DrawText(GetLongDesc().Replace("\\n", "\n"), pos, Color.White);
Game.Renderer.RegularFont.DrawText(GetLongDesc().Replace("\\n", "\n"), pos, Color.White);
}
Game.chrome.renderer.RgbaSpriteRenderer.DrawSprite(image, new int2(RenderBounds.X, RenderBounds.Y), "chrome");
Game.Renderer.RgbaSpriteRenderer.DrawSprite(image, new int2(RenderBounds.X, RenderBounds.Y), "chrome");
}
}
}

View File

@@ -24,15 +24,15 @@ namespace OpenRA.Widgets
float2 origin = Game.viewport.Location + new float2(rect.Right, rect.Bottom);
float2 basis = new float2(-rect.Width / 100, -rect.Height / 100);
Game.chrome.lineRenderer.DrawLine(origin, origin + new float2(100, 0) * basis, Color.White, Color.White);
Game.chrome.lineRenderer.DrawLine(origin + new float2(100, 0) * basis, origin + new float2(100, 100) * basis, Color.White, Color.White);
Game.Renderer.LineRenderer.DrawLine(origin, origin + new float2(100, 0) * basis, Color.White, Color.White);
Game.Renderer.LineRenderer.DrawLine(origin + new float2(100, 0) * basis, origin + new float2(100, 100) * basis, Color.White, Color.White);
foreach (var item in PerfHistory.items.Values)
{
int n = 0;
item.Samples().Aggregate((a, b) =>
{
Game.chrome.lineRenderer.DrawLine(
Game.Renderer.LineRenderer.DrawLine(
origin + new float2(n, (float)a) * basis,
origin + new float2(n + 1, (float)b) * basis,
item.c, item.c);
@@ -41,7 +41,7 @@ namespace OpenRA.Widgets
});
}
Game.chrome.lineRenderer.Flush();
Game.Renderer.LineRenderer.Flush();
}
}
}

View File

@@ -35,8 +35,8 @@ namespace OpenRA.Widgets
&& resources.PowerDrained == 0)
return;
var renderer = Game.chrome.renderer;
var lineRenderer = Game.chrome.lineRenderer;
var renderer = Game.Renderer;
var lineRenderer = Game.Renderer.LineRenderer;
var rgbaRenderer = renderer.RgbaSpriteRenderer;
// Draw bar horizontally

View File

@@ -105,7 +105,7 @@ namespace OpenRA.Widgets
hasRadar = hasNewRadar;
var renderer = Game.chrome.renderer;
var renderer = Game.Renderer;
var rgbaRenderer = renderer.RgbaSpriteRenderer;
rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer, radarCollection, "left"), radarOrigin, "chrome");

View File

@@ -61,7 +61,7 @@ namespace OpenRA.Widgets
cachedFrame = frame;
}
Game.chrome.renderer.WorldSpriteRenderer.DrawSprite(sprite,RenderOrigin, palette);
Game.Renderer.WorldSpriteRenderer.DrawSprite(sprite,RenderOrigin, palette);
}
}
}

View File

@@ -77,7 +77,7 @@ namespace OpenRA.Widgets
WidgetUtils.DrawRGBA(WidgetUtils.GetChromeImage(world,"specialbin-middle"), new float2(rectBounds.X, rectBounds.Y + i * 51));
WidgetUtils.DrawRGBA(WidgetUtils.GetChromeImage(world,"specialbin-bottom"), new float2(rectBounds.X, rectBounds.Y + numPowers * 51));
Game.chrome.renderer.RgbaSpriteRenderer.Flush();
Game.Renderer.RgbaSpriteRenderer.Flush();
// Hack Hack Hack
rectBounds.Width = 69;
@@ -92,7 +92,7 @@ namespace OpenRA.Widgets
var drawPos = new float2(rectBounds.X + 5, y);
var rect = new Rectangle(rectBounds.X + 5, y, 64, 48);
if (rect.Contains(Widget.lastMousePos.ToPoint()))
if (rect.Contains(Widget.LastMousePos.ToPoint()))
{
var pos = drawPos.ToInt2();
var tl = new int2(pos.X-3,pos.Y-3);
@@ -100,7 +100,7 @@ namespace OpenRA.Widgets
var br = tl + new int2(64+3+20,60);
if (sp.Info.LongDesc != null)
br += Game.chrome.renderer.RegularFont.Measure(sp.Info.LongDesc.Replace("\\n", "\n"));
br += Game.Renderer.RegularFont.Measure(sp.Info.LongDesc.Replace("\\n", "\n"));
else
br += new int2(300,0);
@@ -114,16 +114,16 @@ namespace OpenRA.Widgets
PanelSides.Left | PanelSides.Right | PanelSides.Bottom);
pos += new int2(77, 5);
Game.chrome.renderer.BoldFont.DrawText(sp.Info.Description, pos, Color.White);
Game.Renderer.BoldFont.DrawText(sp.Info.Description, pos, Color.White);
pos += new int2(0,20);
Game.chrome.renderer.BoldFont.DrawText(WorldUtils.FormatTime(sp.RemainingTime).ToString(), pos, Color.White);
Game.chrome.renderer.BoldFont.DrawText("/ {0}".F(WorldUtils.FormatTime(sp.TotalTime)), pos + new int2(45,0), Color.White);
Game.Renderer.BoldFont.DrawText(WorldUtils.FormatTime(sp.RemainingTime).ToString(), pos, Color.White);
Game.Renderer.BoldFont.DrawText("/ {0}".F(WorldUtils.FormatTime(sp.TotalTime)), pos + new int2(45,0), Color.White);
if (sp.Info.LongDesc != null)
{
pos += new int2(0, 20);
Game.chrome.renderer.RegularFont.DrawText(sp.Info.LongDesc.Replace("\\n", "\n"), pos, Color.White);
Game.Renderer.RegularFont.DrawText(sp.Info.LongDesc.Replace("\\n", "\n"), pos, Color.White);
}
}
@@ -147,7 +147,7 @@ namespace OpenRA.Widgets
y += 51;
}
}
Game.chrome.renderer.WorldSpriteRenderer.Flush();
Game.Renderer.WorldSpriteRenderer.Flush();
}
Action<MouseInput> HandleSupportPower(SupportPower sp)

View File

@@ -108,7 +108,7 @@ namespace OpenRA.Widgets
public override void DrawInner(World world)
{
int margin = 5;
var font = (Bold) ? Game.chrome.renderer.BoldFont : Game.chrome.renderer.RegularFont;
var font = (Bold) ? Game.Renderer.BoldFont : Game.Renderer.RegularFont;
var cursor = (showCursor && Focused) ? "|" : "";
var textSize = font.Measure(Text + "|");
var pos = RenderOrigin;
@@ -125,15 +125,15 @@ namespace OpenRA.Widgets
if (Focused)
textPos += new int2(Bounds.Width - 2 * margin - textSize.X, 0);
Game.chrome.renderer.Device.EnableScissor(pos.X + margin, pos.Y, Bounds.Width - 2 * margin, Bounds.Bottom);
Game.Renderer.Device.EnableScissor(pos.X + margin, pos.Y, Bounds.Width - 2 * margin, Bounds.Bottom);
}
font.DrawText(Text + cursor, textPos, Color.White);
if (textSize.X > Bounds.Width - 2 * margin)
{
Game.chrome.renderer.RgbaSpriteRenderer.Flush();
Game.chrome.renderer.Device.DisableScissor();
Game.Renderer.RgbaSpriteRenderer.Flush();
Game.Renderer.Device.DisableScissor();
}
}

View File

@@ -25,7 +25,7 @@ namespace OpenRA.Widgets
public override void DrawInner(World world)
{
var s = WorldUtils.FormatTime(Game.LocalTick);
var f = Game.chrome.renderer.TitleFont;
var f = Game.Renderer.TitleFont;
var size = f.Measure(s);
f.DrawText(s, new float2(RenderBounds.Left - size.X / 2, RenderBounds.Top - 20), Color.White);
}

View File

@@ -48,7 +48,21 @@ namespace OpenRA.Widgets
public Widget() { IsVisible = () => Visible; }
public static Widget RootWidget = null;
public static Widget RootWidget {
get
{
if (rootWidget == null)
{
var widgetYaml = Game.Manifest.ChromeLayout.Select(a => MiniYaml.FromFile(a)).Aggregate(MiniYaml.Merge);
rootWidget = WidgetLoader.LoadWidget( widgetYaml.FirstOrDefault() );
rootWidget.Initialize();
rootWidget.InitDelegates();
}
return rootWidget;
}
}
private static Widget rootWidget = null;
public Widget(Widget widget)
{
@@ -189,20 +203,20 @@ namespace OpenRA.Widgets
public virtual bool HandleInputInner(MouseInput mi) { return !ClickThrough; }
public static int ticksSinceLastMove = 0;
public static int2 lastMousePos;
public static int TicksSinceLastMove = 0;
public static int2 LastMousePos;
public bool HandleInput(World world, MouseInput mi)
{
if (SelectedWidget != null && SelectedWidget.HandleMouseInputOuter(mi))
return true;
if (Widget.RootWidget.HandleMouseInputOuter(mi))
if (RootWidget.HandleMouseInputOuter(mi))
return true;
if (mi.Event == MouseInputEvent.Move)
{
lastMousePos = mi.Location;
ticksSinceLastMove = 0;
LastMousePos = mi.Location;
TicksSinceLastMove = 0;
}
return false;
}
@@ -308,20 +322,34 @@ namespace OpenRA.Widgets
public void CloseWindow()
{
Widget.RootWidget.GetWidget(WindowList.Pop()).Visible = false;
RootWidget.GetWidget(WindowList.Pop()).Visible = false;
if (WindowList.Count > 0)
Widget.RootWidget.GetWidget(WindowList.Peek()).Visible = true;
RootWidget.GetWidget(WindowList.Peek()).Visible = true;
}
public Widget OpenWindow(string id)
{
if (WindowList.Count > 0)
Widget.RootWidget.GetWidget(WindowList.Peek()).Visible = false;
RootWidget.GetWidget(WindowList.Peek()).Visible = false;
WindowList.Push(id);
var window = Widget.RootWidget.GetWidget(id);
var window = RootWidget.GetWidget(id);
window.Visible = true;
return window;
}
public static void DoTick(World world)
{
RootWidget.Tick(world);
if (!world.GameHasStarted) return;
if (world.LocalPlayer == null) return;
++TicksSinceLastMove;
}
public static void DoDraw(World world)
{
RootWidget.Draw(world);
}
}
class ContainerWidget : Widget {

View File

@@ -19,17 +19,17 @@ namespace OpenRA.Widgets
{
public static Sprite GetChromeImage(World world, string name)
{
return ChromeProvider.GetImage(Game.chrome.renderer, "chrome-" + world.LocalPlayer.Country.Race, name);
return ChromeProvider.GetImage(Game.Renderer, "chrome-" + world.LocalPlayer.Country.Race, name);
}
public static void DrawRGBA(Sprite s, float2 pos)
{
Game.chrome.renderer.RgbaSpriteRenderer.DrawSprite(s,pos,"chrome");
Game.Renderer.RgbaSpriteRenderer.DrawSprite(s,pos,"chrome");
}
public static void DrawSHP(Sprite s, float2 pos)
{
Game.chrome.renderer.WorldSpriteRenderer.DrawSprite(s,pos,"chrome");
Game.Renderer.WorldSpriteRenderer.DrawSprite(s,pos,"chrome");
}
public static void DrawPanel(string collection, Rectangle Bounds)
@@ -55,7 +55,7 @@ namespace OpenRA.Widgets
public static void FillRectWithColor(Rectangle r, Color c)
{
Game.chrome.lineRenderer.FillRect(new RectangleF(
Game.Renderer.LineRenderer.FillRect(new RectangleF(
Game.viewport.Location.X + r.X,
Game.viewport.Location.Y + r.Y,
r.Width, r.Height), c);
@@ -64,7 +64,7 @@ namespace OpenRA.Widgets
public static int[] GetBorderSizes(string collection)
{
var images = new[] { "border-t", "border-b", "border-l", "border-r" };
var ss = images.Select(i => ChromeProvider.GetImage(Game.chrome.renderer, "dialog4", i)).ToArray();
var ss = images.Select(i => ChromeProvider.GetImage(Game.Renderer, "dialog4", i)).ToArray();
return new[] { (int)ss[0].size.Y, (int)ss[1].size.Y, (int)ss[2].size.X, (int)ss[3].size.X };
}
@@ -78,7 +78,7 @@ namespace OpenRA.Widgets
public static void DrawPanelPartial(string collection, Rectangle Bounds, PanelSides ps)
{
var images = new[] { "border-t", "border-b", "border-l", "border-r", "corner-tl", "corner-tr", "corner-bl", "corner-br", "background" };
var ss = images.Select(i => ChromeProvider.GetImage(Game.chrome.renderer, collection, i)).ToArray();
var ss = images.Select(i => ChromeProvider.GetImage(Game.Renderer, collection, i)).ToArray();
// Background
FillRectWithSprite(new Rectangle(Bounds.Left + (int)ss[2].size.X,
@@ -128,7 +128,7 @@ namespace OpenRA.Widgets
if (ps.HasFlags(PanelSides.Right | PanelSides.Bottom))
DrawRGBA(ss[7], new float2(Bounds.Right - ss[7].size.X, Bounds.Bottom - ss[7].size.Y));
Game.chrome.renderer.RgbaSpriteRenderer.Flush();
Game.Renderer.RgbaSpriteRenderer.Flush();
}
}

View File

@@ -24,10 +24,10 @@ namespace OpenRA.Widgets
public override void DrawInner(World world)
{
if (Widget.ticksSinceLastMove < worldTooltipDelay || world == null || world.LocalPlayer == null)
if (Widget.TicksSinceLastMove < worldTooltipDelay || world == null || world.LocalPlayer == null)
return;
var actor = world.FindUnitsAtMouse(Widget.lastMousePos).FirstOrDefault();
var actor = world.FindUnitsAtMouse(Widget.LastMousePos).FirstOrDefault();
if (actor == null) return;
var text = actor.Info.Traits.Contains<ValuedInfo>()
@@ -37,7 +37,7 @@ namespace OpenRA.Widgets
? "" : "{0}".F(actor.Owner.PlayerName);
var text3 = (actor.Owner == world.LocalPlayer || actor.Owner.NonCombatant)
? "" : " ({0})".F(world.LocalPlayer.Stances[actor.Owner]);
var renderer = Game.chrome.renderer;
var renderer = Game.Renderer;
var sz = renderer.BoldFont.Measure(text);
var sz2 = renderer.RegularFont.Measure(text2);
@@ -51,23 +51,23 @@ namespace OpenRA.Widgets
sz.Y += 24;
WidgetUtils.DrawPanel("dialog4", Rectangle.FromLTRB(
Widget.lastMousePos.X + 20, Widget.lastMousePos.Y + 20,
Widget.lastMousePos.X + sz.X + 20, Widget.lastMousePos.Y + sz.Y + 20));
Widget.LastMousePos.X + 20, Widget.LastMousePos.Y + 20,
Widget.LastMousePos.X + sz.X + 20, Widget.LastMousePos.Y + sz.Y + 20));
renderer.BoldFont.DrawText(text,
new float2(Widget.lastMousePos.X + 30, Widget.lastMousePos.Y + 30), Color.White);
new float2(Widget.LastMousePos.X + 30, Widget.LastMousePos.Y + 30), Color.White);
if (text2 != "")
{
renderer.RegularFont.DrawText(text2,
new float2(Widget.lastMousePos.X + 65, Widget.lastMousePos.Y + 50), actor.Owner.Color);
new float2(Widget.LastMousePos.X + 65, Widget.LastMousePos.Y + 50), actor.Owner.Color);
renderer.RegularFont.DrawText(text3,
new float2(Widget.lastMousePos.X + 65 + sz2.X, Widget.lastMousePos.Y + 50), Color.White);
new float2(Widget.LastMousePos.X + 65 + sz2.X, Widget.LastMousePos.Y + 50), Color.White);
WidgetUtils.DrawRGBA(
ChromeProvider.GetImage(Game.chrome.renderer, "flags", actor.Owner.Country.Race),
new float2(Widget.lastMousePos.X + 30, Widget.lastMousePos.Y + 50));
ChromeProvider.GetImage(Game.Renderer, "flags", actor.Owner.Country.Race),
new float2(Widget.LastMousePos.X + 30, Widget.LastMousePos.Y + 50));
}
renderer.RgbaSpriteRenderer.Flush();

View File

@@ -71,7 +71,7 @@ namespace OpenRA
TileSet.LoadTiles();
Timer.Time( "Tileset: {0}" );
WorldRenderer = new WorldRenderer(this, Game.renderer);
WorldRenderer = new WorldRenderer(this, Game.Renderer);
Timer.Time("renderer: {0}");
WorldActor = CreateActor("World", new int2(int.MaxValue, int.MaxValue), null);
@@ -105,7 +105,7 @@ namespace OpenRA
PathFinder = new PathFinder(this);
Timer.Time( "hooks, pathing: {0}" );
Minimap = new Minimap(this, Game.renderer);
Minimap = new Minimap(this, Game.Renderer);
Timer.Time( "minimap: {0}" );
Timer.Time( "----end World.ctor" );