git-svn-id: svn://svn.ijw.co.nz/svn/OpenRa@1207 993157c7-ee19-0410-b2c4-bb4e9862e678
This commit is contained in:
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user