Allow mods to customise the default rendering scale.

This commit is contained in:
Paul Chote
2022-12-22 08:40:59 +13:00
committed by Matthias Mailänder
parent e21f94f36a
commit 6d438a9d61
8 changed files with 59 additions and 50 deletions

View File

@@ -23,6 +23,7 @@ namespace OpenRA.Mods.Common.Widgets
public Func<float> GetScale = () => 1f;
readonly WorldRenderer worldRenderer;
readonly WorldViewportSizes viewportSizes;
readonly IResourceRenderer[] resourceRenderers;
readonly Size tileSize;
@@ -43,12 +44,18 @@ namespace OpenRA.Mods.Common.Widgets
}
}
public Size IdealPreviewSize { get; private set; }
[ObjectCreator.UseCtor]
public ResourcePreviewWidget(WorldRenderer worldRenderer, World world)
public ResourcePreviewWidget(ModData modData, WorldRenderer worldRenderer, World world)
{
this.worldRenderer = worldRenderer;
viewportSizes = modData.Manifest.Get<WorldViewportSizes>();
resourceRenderers = world.WorldActor.TraitsImplementing<IResourceRenderer>().ToArray();
tileSize = world.Map.Grid.TileSize;
IdealPreviewSize = new Size(
(int)(viewportSizes.DefaultScale * tileSize.Width),
(int)(viewportSizes.DefaultScale * tileSize.Height));
}
protected ResourcePreviewWidget(ResourcePreviewWidget other)
@@ -56,10 +63,12 @@ namespace OpenRA.Mods.Common.Widgets
{
GetScale = other.GetScale;
worldRenderer = other.worldRenderer;
viewportSizes = other.viewportSizes;
resourceRenderers = other.resourceRenderers;
tileSize = other.tileSize;
resourceType = other.resourceType;
resourceRenderer = other.resourceRenderer;
IdealPreviewSize = other.IdealPreviewSize;
}
public override Widget Clone() { return new ResourcePreviewWidget(this); }
@@ -69,8 +78,11 @@ namespace OpenRA.Mods.Common.Widgets
if (resourceRenderer == null)
return;
var scale = GetScale();
var origin = RenderOrigin + new int2((RenderBounds.Size.Width - tileSize.Width) / 2, (RenderBounds.Size.Height - tileSize.Height) / 2);
var scale = GetScale() * viewportSizes.DefaultScale;
var origin = RenderOrigin + new int2(
(int)(0.5f * (RenderBounds.Size.Width - scale * tileSize.Width)),
(int)(0.5f * (RenderBounds.Size.Height - scale * tileSize.Height)));
foreach (var r in resourceRenderer.RenderUIPreview(worldRenderer, resourceType, origin, scale))
r.PrepareRender(worldRenderer).Render(worldRenderer);
}