From bcafc89002bfb8e7b0201b959dbbc9803a8c0e5b Mon Sep 17 00:00:00 2001 From: beedee Date: Fri, 13 Jul 2007 14:08:20 +0000 Subject: [PATCH] git-svn-id: svn://svn.ijw.co.nz/svn/OpenRa@1200 993157c7-ee19-0410-b2c4-bb4e9862e678 --- OpenRa.Game/MainWindow.cs | 5 +++++ OpenRa.Game/Sidebar.cs | 38 +++++++++++++++++++++++++++++++++++++ OpenRa.TechTree/Item.cs | 5 +++++ OpenRa.TechTree/TechTree.cs | 35 +++++++++++++++++++++++++++++++--- 4 files changed, 80 insertions(+), 3 deletions(-) diff --git a/OpenRa.Game/MainWindow.cs b/OpenRa.Game/MainWindow.cs index 32e0019307..f9445615e8 100644 --- a/OpenRa.Game/MainWindow.cs +++ b/OpenRa.Game/MainWindow.cs @@ -20,6 +20,7 @@ namespace OpenRa.Game World world; TreeCache treeCache; TerrainRenderer terrain; + Sidebar sidebar; static Size GetResolution(Settings settings) { @@ -59,6 +60,8 @@ namespace OpenRa.Game world.Add(new Mcv(new PointF(24 * 5, 24 * 5), 3)); world.Add(new Mcv(new PointF(24 * 7, 24 * 5), 2)); world.Add(new Mcv(new PointF(24 * 9, 24 * 5), 1)); + + sidebar = new Sidebar(OpenRa.TechTree.Race.None, renderer); } internal void Run() @@ -107,6 +110,8 @@ namespace OpenRa.Game new Range(scrollPos.X, scrollPos.X + ClientSize.Width), new Range(scrollPos.Y, scrollPos.Y + ClientSize.Height)); + sidebar.Paint(scrollPos); + renderer.EndFrame(); } } diff --git a/OpenRa.Game/Sidebar.cs b/OpenRa.Game/Sidebar.cs index c58c364b3a..d2056ca933 100644 --- a/OpenRa.Game/Sidebar.cs +++ b/OpenRa.Game/Sidebar.cs @@ -2,10 +2,48 @@ using System; using System.Collections.Generic; using System.Text; using OpenRa.TechTree; +using BluntDirectX.Direct3D; +using OpenRa.FileFormats; +using System.Drawing; namespace OpenRa.Game { class Sidebar { + TechTree.TechTree techTree = new TechTree.TechTree(); + Renderer renderer; + + FvfVertexBuffer vertexBuffer; + IndexBuffer indexBuffer; + const int spritesPerBatch = 1024; + SheetRectangle sprite; + + + public Sidebar(Race race, Renderer renderer) + { + Package package = new Package("../../../hires.mix"); + sprite = BeedeeSheetBuilder.LoadSprite(package, "e7icon.shp"); + techTree.CurrentRace = race; + this.renderer = renderer; + vertexBuffer = new FvfVertexBuffer(renderer.Device, 4 * spritesPerBatch, Vertex.Format); + indexBuffer = new IndexBuffer(renderer.Device, 6 * spritesPerBatch); + } + + public void Paint(PointF scrollOffset) + { + List vertices = new List(); + List indicies = new List(); + + PointF location = new PointF(0 + scrollOffset.X, 0 + scrollOffset.Y); + + Util.CreateQuad(vertices, indicies, location, sprite, 0); + + renderer.DrawWithShader(ShaderQuality.Low, delegate + { + vertexBuffer.SetData(vertices.ToArray()); + indexBuffer.SetData(indicies.ToArray()); + renderer.DrawBatch(vertexBuffer, indexBuffer, new Range(0, vertices.Count), new Range(0, indicies.Count), sprite.sheet.Texture); + }); + } } } diff --git a/OpenRa.TechTree/Item.cs b/OpenRa.TechTree/Item.cs index 9a15354410..e7f1241772 100644 --- a/OpenRa.TechTree/Item.cs +++ b/OpenRa.TechTree/Item.cs @@ -9,10 +9,15 @@ namespace OpenRa.TechTree { public class Item { + readonly bool isStructure; + + public bool IsStructure { get { return isStructure; } } + public Item(string tag, string friendlyName, IniSection section, bool isStructure) { this.tag = tag; this.friendlyName = friendlyName; + this.isStructure = isStructure; owner = ParseOwner(section); techLevel = ParseTechLevel(section); diff --git a/OpenRa.TechTree/TechTree.cs b/OpenRa.TechTree/TechTree.cs index 8efe8dcb77..f08d549603 100644 --- a/OpenRa.TechTree/TechTree.cs +++ b/OpenRa.TechTree/TechTree.cs @@ -12,11 +12,20 @@ namespace OpenRa.TechTree Dictionary objects = new Dictionary(); public ICollection built = new List(); - readonly Race currentRace; + Race currentRace = Race.None; - public TechTree(Race race) + public Race CurrentRace + { + get { return currentRace; } + set + { + currentRace = value; + CheckAll(); + } + } + + public TechTree() { - this.currentRace = race; LoadRules(); built.Add("FACT"); @@ -89,5 +98,25 @@ namespace OpenRa.TechTree yield return b; } } + + public IEnumerable BuildableBuildings + { + get + { + foreach (Item i in BuildableItems) + if (i.IsStructure) + yield return i; + } + } + + public IEnumerable BuildableUnits + { + get + { + foreach (Item i in BuildableItems) + if (!i.IsStructure) + yield return i; + } + } } }