git-svn-id: svn://svn.ijw.co.nz/svn/OpenRa@1304 993157c7-ee19-0410-b2c4-bb4e9862e678
This commit is contained in:
@@ -126,6 +126,11 @@ namespace OpenRa.FileFormats
|
|||||||
foreach( KeyValuePair<string, string> kv in terrain )
|
foreach( KeyValuePair<string, string> kv in terrain )
|
||||||
Trees.Add( new TreeReference( int.Parse( kv.Key ), kv.Value ) );
|
Trees.Add( new TreeReference( int.Parse( kv.Key ), kv.Value ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool IsInMap(int x, int y)
|
||||||
|
{
|
||||||
|
return (x >= XOffset && y >= YOffset && x < XOffset + Width && y < YOffset + Height);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct TileReference
|
public struct TileReference
|
||||||
|
|||||||
@@ -9,7 +9,8 @@ namespace OpenRa.FileFormats
|
|||||||
public class TileSet
|
public class TileSet
|
||||||
{
|
{
|
||||||
public readonly Dictionary<ushort, Terrain> tiles = new Dictionary<ushort, Terrain>();
|
public readonly Dictionary<ushort, Terrain> tiles = new Dictionary<ushort, Terrain>();
|
||||||
public readonly Dictionary<ushort, Dictionary<int, int>> walk =
|
|
||||||
|
readonly Dictionary<ushort, Dictionary<int, int>> walk =
|
||||||
new Dictionary<ushort, Dictionary<int, int>>(); // cjf will fix
|
new Dictionary<ushort, Dictionary<int, int>>(); // cjf will fix
|
||||||
|
|
||||||
public readonly Package MixFile;
|
public readonly Package MixFile;
|
||||||
@@ -78,5 +79,13 @@ namespace OpenRa.FileFormats
|
|||||||
|
|
||||||
return missingTile;
|
return missingTile;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int GetWalkability(TileReference r)
|
||||||
|
{
|
||||||
|
if (r.tile == 0xff || r.tile == 0xffff)
|
||||||
|
r.image = 0;
|
||||||
|
|
||||||
|
return walk[r.tile][r.image];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,26 +29,16 @@ namespace OpenRa.Game
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public PathFinder( Map map, TileSet tileSet )
|
public PathFinder(Map map, TileSet tileSet)
|
||||||
{
|
{
|
||||||
this.map = map;
|
this.map = map;
|
||||||
|
|
||||||
for( int x = 0 ; x < 128 ; x++ )
|
//todo: speed hax for roads
|
||||||
{
|
|
||||||
for( int y = 0 ; y < 128 ; y++ )
|
|
||||||
{
|
|
||||||
if (x < map.XOffset || y < map.YOffset || x >= map.XOffset + map.Width || y >= map.YOffset + map.Height)
|
|
||||||
passable[x, y] = false;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
TileReference r = map.MapTiles[x, y];
|
|
||||||
if (r.tile == 0xffff || r.tile == 0xff)
|
|
||||||
r.image = 0;
|
|
||||||
|
|
||||||
passable[x, y] = IsPassable(tileSet.walk[r.tile][r.image]);
|
for (int x = 0; x < 128; x++)
|
||||||
}
|
for (int y = 0; y < 128; y++)
|
||||||
}
|
passable[x, y] = map.IsInMap(x, y) &&
|
||||||
}
|
IsPassable(tileSet.GetWalkability(map.MapTiles[x, y]));
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<int2> FindUnitPath( World world, Unit unit, int2 destination )
|
public List<int2> FindUnitPath( World world, Unit unit, int2 destination )
|
||||||
|
|||||||
Reference in New Issue
Block a user