git-svn-id: svn://svn.ijw.co.nz/svn/OpenRa@1207 993157c7-ee19-0410-b2c4-bb4e9862e678

This commit is contained in:
beedee
2007-07-13 16:26:32 +00:00
parent b0f4f08938
commit 8ac1535e13
5 changed files with 66 additions and 25 deletions

View File

@@ -134,7 +134,14 @@ namespace OpenRa.FileFormats
public Stream GetContent(string filename) public Stream GetContent(string filename)
{ {
return GetContent(PackageEntry.HashFilename(filename)); try
{
return GetContent(PackageEntry.HashFilename(filename));
}
catch (FileNotFoundException e)
{
throw new FileNotFoundException("File not found", filename, e);
}
} }
} }

View File

@@ -7,6 +7,7 @@ using BluntDirectX.Direct3D;
using OpenRa.FileFormats; using OpenRa.FileFormats;
using System.IO; using System.IO;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using OpenRa.TechTree;
namespace OpenRa.Game namespace OpenRa.Game
{ {
@@ -58,7 +59,7 @@ namespace OpenRa.Game
world.Add(new Refinery(new PointF(24 * 5, 24 * 7), 1)); world.Add(new Refinery(new PointF(24 * 5, 24 * 7), 1));
sidebar = new Sidebar(OpenRa.TechTree.Race.None, renderer); sidebar = new Sidebar(Race.Soviet, renderer);
} }
internal void Run() internal void Run()
@@ -111,7 +112,7 @@ namespace OpenRa.Game
new Range<float>(scrollPos.X, scrollPos.X + ClientSize.Width), new Range<float>(scrollPos.X, scrollPos.X + ClientSize.Width),
new Range<float>(scrollPos.Y, scrollPos.Y + ClientSize.Height)); new Range<float>(scrollPos.Y, scrollPos.Y + ClientSize.Height));
sidebar.Paint(scrollPos); sidebar.Paint(ClientSize, scrollPos);
renderer.EndFrame(); renderer.EndFrame();
} }

View File

