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)
{
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 System.IO;
using System.Runtime.InteropServices;
using OpenRa.TechTree;
namespace OpenRa.Game
{
@@ -58,7 +59,7 @@ namespace OpenRa.Game
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()
@@ -111,7 +112,7 @@ namespace OpenRa.Game
new Range<float>(scrollPos.X, scrollPos.X + ClientSize.Width),
new Range<float>(scrollPos.Y, scrollPos.Y + ClientSize.Height));
sidebar.Paint(scrollPos);
sidebar.Paint(ClientSize, scrollPos);
renderer.EndFrame();
}

View File

@@ -5,11 +5,12 @@ using OpenRa.TechTree;
using BluntDirectX.Direct3D;
using OpenRa.FileFormats;
using System.Drawing;
using System.IO;
namespace OpenRa.Game
{
using Sprite = SheetRectangle<Sheet>;
class Sidebar
{
TechTree.TechTree techTree = new TechTree.TechTree();
@@ -20,33 +21,55 @@ namespace OpenRa.Game
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)
{
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.spriteRenderer = new SpriteRenderer(renderer);
package = new Package("../../../hires.mix");
LoadSprite("E7");
LoadSprite("E6");
LoadSprite("POWR");
LoadSprites();
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)
{
Sprite sprite;
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);
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();

View File

@@ -117,14 +117,28 @@ namespace OpenRa.TechTree
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)
{
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))
canBuild = false;
else if (!canBuild && ShouldMakeBuildable(buildings, racePrerequisites))
canBuild = true;
if ((canBuild && ShouldMakeUnbuildable(buildings, racePrerequisites)) || !((owner & currentRace) == currentRace))
canBuild = false;
else if (!canBuild && ShouldMakeBuildable(buildings, racePrerequisites))
canBuild = true;
}
}
bool canBuild;

View File

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