Allow tile placement outside the map cordon.
This commit is contained in:
@@ -79,6 +79,8 @@ namespace OpenRA.Mods.Common.Widgets
|
|||||||
return true;
|
return true;
|
||||||
|
|
||||||
var map = world.Map;
|
var map = world.Map;
|
||||||
|
var mapTiles = map.MapTiles.Value;
|
||||||
|
var mapHeight = map.MapHeight.Value;
|
||||||
var cell = worldRenderer.Viewport.ViewToWorld(mi.Location);
|
var cell = worldRenderer.Viewport.ViewToWorld(mi.Location);
|
||||||
|
|
||||||
if (mi.Event != MouseInputEvent.Down && mi.Event != MouseInputEvent.Move)
|
if (mi.Event != MouseInputEvent.Down && mi.Event != MouseInputEvent.Move)
|
||||||
@@ -87,7 +89,7 @@ namespace OpenRA.Mods.Common.Widgets
|
|||||||
var rules = map.Rules;
|
var rules = map.Rules;
|
||||||
var tileset = rules.TileSets[map.Tileset];
|
var tileset = rules.TileSets[map.Tileset];
|
||||||
var template = tileset.Templates[Template];
|
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))
|
if (mi.Event == MouseInputEvent.Move && PlacementOverlapsSameTemplate(template, cell))
|
||||||
return true;
|
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 index = template.PickAny ? (byte)Game.CosmeticRandom.Next(0, template.TilesCount) : (byte)i;
|
||||||
var c = cell + new CVec(x, y);
|
var c = cell + new CVec(x, y);
|
||||||
if (!map.Contains(c))
|
if (!mapTiles.Contains(c))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
map.MapTiles.Value[c] = new TerrainTile(Template, index);
|
mapTiles[c] = new TerrainTile(Template, index);
|
||||||
map.MapHeight.Value[c] = (byte)(baseHeight + template[index].Height).Clamp(0, world.TileSet.MaxGroundHeight);
|
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)
|
bool PlacementOverlapsSameTemplate(TerrainTemplateInfo template, CPos cell)
|
||||||
{
|
{
|
||||||
var map = world.Map;
|
var map = world.Map;
|
||||||
|
var mapTiles = map.MapTiles.Value;
|
||||||
var i = 0;
|
var i = 0;
|
||||||
for (var y = 0; y < template.Size.Y; y++)
|
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)
|
if (template.Contains(i) && template[i] != null)
|
||||||
{
|
{
|
||||||
var c = cell + new CVec(x, y);
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user