TileSet and Map are now in Rules, not Game

This commit is contained in:
Bob
2009-11-19 17:08:23 +13:00
parent c0fe3fa4c9
commit 732f3c6c63
12 changed files with 44 additions and 46 deletions

View File

@@ -19,7 +19,6 @@ namespace OpenRa.Game
public static readonly int CellSize = 24; public static readonly int CellSize = 24;
public static World world; public static World world;
public static Map map;
static TreeCache treeCache; static TreeCache treeCache;
public static Viewport viewport; public static Viewport viewport;
public static PathFinder PathFinder; public static PathFinder PathFinder;
@@ -56,29 +55,26 @@ namespace OpenRa.Game
localPlayerIndex = localPlayer; localPlayerIndex = localPlayer;
var mapFile = new IniFile(FileSystem.Open(mapName)); Rules.Map.InitOreDensity();
map = new Map(mapFile);
map.InitOreDensity();
FileSystem.Mount(new Package(map.Theater + ".mix"));
viewport = new Viewport(clientSize, map.Offset, map.Offset + map.Size, renderer); viewport = new Viewport(clientSize, Rules.Map.Offset, Rules.Map.Offset + Rules.Map.Size, renderer);
world = new World(); world = new World();
treeCache = new TreeCache(map); treeCache = new TreeCache(Rules.Map);
foreach (TreeReference treeReference in map.Trees) foreach (TreeReference treeReference in Rules.Map.Trees)
world.Add(new Actor(treeReference, treeCache)); world.Add(new Actor(treeReference, treeCache));
BuildingInfluence = new BuildingInfluenceMap(); BuildingInfluence = new BuildingInfluenceMap();
UnitInfluence = new UnitInfluenceMap(); UnitInfluence = new UnitInfluenceMap();
LoadMapBuildings(mapFile); LoadMapBuildings(Rules.AllRules);
LoadMapUnits(mapFile); LoadMapUnits(Rules.AllRules);
controller = new Controller(); controller = new Controller();
worldRenderer = new WorldRenderer(renderer); worldRenderer = new WorldRenderer(renderer);
PathFinder = new PathFinder(map, worldRenderer.terrainRenderer.tileSet); PathFinder = new PathFinder(Rules.Map);
soundEngine = new ISoundEngine(); soundEngine = new ISoundEngine();
sounds = new Cache<string, ISoundSource>(LoadSound); sounds = new Cache<string, ISoundSource>(LoadSound);
@@ -178,7 +174,7 @@ namespace OpenRa.Game
if (--oreTicks == 0) if (--oreTicks == 0)
{ {
using (new PerfSample("ore")) using (new PerfSample("ore"))
map.GrowOre(SharedRandom); Rules.Map.GrowOre(SharedRandom);
oreTicks = oreFrequency; oreTicks = oreFrequency;
} }
@@ -214,16 +210,16 @@ namespace OpenRa.Game
if (BuildingInfluence.GetBuildingAt(a) != null) return false; if (BuildingInfluence.GetBuildingAt(a) != null) return false;
if (UnitInfluence.GetUnitAt(a) != null && UnitInfluence.GetUnitAt(a) != toIgnore) return false; if (UnitInfluence.GetUnitAt(a) != null && UnitInfluence.GetUnitAt(a) != toIgnore) return false;
return map.IsInMap(a.X, a.Y) && return Rules.Map.IsInMap(a.X, a.Y) &&
TerrainCosts.Cost(umt, TerrainCosts.Cost(umt,
worldRenderer.terrainRenderer.tileSet.GetWalkability(map.MapTiles[a.X, a.Y])) < double.PositiveInfinity; Rules.TileSet.GetWalkability(Rules.Map.MapTiles[a.X, a.Y])) < double.PositiveInfinity;
} }
public static bool IsWater(int2 a) public static bool IsWater(int2 a)
{ {
return map.IsInMap(a.X, a.Y) && return Rules.Map.IsInMap(a.X, a.Y) &&
TerrainCosts.Cost(UnitMovementType.Float, TerrainCosts.Cost(UnitMovementType.Float,
worldRenderer.terrainRenderer.tileSet.GetWalkability(map.MapTiles[a.X, a.Y])) < double.PositiveInfinity; Rules.TileSet.GetWalkability(Rules.Map.MapTiles[a.X, a.Y])) < double.PositiveInfinity;
} }
static IEnumerable<Actor> FindUnits(float2 a, float2 b) static IEnumerable<Actor> FindUnits(float2 a, float2 b)
@@ -303,7 +299,7 @@ namespace OpenRa.Game
public static bool CanPlaceBuilding(UnitInfo.BuildingInfo building, int2 xy, Actor toIgnore, bool adjust) public static bool CanPlaceBuilding(UnitInfo.BuildingInfo building, int2 xy, Actor toIgnore, bool adjust)
{ {
return !Footprint.Tiles(building, xy, adjust).Any( return !Footprint.Tiles(building, xy, adjust).Any(
t => Game.map.ContainsResource(t) || !Game.IsCellBuildable(t, t => Rules.Map.ContainsResource(t) || !Game.IsCellBuildable(t,
building.WaterBound ? UnitMovementType.Float : UnitMovementType.Wheel, building.WaterBound ? UnitMovementType.Float : UnitMovementType.Wheel,
toIgnore)); toIgnore));
} }

