Add ITemplatedTerrainInfo interface.
This commit is contained in:
@@ -10,6 +10,7 @@
|
||||
#endregion
|
||||
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using OpenRA.Graphics;
|
||||
using OpenRA.Mods.Common.Traits;
|
||||
@@ -36,7 +37,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
}
|
||||
}
|
||||
|
||||
readonly TileSet tileset;
|
||||
readonly ITemplatedTerrainInfo terrainInfo;
|
||||
readonly ITiledTerrainRenderer terrainRenderer;
|
||||
readonly TileSelectorTemplate[] allTemplates;
|
||||
readonly EditorCursorLayer editorCursor;
|
||||
@@ -45,12 +46,15 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
public TileSelectorLogic(Widget widget, World world, WorldRenderer worldRenderer)
|
||||
: base(widget, world, worldRenderer, "TILETEMPLATE_LIST", "TILEPREVIEW_TEMPLATE")
|
||||
{
|
||||
tileset = world.Map.Rules.TileSet;
|
||||
terrainInfo = world.Map.Rules.TerrainInfo as ITemplatedTerrainInfo;
|
||||
if (terrainInfo == null)
|
||||
throw new InvalidDataException("TileSelectorLogic requires a template-based tileset.");
|
||||
|
||||
terrainRenderer = world.WorldActor.TraitOrDefault<ITiledTerrainRenderer>();
|
||||
if (terrainRenderer == null)
|
||||
throw new YamlException("TileSelectorLogic requires a tile-based terrain renderer.");
|
||||
throw new InvalidDataException("TileSelectorLogic requires a tile-based terrain renderer.");
|
||||
|
||||
allTemplates = tileset.Templates.Values.Select(t => new TileSelectorTemplate(t)).ToArray();
|
||||
allTemplates = terrainInfo.Templates.Values.Select(t => new TileSelectorTemplate(t)).ToArray();
|
||||
editorCursor = world.WorldActor.Trait<EditorCursorLayer>();
|
||||
|
||||
allCategories = allTemplates.SelectMany(t => t.Categories)
|
||||
@@ -87,7 +91,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
|
||||
int CategoryOrder(string category)
|
||||
{
|
||||
var i = tileset.EditorTemplateOrder.IndexOf(category);
|
||||
var i = terrainInfo.EditorTemplateOrder.IndexOf(category);
|
||||
return i >= 0 ? i : int.MaxValue;
|
||||
}
|
||||
|
||||
@@ -111,7 +115,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
() => Editor.SetBrush(new EditorTileBrush(Editor, tileId, WorldRenderer)));
|
||||
|
||||
var preview = item.Get<TerrainTemplatePreviewWidget>("TILE_PREVIEW");
|
||||
var template = tileset.Templates[tileId];
|
||||
var template = terrainInfo.Templates[tileId];
|
||||
var bounds = terrainRenderer.TemplateBounds(template);
|
||||
|
||||
// Scale templates to fit within the panel
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
#endregion
|
||||
|
||||
using System;
|
||||
using System.IO;
|
||||
using OpenRA.Graphics;
|
||||
using OpenRA.Mods.Common.Traits;
|
||||
using OpenRA.Primitives;
|
||||
@@ -24,7 +25,7 @@ namespace OpenRA.Mods.Common.Widgets
|
||||
|
||||
readonly ITiledTerrainRenderer terrainRenderer;
|
||||
readonly WorldRenderer worldRenderer;
|
||||
readonly TileSet tileset;
|
||||
readonly ITerrainInfo terrainInfo;
|
||||
|
||||
TerrainTemplateInfo template;
|
||||
Rectangle bounds;
|
||||
@@ -50,7 +51,7 @@ namespace OpenRA.Mods.Common.Widgets
|
||||
public TerrainTemplatePreviewWidget(WorldRenderer worldRenderer, World world)
|
||||
{
|
||||
this.worldRenderer = worldRenderer;
|
||||
tileset = world.Map.Rules.TileSet;
|
||||
terrainInfo = world.Map.Rules.TerrainInfo;
|
||||
terrainRenderer = world.WorldActor.TraitOrDefault<ITiledTerrainRenderer>();
|
||||
if (terrainRenderer == null)
|
||||
throw new YamlException("TerrainTemplatePreviewWidget requires a tile-based terrain renderer.");
|
||||
@@ -60,7 +61,7 @@ namespace OpenRA.Mods.Common.Widgets
|
||||
: base(other)
|
||||
{
|
||||
worldRenderer = other.worldRenderer;
|
||||
tileset = other.worldRenderer.World.Map.Rules.TileSet;
|
||||
terrainInfo = other.worldRenderer.World.Map.Rules.TerrainInfo;
|
||||
terrainRenderer = other.terrainRenderer;
|
||||
Template = other.Template;
|
||||
GetScale = other.GetScale;
|
||||
@@ -87,7 +88,7 @@ namespace OpenRA.Mods.Common.Widgets
|
||||
for (var x = 0; x < Template.Size.X; x++)
|
||||
{
|
||||
var tile = new TerrainTile(Template.Id, (byte)(i++));
|
||||
if (!tileset.TryGetTileInfo(tile, out var tileInfo))
|
||||
if (!terrainInfo.TryGetTerrainInfo(tile, out var tileInfo))
|
||||
continue;
|
||||
|
||||
var sprite = terrainRenderer.TileSprite(tile, 0);
|
||||
|
||||
Reference in New Issue
Block a user