Move ownership of tile sprites to the terrain renderer.

This commit is contained in:
Paul Chote
2020-12-30 18:42:25 +00:00
committed by reaperrr
parent 2eee911c58
commit 0a374e2264
9 changed files with 84 additions and 50 deletions

View File

@@ -13,6 +13,7 @@ using System;
using System.Linq;
using OpenRA.Graphics;
using OpenRA.Mods.Common.Traits;
using OpenRA.Traits;
using OpenRA.Widgets;
namespace OpenRA.Mods.Common.Widgets.Logic
@@ -36,6 +37,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
}
readonly TileSet tileset;
readonly ITiledTerrainRenderer terrainRenderer;
readonly TileSelectorTemplate[] allTemplates;
readonly EditorCursorLayer editorCursor;
@@ -44,6 +46,10 @@ namespace OpenRA.Mods.Common.Widgets.Logic
: base(widget, world, worldRenderer, "TILETEMPLATE_LIST", "TILEPREVIEW_TEMPLATE")
{
tileset = world.Map.Rules.TileSet;
terrainRenderer = world.WorldActor.TraitOrDefault<ITiledTerrainRenderer>();
if (terrainRenderer == null)
throw new YamlException("TileSelectorLogic requires a tile-based terrain renderer.");
allTemplates = tileset.Templates.Values.Select(t => new TileSelectorTemplate(t)).ToArray();
editorCursor = world.WorldActor.Trait<EditorCursorLayer>();
@@ -106,8 +112,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
var preview = item.Get<TerrainTemplatePreviewWidget>("TILE_PREVIEW");
var template = tileset.Templates[tileId];
var grid = WorldRenderer.World.Map.Grid;
var bounds = WorldRenderer.Theater.TemplateBounds(template, grid.TileSize, grid.Type);
var bounds = terrainRenderer.TemplateBounds(template);
// Scale templates to fit within the panel
var scale = 1f;

View File

@@ -11,7 +11,9 @@
using System;
using OpenRA.Graphics;
using OpenRA.Mods.Common.Traits;
using OpenRA.Primitives;
using OpenRA.Traits;
using OpenRA.Widgets;
namespace OpenRA.Mods.Common.Widgets
@@ -20,6 +22,7 @@ namespace OpenRA.Mods.Common.Widgets
{
public Func<float> GetScale = () => 1f;
readonly ITiledTerrainRenderer terrainRenderer;
readonly WorldRenderer worldRenderer;
readonly TileSet tileset;
@@ -39,8 +42,7 @@ namespace OpenRA.Mods.Common.Widgets
if (template == null)
return;
var grid = Game.ModData.Manifest.Get<MapGrid>();
bounds = worldRenderer.Theater.TemplateBounds(template, grid.TileSize, grid.Type);
bounds = terrainRenderer.TemplateBounds(template);
}
}
@@ -49,6 +51,9 @@ namespace OpenRA.Mods.Common.Widgets
{
this.worldRenderer = worldRenderer;
tileset = world.Map.Rules.TileSet;
terrainRenderer = world.WorldActor.TraitOrDefault<ITiledTerrainRenderer>();
if (terrainRenderer == null)
throw new YamlException("TerrainTemplatePreviewWidget requires a tile-based terrain renderer.");
}
protected TerrainTemplatePreviewWidget(TerrainTemplatePreviewWidget other)
@@ -56,6 +61,7 @@ namespace OpenRA.Mods.Common.Widgets
{
worldRenderer = other.worldRenderer;
tileset = other.worldRenderer.World.Map.Rules.TileSet;
terrainRenderer = other.terrainRenderer;
Template = other.Template;
GetScale = other.GetScale;
}
@@ -84,7 +90,7 @@ namespace OpenRA.Mods.Common.Widgets
if (!tileset.TryGetTileInfo(tile, out var tileInfo))
continue;
var sprite = worldRenderer.Theater.TileSprite(tile, 0);
var sprite = terrainRenderer.TileSprite(tile, 0);
var size = new float2(sprite.Size.X * scale, sprite.Size.Y * scale);
var u = gridType == MapGridType.Rectangular ? x : (x - y) / 2f;