oh ffs. old world was being referenced. fixed so it crashes if you do that.

This commit is contained in:
Chris Forbes
2010-01-19 11:21:45 +13:00
parent e82a398091
commit 00abdce68f
5 changed files with 16 additions and 10 deletions

View File

@@ -52,7 +52,7 @@ namespace OpenRa
{ {
var a = w.CreateActor("Bridge", new int2(ni, nj), null); var a = w.CreateActor("Bridge", new int2(ni, nj), null);
var br = a.traits.Get<Bridge>(); var br = a.traits.Get<Bridge>();
br.SetTiles(template, replacedTiles); br.SetTiles(w, template, replacedTiles);
} }
} }

View File

@@ -58,6 +58,7 @@ namespace OpenRa
FileSystem.UnmountTemporaryPackages(); FileSystem.UnmountTemporaryPackages();
Rules.LoadRules(mapName, usingAftermath); Rules.LoadRules(mapName, usingAftermath);
world = null; // trying to access the old world will NRE, rather than silently doing it wrong.
world = new World(); world = new World();
Game.world.ActorAdded += a => Game.world.ActorAdded += a =>
{ {

View File

@@ -4,6 +4,7 @@ using System.Linq;
using OpenRa.FileFormats; using OpenRa.FileFormats;
using OpenRa.Support; using OpenRa.Support;
using OpenRa.Traits; using OpenRa.Traits;
using System.Diagnostics;
namespace OpenRa namespace OpenRa
{ {
@@ -143,9 +144,7 @@ namespace OpenRa
return ret; return ret;
} }
[Conditional( "SANITY_CHECKS" )]
[System.Diagnostics.Conditional( "SANITY_CHECKS" )]
static void CheckSanePath( List<int2> path ) static void CheckSanePath( List<int2> path )
{ {
if( path.Count == 0 ) if( path.Count == 0 )
@@ -160,7 +159,7 @@ namespace OpenRa
} }
} }
[System.Diagnostics.Conditional("SANITY_CHECKS")] [Conditional("SANITY_CHECKS")]
static void CheckSanePath2(List<int2> path, int2 src, int2 dest) static void CheckSanePath2(List<int2> path, int2 src, int2 dest)
{ {
if (path.Count == 0) if (path.Count == 0)

View File

@@ -39,7 +39,12 @@ namespace OpenRa
var p = queue.Pop(); var p = queue.Pop();
cellInfo[ p.Location.X, p.Location.Y ].Seen = true; cellInfo[ p.Location.X, p.Location.Y ].Seen = true;
if (passableCost[(int)umt][p.Location.X, p.Location.Y] == float.PositiveInfinity) var custom2 = Game.world.customTerrain[p.Location.X, p.Location.Y];
var thisCost = (custom2 != null)
? custom2.GetCost(p.Location, umt)
: passableCost[(int)umt][p.Location.X, p.Location.Y];
if (thisCost == float.PositiveInfinity)
return p.Location; return p.Location;
foreach( int2 d in Util.directions ) foreach( int2 d in Util.directions )
@@ -51,6 +56,7 @@ namespace OpenRa
continue; continue;
var custom = Game.world.customTerrain[newHere.X, newHere.Y]; var custom = Game.world.customTerrain[newHere.X, newHere.Y];
if (custom != null) throw new NotImplementedException();
var costHere = (custom != null) ? custom.GetCost(newHere, umt) : passableCost[(int)umt][newHere.X, newHere.Y]; var costHere = (custom != null) ? custom.GetCost(newHere, umt) : passableCost[(int)umt][newHere.X, newHere.Y];
if (costHere == float.PositiveInfinity) if (costHere == float.PositiveInfinity)

View File

@@ -32,17 +32,17 @@ namespace OpenRa.Traits
yield return new Renderable(t.Value, Game.CellSize * t.Key, PaletteType.Gold); yield return new Renderable(t.Value, Game.CellSize * t.Key, PaletteType.Gold);
} }
public void SetTiles(TileTemplate template, Dictionary<int2, int> replacedTiles) public void SetTiles(World world, TileTemplate template, Dictionary<int2, int> replacedTiles)
{ {
Template = template; Template = template;
Tiles = replacedTiles; Tiles = replacedTiles;
foreach (var t in replacedTiles.Keys) foreach (var t in replacedTiles.Keys)
Game.world.customTerrain[t.X, t.Y] = this; world.customTerrain[t.X, t.Y] = this;
if (cachedTheater != Game.world.Map.Theater) if (cachedTheater != world.Map.Theater)
{ {
cachedTheater = Game.world.Map.Theater; cachedTheater = world.Map.Theater;
sprites = new Cache<TileReference, Sprite>( sprites = new Cache<TileReference, Sprite>(
x => SheetBuilder.Add(Game.world.TileSet.GetBytes(x), x => SheetBuilder.Add(Game.world.TileSet.GetBytes(x),
new Size(Game.CellSize, Game.CellSize))); new Size(Game.CellSize, Game.CellSize)));