@@ -5,11 +5,12 @@ using OpenRa.TechTree;
using BluntDirectX.Direct3D; using BluntDirectX.Direct3D;
using OpenRa.FileFormats; using OpenRa.FileFormats;
using System.Drawing; using System.Drawing;
using System.IO;
namespace OpenRa.Game namespace OpenRa.Game
{ {
using Sprite = SheetRectangle<Sheet>; using Sprite = SheetRectangle<Sheet>;
class Sidebar class Sidebar
{ {
TechTree.TechTree techTree = new TechTree.TechTree(); TechTree.TechTree techTree = new TechTree.TechTree();
@@ -20,33 +21,55 @@ namespace OpenRa.Game
Dictionary<string, Sprite> sprites = new Dictionary<string,Sprite>(); Dictionary<string, Sprite> sprites = new Dictionary<string,Sprite>();
void LoadSprite(string name)
{
sprites.Add(name, SpriteSheetBuilder.LoadSprite(package, name + "icon.shp"));
}
public Sidebar(Race race, Renderer renderer) public Sidebar(Race race, Renderer renderer)
{ {
techTree.CurrentRace = race;
techTree.Build("FACT");
techTree.Build("POWR");
techTree.Build("BARR");
techTree.Build("PROC");
techTree.Build("WEAP");
techTree.Build("DOME");
this.renderer = renderer; this.renderer = renderer;
this.spriteRenderer = new SpriteRenderer(renderer); this.spriteRenderer = new SpriteRenderer(renderer);
package = new Package("../../../hires.mix"); package = new Package("../../../hires.mix");
LoadSprite("E7"); LoadSprites();
LoadSprite("E6");
LoadSprite("POWR");
techTree.CurrentRace = race; techTree.CurrentRace = race;
} }
public void Paint(PointF scrollOffset) void LoadSprites()
{ {
int x = 0, y = 0; foreach (string line in File.ReadAllLines("../../../buildings.txt"))
{
string key = line.Substring(0, line.IndexOf(','));
sprites.Add(key, SpriteSheetBuilder.LoadSprite(package, key + "icon.shp"));
}
foreach (string line in File.ReadAllLines("../../../units.txt"))
{
string key = line.Substring(0, line.IndexOf(','));
sprites.Add(key, SpriteSheetBuilder.LoadSprite(package, key + "icon.shp"));
}
}
public void Paint(Size clientSize, PointF scrollOffset)
{
int y1 = 0, y2 = 0;
foreach (Item i in techTree.BuildableBuildings) foreach (Item i in techTree.BuildableBuildings)
{ {
Sprite sprite; Sprite sprite;
if (!sprites.TryGetValue(i.tag, out sprite)) continue; if (!sprites.TryGetValue(i.tag, out sprite)) continue;
PointF location = new PointF(x + scrollOffset.X, y + scrollOffset.Y); PointF location = new PointF(clientSize.Width - 128 + scrollOffset.X, y1 + scrollOffset.Y);
spriteRenderer.DrawSprite(sprite, location); spriteRenderer.DrawSprite(sprite, location);
y += 48; y1 += 48;
}
foreach (Item i in techTree.BuildableUnits)
{
Sprite sprite;
if (!sprites.TryGetValue(i.tag, out sprite)) continue;
PointF location = new PointF(clientSize.Width - 64 + scrollOffset.X, y2 + scrollOffset.Y);
spriteRenderer.DrawSprite(sprite, location);
y2 += 48;
} }
spriteRenderer.Flush(); spriteRenderer.Flush();

View File

@@ -117,14 +117,28 @@ namespace OpenRa.TechTree
return p.Count == racePrerequisites.Length; return p.Count == racePrerequisites.Length;
} }
void CheckForBoth(IEnumerable<string> buildings)
{
if (canBuild && (ShouldMakeUnbuildable(buildings, alliedPrerequisites) && ShouldMakeUnbuildable(buildings, sovietPrerequisites)))
canBuild = false;
else if (!canBuild && (ShouldMakeBuildable(buildings, alliedPrerequisites) || ShouldMakeBuildable(buildings, sovietPrerequisites)))
canBuild = true;
}
public void CheckPrerequisites(IEnumerable<string> buildings, Race currentRace) public void CheckPrerequisites(IEnumerable<string> buildings, Race currentRace)
{ {
string[] racePrerequisites = (currentRace == Race.Allies) ? alliedPrerequisites : sovietPrerequisites; if (currentRace == Race.None || currentRace == (Race.Allies | Race.Soviet))
CheckForBoth(buildings);
else
{
string[] racePrerequisites = (currentRace == Race.Allies) ? alliedPrerequisites : sovietPrerequisites;
if ((canBuild && ShouldMakeUnbuildable(buildings, racePrerequisites)) || !((owner & currentRace) == currentRace)) if ((canBuild && ShouldMakeUnbuildable(buildings, racePrerequisites)) || !((owner & currentRace) == currentRace))
canBuild = false; canBuild = false;
else if (!canBuild && ShouldMakeBuildable(buildings, racePrerequisites)) else if (!canBuild && ShouldMakeBuildable(buildings, racePrerequisites))
canBuild = true; canBuild = true;
}
} }
bool canBuild; bool canBuild;

View File

@@ -1,5 +1,4 @@
IRON,Iron Curtain IRON,Iron Curtain
FCOM,Forward Command Center
ATEK,Allied Tech Center ATEK,Allied Tech Center
PDOX,Chronosphere PDOX,Chronosphere
WEAP,War Factory WEAP,War Factory
@@ -23,8 +22,6 @@ AFLD,Airstrip
POWR,Power Plant POWR,Power Plant
APWR,Advanced Power Plant APWR,Advanced Power Plant
STEK,Soviet Tech Center STEK,Soviet Tech Center
HOSP,Hospital
BIO,Bio-research Laboratory
BARR,Soviet Barracks BARR,Soviet Barracks
TENT,Allied Barracks TENT,Allied Barracks
KENN,Kennel KENN,Kennel
@@ -32,7 +29,6 @@ FIX,Service Depot
SBAG,Sandbags SBAG,Sandbags
BRIK,Concrete Wall BRIK,Concrete Wall
FENC,Wire Fence FENC,Wire Fence
CYCL,Chain Link Fence
FACF,Fake Construction Yard FACF,Fake Construction Yard
WEAF,Fake War Factory WEAF,Fake War Factory
SYRF,Fake Shipyard SYRF,Fake Shipyard