View File

@@ -18,6 +18,8 @@ namespace OpenRa.Game
public static InfoLoader<ProjectileInfo> ProjectileInfo; public static InfoLoader<ProjectileInfo> ProjectileInfo;
public static GeneralInfo General; public static GeneralInfo General;
public static TechTree TechTree; public static TechTree TechTree;
public static Map Map;
public static TileSet TileSet;
public static void LoadRules(string mapFileName) public static void LoadRules(string mapFileName)
{ {
@@ -61,6 +63,9 @@ namespace OpenRa.Game
Pair.New<string, Func<string, ProjectileInfo>>("Projectile", _ => new ProjectileInfo())); Pair.New<string, Func<string, ProjectileInfo>>("Projectile", _ => new ProjectileInfo()));
TechTree = new TechTree(); TechTree = new TechTree();
Map = new Map( AllRules );
FileSystem.Mount( new Package( Rules.Map.Theater + ".mix" ) );
TileSet = new TileSet( Map.TileSuffix );
} }
static void LoadCategories(params string[] types) static void LoadCategories(params string[] types)

View File

@@ -11,7 +11,6 @@ namespace OpenRa.Game.Graphics
FvfVertexBuffer<Vertex> vertexBuffer; FvfVertexBuffer<Vertex> vertexBuffer;
IndexBuffer indexBuffer; IndexBuffer indexBuffer;
Sheet terrainSheet; Sheet terrainSheet;
public TileSet tileSet;
Renderer renderer; Renderer renderer;
Map map; Map map;
@@ -23,14 +22,12 @@ namespace OpenRa.Game.Graphics
this.map = map; this.map = map;
overlayRenderer = new OverlayRenderer( renderer, map ); overlayRenderer = new OverlayRenderer( renderer, map );
tileSet = new TileSet( map.TileSuffix );
Size tileSize = new Size( Game.CellSize, Game.CellSize ); Size tileSize = new Size( Game.CellSize, Game.CellSize );
SheetBuilder.ForceNewSheet(); SheetBuilder.ForceNewSheet();
var tileMapping = new Cache<TileReference, Sprite>( var tileMapping = new Cache<TileReference, Sprite>(
x => SheetBuilder.Add(tileSet.GetBytes(x), tileSize)); x => SheetBuilder.Add(Rules.TileSet.GetBytes(x), tileSize));
Vertex[] vertices = new Vertex[4 * map.Height * map.Width]; Vertex[] vertices = new Vertex[4 * map.Height * map.Width];
ushort[] indices = new ushort[6 * map.Height * map.Width]; ushort[] indices = new ushort[6 * map.Height * map.Width];

View File

