Added a scale slider for sprites in the AssetBrowser

This commit is contained in:
penev92
2021-02-07 21:23:45 +02:00
committed by Matthias Mailänder
parent 40c728269c
commit 7a9e0863d6
4 changed files with 48 additions and 9 deletions

View File

@@ -53,6 +53,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
bool isLoadError = false;
int currentFrame;
WRot modelOrientation;
float spriteScale;
float modelScale;
[ObjectCreator.UseCtor]
@@ -94,8 +95,10 @@ namespace OpenRA.Mods.Common.Widgets.Logic
{
spriteWidget.GetSprite = () => currentSprites != null ? currentSprites[currentFrame] : null;
currentPalette = spriteWidget.Palette;
spriteScale = spriteWidget.Scale;
spriteWidget.GetPalette = () => currentPalette;
spriteWidget.IsVisible = () => !isVideoLoaded && !isLoadError && currentSprites != null;
spriteWidget.GetScale = () => spriteScale;
}
var playerWidget = panel.GetOrNull<VideoPlayerWidget>("PLAYER");
@@ -248,6 +251,15 @@ namespace OpenRA.Mods.Common.Widgets.Logic
prevButton.IsVisible = () => !isVideoLoaded;
}
var spriteScaleSlider = panel.GetOrNull<SliderWidget>("SPRITE_SCALE_SLIDER");
if (spriteScaleSlider != null)
{
spriteScaleSlider.OnChange += x => spriteScale = x;
spriteScaleSlider.GetValue = () => spriteScale;
spriteScaleSlider.IsVisible = () => !isVideoLoaded;
panel.GetOrNull<LabelWidget>("SPRITE_SCALE").IsVisible = () => !isVideoLoaded;
}
var voxelContainer = panel.GetOrNull("VOXEL_SELECTOR");
if (voxelContainer != null)
voxelContainer.IsVisible = () => currentVoxel != null;

View File

@@ -17,7 +17,8 @@ namespace OpenRA.Mods.Common.Widgets
{
public class SpriteWidget : Widget
{
public Func<float> GetScale = () => 1f;
public float Scale = 1f;
public Func<float> GetScale;
public string Palette = "chrome";
public Func<string> GetPalette;
public Func<Sprite> GetSprite;
@@ -28,6 +29,7 @@ namespace OpenRA.Mods.Common.Widgets
public SpriteWidget(WorldRenderer worldRenderer)
{
GetPalette = () => Palette;
GetScale = () => Scale;
WorldRenderer = worldRenderer;
}
@@ -59,10 +61,11 @@ namespace OpenRA.Mods.Common.Widgets
if (sprite == null || palette == null)
return;
if (sprite != cachedSprite)
if (sprite != cachedSprite || scale != cachedScale)
{
offset = 0.5f * (new float2(RenderBounds.Size) - sprite.Size.XY);
offset = 0.5f * (new float2(RenderBounds.Size) - scale * sprite.Size.XY);
cachedSprite = sprite;
cachedScale = scale;
}
if (palette != cachedPalette)
@@ -71,12 +74,6 @@ namespace OpenRA.Mods.Common.Widgets
cachedPalette = palette;
}
if (scale != cachedScale)
{
offset *= scale;
cachedScale = scale;
}
Game.Renderer.EnableAntialiasingFilter();
Game.Renderer.SpriteRenderer.DrawSprite(sprite, pr, RenderOrigin + offset, scale);
Game.Renderer.DisableAntialiasingFilter();

View File

@@ -195,6 +195,21 @@ Container@ASSETBROWSER_PANEL:
Height: 25
Font: TinyBold
Align: Left
Label@SPRITE_SCALE:
X: 0
Y: 32
Width: 40
Height: 25
Font: TinyBold
Align: Left
Text: Scale
Slider@SPRITE_SCALE_SLIDER:
X: 35
Y: 35
Width: 100
Height: 20
MinimumValue: 0.5
MaximumValue: 4
Button@CLOSE_BUTTON:
Key: escape
Y: PARENT_BOTTOM - 1

View File

@@ -185,6 +185,21 @@ Background@ASSETBROWSER_PANEL:
Height: 25
Font: TinyBold
Align: Left
Label@SPRITE_SCALE:
X: 0
Y: 30
Width: 40
Height: 25
Font: TinyBold
Align: Left
Text: Scale
Slider@SPRITE_SCALE_SLIDER:
X: 35
Y: 32
Width: 100
Height: 20
MinimumValue: 0.5
MaximumValue: 4
Container@VOXEL_SELECTOR:
X: 226
Y: PARENT_BOTTOM - 75