Allow tile placement outside the map cordon.

This commit is contained in:
Paul Chote
2015-06-07 16:31:25 +01:00
parent 3d352563a8
commit f10d876429

View File

@@ -79,6 +79,8 @@ namespace OpenRA.Mods.Common.Widgets
return true;
var map = world.Map;
var mapTiles = map.MapTiles.Value;
var mapHeight = map.MapHeight.Value;
var cell = worldRenderer.Viewport.ViewToWorld(mi.Location);
if (mi.Event != MouseInputEvent.Down && mi.Event != MouseInputEvent.Move)
@@ -87,7 +89,7 @@ namespace OpenRA.Mods.Common.Widgets
var rules = map.Rules;
var tileset = rules.TileSets[map.Tileset];
var template = tileset.Templates[Template];
var baseHeight = map.Contains(cell) ? map.MapHeight.Value[cell] : (byte)0;
var baseHeight = mapHeight.Contains(cell) ? mapHeight[cell] : (byte)0;
if (mi.Event == MouseInputEvent.Move && PlacementOverlapsSameTemplate(template, cell))
return true;
@@ -100,11 +102,11 @@ namespace OpenRA.Mods.Common.Widgets
{
var index = template.PickAny ? (byte)Game.CosmeticRandom.Next(0, template.TilesCount) : (byte)i;
var c = cell + new CVec(x, y);
if (!map.Contains(c))
if (!mapTiles.Contains(c))
continue;
map.MapTiles.Value[c] = new TerrainTile(Template, index);
map.MapHeight.Value[c] = (byte)(baseHeight + template[index].Height).Clamp(0, world.TileSet.MaxGroundHeight);
mapTiles[c] = new TerrainTile(Template, index);
mapHeight[c] = (byte)(baseHeight + template[index].Height).Clamp(0, world.TileSet.MaxGroundHeight);
}
}
}
@@ -115,6 +117,7 @@ namespace OpenRA.Mods.Common.Widgets
bool PlacementOverlapsSameTemplate(TerrainTemplateInfo template, CPos cell)
{
var map = world.Map;
var mapTiles = map.MapTiles.Value;
var i = 0;
for (var y = 0; y < template.Size.Y; y++)
{
@@ -123,7 +126,7 @@ namespace OpenRA.Mods.Common.Widgets
if (template.Contains(i) && template[i] != null)
{
var c = cell + new CVec(x, y);
if (map.Contains(c) && map.MapTiles.Value[c].Type == template.Id)
if (mapTiles.Contains(c) && mapTiles[c].Type == template.Id)
return true;
}
}