@@ -21,7 +21,7 @@ namespace OpenRa.Game.Graphics
public WorldRenderer(Renderer renderer) public WorldRenderer(Renderer renderer)
{ {
terrainRenderer = new TerrainRenderer(renderer, Game.map); terrainRenderer = new TerrainRenderer(renderer, Rules.Map);
this.renderer = renderer; this.renderer = renderer;
spriteRenderer = new SpriteRenderer(renderer, true); spriteRenderer = new SpriteRenderer(renderer, true);

View File

@@ -58,18 +58,18 @@ namespace OpenRa.Game
SequenceProvider.ForcePrecache(); SequenceProvider.ForcePrecache();
Game.world.Add( new Actor( "mcv", Game.map.Offset + new int2( 5, 5 ), Game.players[ 1 ]) ); Game.world.Add( new Actor( "mcv", Rules.Map.Offset + new int2( 5, 5 ), Game.players[ 1 ] ) );
Game.world.Add( new Actor( "mcv", Game.map.Offset + new int2( 7, 5 ), Game.players[ 2 ] ) ); Game.world.Add( new Actor( "mcv", Rules.Map.Offset + new int2( 7, 5 ), Game.players[ 2 ] ) );
Game.world.Add( new Actor( "mcv", Game.map.Offset + new int2( 9, 5 ), Game.players[ 0 ] ) ); Game.world.Add( new Actor( "mcv", Rules.Map.Offset + new int2( 9, 5 ), Game.players[ 0 ] ) );
Game.world.Add( new Actor( "jeep", Game.map.Offset + new int2( 9, 14 ), Game.players[ 1 ] ) ); Game.world.Add( new Actor( "jeep", Rules.Map.Offset + new int2( 9, 14 ), Game.players[ 1 ] ) );
Game.world.Add( new Actor( "3tnk", Game.map.Offset + new int2( 12, 7 ), Game.players[ 1 ] ) ); Game.world.Add( new Actor( "3tnk", Rules.Map.Offset + new int2( 12, 7 ), Game.players[ 1 ] ) );
Game.world.Add(new Actor("apc", Game.map.Offset + new int2(13, 7), Game.players[1])); Game.world.Add( new Actor( "apc", Rules.Map.Offset + new int2( 13, 7 ), Game.players[ 1 ] ) );
Game.world.Add(new Actor("ca", Game.map.Offset + new int2(40, 7), Game.players[1])); Game.world.Add( new Actor( "ca", Rules.Map.Offset + new int2( 40, 7 ), Game.players[ 1 ] ) );
Game.world.Add(new Actor("e1", Game.map.Offset + new int2(9, 13), Game.players[1])); Game.world.Add( new Actor( "e1", Rules.Map.Offset + new int2( 9, 13 ), Game.players[ 1 ] ) );
Game.world.Add(new Actor("arty", Game.map.Offset + new int2(10, 13), Game.players[1])); Game.world.Add( new Actor( "arty", Rules.Map.Offset + new int2( 10, 13 ), Game.players[ 1 ] ) );
Game.world.Add(new Actor("heli", Game.map.Offset + new int2(11, 12), Game.players[1])); Game.world.Add( new Actor( "heli", Rules.Map.Offset + new int2( 11, 12 ), Game.players[ 1 ] ) );
renderer.BuildPalette(Game.map); renderer.BuildPalette( Rules.Map );
ShowCursor(false); ShowCursor(false);
Game.ResetTimer(); Game.ResetTimer();
} }

View File

@@ -16,7 +16,7 @@ namespace OpenRa.Game
return false; return false;
return TerrainCosts.Cost(UnitMovementType.Wheel, return TerrainCosts.Cost(UnitMovementType.Wheel,
Game.worldRenderer.terrainRenderer.tileSet.GetWalkability(Game.map.MapTiles[i, j])) Rules.TileSet.GetWalkability(Rules.Map.MapTiles[i, j]))
< double.PositiveInfinity; < double.PositiveInfinity;
} }

View File

@@ -13,7 +13,7 @@ namespace OpenRa.Game
float[][,] passableCost = new float[4][,]; float[][,] passableCost = new float[4][,];
Map map; Map map;
public PathFinder(Map map, TileSet tileSet) public PathFinder(Map map)
{ {
this.map = map; this.map = map;
@@ -23,7 +23,7 @@ namespace OpenRa.Game
for( int y = 0 ; y < 128 ; y++ ) for( int y = 0 ; y < 128 ; y++ )
for (var umt = UnitMovementType.Foot; umt <= UnitMovementType.Float; umt++ ) for (var umt = UnitMovementType.Foot; umt <= UnitMovementType.Float; umt++ )
passableCost[(int)umt][ x, y ] = ( map.IsInMap( x, y ) ) passableCost[(int)umt][ x, y ] = ( map.IsInMap( x, y ) )
? (float)TerrainCosts.Cost( umt, tileSet.GetWalkability( map.MapTiles[ x, y ] ) ) ? (float)TerrainCosts.Cost( umt, Rules.TileSet.GetWalkability( map.MapTiles[ x, y ] ) )
: float.PositiveInfinity; : float.PositiveInfinity;
} }

View File

