From 31a919772164328c1422dbc8497e313d31b5e386 Mon Sep 17 00:00:00 2001 From: chrisf Date: Sat, 7 Jul 2007 05:50:49 +0000 Subject: [PATCH] git-svn-id: svn://svn.ijw.co.nz/svn/OpenRa@1131 993157c7-ee19-0410-b2c4-bb4e9862e678 --- OpenRa.TechTreeTest/Building.cs | 32 +++++++++++++++++++++++++++++++- OpenRa.TechTreeTest/TechTree.cs | 16 ++++++++++++---- 2 files changed, 43 insertions(+), 5 deletions(-) diff --git a/OpenRa.TechTreeTest/Building.cs b/OpenRa.TechTreeTest/Building.cs index 2fe40ed1d3..819f492f66 100644 --- a/OpenRa.TechTreeTest/Building.cs +++ b/OpenRa.TechTreeTest/Building.cs @@ -1,12 +1,16 @@ using System; using System.Collections.Generic; using System.Text; +using OpenRa.FileFormats; +using System.Drawing; +using System.IO; namespace OpenRa.TechTreeTest { class Building { readonly string friendlyName; + readonly string tag; public string FriendlyName { @@ -29,9 +33,10 @@ namespace OpenRa.TechTreeTest set { techLevel = value; } } - public Building(string friendlyName) + public Building(string tag, string friendlyName) { this.friendlyName = friendlyName; + this.tag = tag; } public bool ShouldMakeBuildable(IEnumerable buildings) @@ -62,5 +67,30 @@ namespace OpenRa.TechTreeTest else if (!buildable && ShouldMakeBuildable(buildings)) buildable = true; } + + Bitmap icon; + public Bitmap Icon + { + get { return icon ?? (icon = LoadIcon(tag)); } + } + + static Package package = new Package("../../../hires.mix"); + static Palette palette = new Palette( File.OpenRead("../../../temperat.pal")); + + static Bitmap LoadIcon(string tag) + { + string filename = tag + "icon.shp"; + + try + { + Stream s = package.GetContent(filename); + ShpReader reader = new ShpReader(s); + foreach (ImageHeader h in reader) + return BitmapBuilder.FromBytes(h.Image, reader.Width, reader.Height, palette); + + return null; + } + catch (FileNotFoundException) { return LoadIcon("dog"); } + } } } diff --git a/OpenRa.TechTreeTest/TechTree.cs b/OpenRa.TechTreeTest/TechTree.cs index 8d9988efe5..9df05a44f2 100644 --- a/OpenRa.TechTreeTest/TechTree.cs +++ b/OpenRa.TechTreeTest/TechTree.cs @@ -9,8 +9,8 @@ namespace OpenRa.TechTreeTest { class TechTree { - Dictionary buildings = new Dictionary(); - List built; + Dictionary buildings = new Dictionary(); + public ICollection built = new List(); public TechTree() { LoadBuildings(); @@ -38,7 +38,7 @@ namespace OpenRa.TechTreeTest Regex pattern = new Regex(@"^(\w+),([\w ]+)$"); Match m = pattern.Match(line); if (!m.Success) continue; - buildings.Add(m.Groups[0].Value, new Building(m.Groups[1].Value)); + buildings.Add(m.Groups[1].Value, new Building(m.Groups[1].Value, m.Groups[2].Value)); } } @@ -63,8 +63,16 @@ namespace OpenRa.TechTreeTest void CheckAll() { foreach (Building building in buildings.Values) - { building.CheckPrerequisites(built); + } + + public IEnumerable BuildableItems + { + get + { + foreach (Building b in buildings.Values) + if (b.Buildable) + yield return b; } } }