@@ -42,7 +42,7 @@ namespace OpenRa.Game
continue; continue;
if (ignoreTerrain) if (ignoreTerrain)
{ {
if (!Game.map.IsInMap(newHere.X, newHere.Y)) continue; if (!Rules.Map.IsInMap(newHere.X, newHere.Y)) continue;
} }
else else
{ {
@@ -50,7 +50,7 @@ namespace OpenRa.Game
continue; continue;
if (!Game.BuildingInfluence.CanMoveHere(newHere)) if (!Game.BuildingInfluence.CanMoveHere(newHere))
continue; continue;
if (Game.map.IsOverlaySolid(newHere)) if (Rules.Map.IsOverlaySolid(newHere))
continue; continue;
} }
if( checkForBlocked && Game.UnitInfluence.GetUnitAt( newHere ) != null ) if( checkForBlocked && Game.UnitInfluence.GetUnitAt( newHere ) != null )

View File

@@ -23,8 +23,8 @@ namespace OpenRa.Game.Traits.Activities
return new DeliverOre { NextActivity = NextActivity }; return new DeliverOre { NextActivity = NextActivity };
var isGem = false; var isGem = false;
if( Game.map.ContainsResource( self.Location ) && if( Rules.Map.ContainsResource( self.Location ) &&
Game.map.Harvest( self.Location, out isGem ) ) Rules.Map.Harvest( self.Location, out isGem ) )
{ {
var harvestAnim = "harvest" + Util.QuantizeFacing( mobile.facing, 8 ); var harvestAnim = "harvest" + Util.QuantizeFacing( mobile.facing, 8 );
var renderUnit = self.traits.WithInterface<RenderUnit>().First(); /* better have one of these! */ var renderUnit = self.traits.WithInterface<RenderUnit>().First(); /* better have one of these! */
@@ -43,7 +43,7 @@ namespace OpenRa.Game.Traits.Activities
{ {
var search = new PathSearch var search = new PathSearch
{ {
heuristic = loc => ( Game.map.ContainsResource( loc ) ? 0 : 1 ), heuristic = loc => ( Rules.Map.ContainsResource( loc ) ? 0 : 1 ),
umt = UnitMovementType.Wheel, umt = UnitMovementType.Wheel,
checkForBlocked = true checkForBlocked = true
}; };

View File

@@ -36,7 +36,7 @@ namespace OpenRa.Game.Traits
&& underCursor.traits.Contains<AcceptsOre>() && !IsEmpty) && underCursor.traits.Contains<AcceptsOre>() && !IsEmpty)
return OpenRa.Game.Order.DeliverOre(self, underCursor); return OpenRa.Game.Order.DeliverOre(self, underCursor);
if (underCursor == null && Game.map.ContainsResource(xy)) if (underCursor == null && Rules.Map.ContainsResource(xy))
return OpenRa.Game.Order.Harvest(self, xy); return OpenRa.Game.Order.Harvest(self, xy);
return null; return null;

View File

@@ -55,11 +55,11 @@ namespace OpenRa.Game.Traits
var p = self.Location + new int2(i % size, i / size + bibOffset); var p = self.Location + new int2(i % size, i / size + bibOffset);
if (isRemove) if (isRemove)
{ {
if (Game.map.MapTiles[p.X, p.Y].smudge == (byte)(i + startIndex)) if (Rules.Map.MapTiles[p.X, p.Y].smudge == (byte)(i + startIndex))
Game.map.MapTiles[p.X, p.Y].smudge = 0; Rules.Map.MapTiles[ p.X, p.Y ].smudge = 0;
} }
else else
Game.map.MapTiles[p.X, p.Y].smudge = (byte)(i + startIndex); Rules.Map.MapTiles[p.X, p.Y].smudge = (byte)(i + startIndex);
} }
} }
} }

View File

@@ -50,7 +50,7 @@ namespace OpenRa.Game
foreach( var t in Footprint.Tiles( bi, position ) ) foreach( var t in Footprint.Tiles( bi, position ) )
spriteRenderer.DrawSprite( ( isCloseEnough && Game.IsCellBuildable( t, bi.WaterBound spriteRenderer.DrawSprite( ( isCloseEnough && Game.IsCellBuildable( t, bi.WaterBound
? UnitMovementType.Float : UnitMovementType.Wheel ) && !Game.map.ContainsResource( t ) ) ? UnitMovementType.Float : UnitMovementType.Wheel ) && !Rules.Map.ContainsResource( t ) )
? buildOk : buildBlocked, Game.CellSize * t, 0 ); ? buildOk : buildBlocked, Game.CellSize * t, 0 );
spriteRenderer.Flush(); spriteRenderer.Flush();