can draw and show multiple icons on one extract

This commit is contained in:
iAmAsval 2022-01-17 22:21:23 +01:00
parent 082917d3cb
commit a6adddf8fe
21 changed files with 56 additions and 85 deletions

View File

@ -26,7 +26,7 @@ namespace FModel.Creator.Bases.BB
Description = description.Text;
}
public override SKBitmap Draw()
public override SKBitmap[] Draw()
{
var ret = new SKBitmap(Width, Height, SKColorType.Rgba8888, SKAlphaType.Premul);
using var c = new SKCanvas(ret);
@ -37,7 +37,7 @@ namespace FModel.Creator.Bases.BB
DrawDisplayName(c);
DrawDescription(c);
return ret;
return new []{ret};
}
}
}

View File

@ -79,7 +79,7 @@ namespace FModel.Creator.Bases.FN
Height += 256 * _quests.Count;
}
public override SKBitmap Draw()
public override SKBitmap[] Draw()
{
var ret = new SKBitmap(Width, Height, SKColorType.Rgba8888, SKAlphaType.Opaque);
using var c = new SKCanvas(ret);
@ -88,7 +88,7 @@ namespace FModel.Creator.Bases.FN
DrawDisplayName(c);
DrawQuests(c);
return ret;
return new []{ret};
}
private readonly SKPaint _headerPaint = new()

View File

@ -46,7 +46,7 @@ namespace FModel.Creator.Bases.FN
Description = Description.ToUpper();
}
public override SKBitmap Draw()
public override SKBitmap[] Draw()
{
var ret = new SKBitmap(Width, Height, SKColorType.Rgba8888, SKAlphaType.Premul);
using var c = new SKCanvas(ret);
@ -69,7 +69,7 @@ namespace FModel.Creator.Bases.FN
DrawUserFacingFlags(c, _design.GameplayTags.DrawCustomOnly);
}
return ret;
return new []{ret};
}
private void CheckGameplayTags(FGameplayTagContainer gameplayTags)

View File

@ -112,14 +112,14 @@ namespace FModel.Creator.Bases.FN
}
}
public override SKBitmap Draw()
public override SKBitmap[] Draw()
{
var ret = new SKBitmap(Width, Height, SKColorType.Rgba8888, SKAlphaType.Premul);
using var c = new SKCanvas(ret);
Draw(c);
return ret;
return new []{ret};
}
private void GetSeries(FPackageIndex s)

View File

@ -125,7 +125,7 @@ namespace FModel.Creator.Bases.FN
Height += 50 * _statistics.Count;
}
public override SKBitmap Draw()
public override SKBitmap[] Draw()
{
var ret = new SKBitmap(Width, Height, SKColorType.Rgba8888, SKAlphaType.Opaque);
using var c = new SKCanvas(ret);
@ -134,7 +134,7 @@ namespace FModel.Creator.Bases.FN
DrawDisplayName(c);
DrawStatistics(c);
return ret;
return new []{ret};
}
private bool TryGetCurveTableStat(FStructFallback property, out float statValue)

View File

@ -38,7 +38,7 @@ namespace FModel.Creator.Bases.FN
if (Object.TryGetValue(out FText unlockDescription, "UnlockDescription")) _unlockedDescription = unlockDescription.Text;
}
public override SKBitmap Draw()
public override SKBitmap[] Draw()
{
var ret = new SKBitmap(Width, Height, SKColorType.Rgba8888, SKAlphaType.Premul);
using var c = new SKCanvas(ret);
@ -61,7 +61,7 @@ namespace FModel.Creator.Bases.FN
break;
}
return ret;
return new []{ret};
}
private void DrawInformation(SKCanvas c)

View File

@ -65,7 +65,7 @@ namespace FModel.Creator.Bases.FN
}
}
public override SKBitmap Draw()
public override SKBitmap[] Draw()
{
var ret = new SKBitmap(Width, Height, SKColorType.Rgba8888, SKAlphaType.Premul);
using var c = new SKCanvas(ret);
@ -81,7 +81,7 @@ namespace FModel.Creator.Bases.FN
break;
}
return ret;
return new []{ret};
}
}
}

View File

@ -56,7 +56,7 @@ namespace FModel.Creator.Bases.FN
Description = Utils.RemoveHtmlTags(Description);
}
public override SKBitmap Draw()
public override SKBitmap[] Draw()
{
using var ret = new SKBitmap(Width, Height, SKColorType.Rgba8888, SKAlphaType.Premul);
using var c = new SKCanvas(ret);
@ -79,7 +79,7 @@ namespace FModel.Creator.Bases.FN
break;
}
return ret;
return new []{ret};
}
}
}

View File

@ -1,4 +1,3 @@
using System.Collections.Generic;
using CUE4Parse.UE4.Assets.Exports;
using CUE4Parse.UE4.Assets.Exports.Material;
using SkiaSharp;
@ -7,7 +6,7 @@ namespace FModel.Creator.Bases.FN
{
public class BaseOfferDisplayData : UCreator
{
private List<SKBitmap> _offerImages;
private BaseMaterialInstance[] _offerImages;
public BaseOfferDisplayData(UObject uObject, EIconStyle style) : base(uObject, style)
{
@ -15,56 +14,24 @@ namespace FModel.Creator.Bases.FN
public override void ParseForInfo()
{
if (Object.ExportType != "AthenaItemShopOfferDisplayData")
if (!Object.TryGetValue(out UMaterialInterface[] presentations, "Presentations"))
return;
if (!Object.TryGetValue(out UMaterialInterface[] presentations, "Presentations"))
return;
_offerImages = new List<SKBitmap>();
foreach (var p in presentations)
_offerImages = new BaseMaterialInstance[presentations.Length];
for (int i = 0; i < _offerImages.Length; i++)
{
var offerImage = new BaseMaterialInstance(p, Style);
var offerImage = new BaseMaterialInstance(presentations[i], Style);
offerImage.ParseForInfo();
_offerImages.Add(offerImage.Draw());
_offerImages[i] = offerImage;
}
}
public override SKBitmap Draw()
public override SKBitmap[] Draw()
{
int imageOrder;
if (_offerImages.Count < 4)
imageOrder = _offerImages.Count;
else if (_offerImages.Count == 4)
imageOrder = 2;
else if (_offerImages.Count <= 9)
imageOrder = 3;
else imageOrder = 5;
Width = 512 * imageOrder;
Height = _offerImages.Count / imageOrder;
if (_offerImages.Count % imageOrder != 0)
Height++;
Height *= 512;
var ret = new SKBitmap(Width, Height);
using var canvas = new SKCanvas(ret);
var point = new SKPoint(0, 0);
for (int i = 0, placement = 0; i < _offerImages.Count; i++)
var ret = new SKBitmap[_offerImages.Length];
for (int i = 0; i < ret.Length; i++)
{
if (placement >= imageOrder)
{
placement = 0;
point.Y += 512;
}
point.X = 512 * placement;
canvas.DrawBitmap(_offerImages[i], point);
placement++;
ret[i] = _offerImages[i].Draw()[0];
}
return ret;

View File

@ -43,7 +43,7 @@ namespace FModel.Creator.Bases.FN
Height = Preview.Height;
}
public override SKBitmap Draw()
public override SKBitmap[] Draw()
{
var ret = new SKBitmap(Width, Height, SKColorType.Rgba8888, SKAlphaType.Premul);
using var c = new SKCanvas(ret);
@ -66,7 +66,7 @@ namespace FModel.Creator.Bases.FN
break;
}
return ret;
return new []{ret};
}
private void DrawMissionIcon(SKCanvas c)

View File

@ -161,14 +161,14 @@ namespace FModel.Creator.Bases.FN
DrawTexts(c, y);
}
public override SKBitmap Draw()
public override SKBitmap[] Draw()
{
var ret = new SKBitmap(Width, Height, SKColorType.Rgba8888, SKAlphaType.Opaque);
using var c = new SKCanvas(ret);
DrawQuest(c, 0);
return ret;
return new []{ret};
}
private string ReformatString(string s, string completionCount, bool isAll)

View File

@ -16,7 +16,7 @@ namespace FModel.Creator.Bases.FN
public int RewardsNeededForUnlock;
public Reward[] RewardEntryList;
}
public class BaseSeason : UCreator
{
private Reward _firstWinReward;
@ -35,7 +35,7 @@ namespace FModel.Creator.Bases.FN
public override void ParseForInfo()
{
_bookXpSchedule = Array.Empty<Page>();
if (Object.TryGetValue(out FText displayName, "DisplayName"))
DisplayName = displayName.Text.ToUpperInvariant();
@ -67,7 +67,7 @@ namespace FModel.Creator.Bases.FN
!page.TryGetValue(out int rewardsNeededForUnlock, "RewardsNeededForUnlock") ||
!page.TryGetValue(out FPackageIndex[] rewardEntryList, "RewardEntryList"))
continue;
var p = new Page
{
LevelsNeededForUnlock = levelsNeededForUnlock,
@ -96,7 +96,7 @@ namespace FModel.Creator.Bases.FN
Height += 100 * _bookXpSchedule.Sum(x => x.RewardEntryList.Length) / _bookXpSchedule.Length;
}
public override SKBitmap Draw()
public override SKBitmap[] Draw()
{
var ret = new SKBitmap(Width, Height, SKColorType.Rgba8888, SKAlphaType.Opaque);
using var c = new SKCanvas(ret);
@ -105,7 +105,7 @@ namespace FModel.Creator.Bases.FN
_firstWinReward?.DrawSeasonWin(c, _headerHeight);
DrawBookSchedule(c);
return ret;
return new []{ret};
}
private const int _DEFAULT_AREA_SIZE = 80;

View File

@ -14,14 +14,14 @@ namespace FModel.Creator.Bases.FN
GetSeries(Object);
}
public override SKBitmap Draw()
public override SKBitmap[] Draw()
{
var ret = new SKBitmap(Width, Height, SKColorType.Rgba8888, SKAlphaType.Premul);
using var c = new SKCanvas(ret);
DrawBackground(c);
return ret;
return new []{ret};
}
}
}

View File

@ -50,7 +50,7 @@ namespace FModel.Creator.Bases.FN
_additionalDescription = addDesc.Text;
}
public override SKBitmap Draw()
public override SKBitmap[] Draw()
{
var ret = new SKBitmap(Width, Height, SKColorType.Rgba8888, SKAlphaType.Opaque);
using var c = new SKCanvas(ret);
@ -64,7 +64,7 @@ namespace FModel.Creator.Bases.FN
DrawGeneralDescription(c);
DrawAdditionalDescription(c);
return ret;
return new []{ret};
}
private readonly SKPaint _panelPaint = new() { IsAntialias = true, FilterQuality = SKFilterQuality.High, Color = SKColor.Parse("#0045C7") };

View File

@ -111,7 +111,7 @@ namespace FModel.Creator.Bases.FN
Height += 35 * _optionValues.Count;
}
public override SKBitmap Draw()
public override SKBitmap[] Draw()
{
var ret = new SKBitmap(Width, Height, SKColorType.Rgba8888, SKAlphaType.Opaque);
using var c = new SKCanvas(ret);
@ -119,7 +119,7 @@ namespace FModel.Creator.Bases.FN
DrawBackground(c);
DrawInformation(c);
return ret;
return new []{ret};
}
private new void DrawBackground(SKCanvas c)

View File

@ -32,7 +32,7 @@ namespace FModel.Creator.Bases.SB
DisplayName = displayName.Text;
}
public override SKBitmap Draw()
public override SKBitmap[] Draw()
{
var ret = new SKBitmap(Width, Height, SKColorType.Rgba8888, SKAlphaType.Premul);
using var c = new SKCanvas(ret);
@ -42,7 +42,7 @@ namespace FModel.Creator.Bases.SB
DrawTextBackground(c);
DrawDisplayName(c);
return ret;
return new []{ret};
}
}
}

View File

@ -9,7 +9,7 @@ namespace FModel.Creator.Bases.SB
public class BaseGameModeInfo : UCreator
{
private SKBitmap _icon;
public BaseGameModeInfo(UObject uObject, EIconStyle style) : base(uObject, style)
{
Width = 738;
@ -28,7 +28,7 @@ namespace FModel.Creator.Bases.SB
_icon = Utils.GetBitmap(icon).Resize(25);
}
public override SKBitmap Draw()
public override SKBitmap[] Draw()
{
var ret = new SKBitmap(Width, Height, SKColorType.Rgba8888, SKAlphaType.Premul);
using var c = new SKCanvas(ret);
@ -38,9 +38,9 @@ namespace FModel.Creator.Bases.SB
DrawDisplayName(c);
DrawIcon(c);
return ret;
return new []{ret};
}
private void DrawIcon(SKCanvas c)
{
if (_icon == null) return;

View File

@ -36,7 +36,7 @@ namespace FModel.Creator.Bases.SB
DisplayName = displayName.Text;
}
public override SKBitmap Draw()
public override SKBitmap[] Draw()
{
var ret = new SKBitmap(Width, Height, SKColorType.Rgba8888, SKAlphaType.Premul);
using var c = new SKCanvas(ret);
@ -49,7 +49,7 @@ namespace FModel.Creator.Bases.SB
DrawToBottom(c, SKTextAlign.Left, $"PromotionXP: {_promotionXp}");
DrawToBottom(c, SKTextAlign.Right, $"XPLostPerMatch: {_xpLostPerMatch}");
return ret;
return new []{ret};
}
}
}

View File

@ -47,7 +47,7 @@ namespace FModel.Creator.Bases.SB
_seriesBackground2 = Utils.GetBitmap("g3/Content/UI/Textures/assets/store/ItemBGStatic_UIT.ItemBGStatic_UIT");
}
public override SKBitmap Draw()
public override SKBitmap[] Draw()
{
var ret = new SKBitmap(Width, Height, SKColorType.Rgba8888, SKAlphaType.Premul);
using var c = new SKCanvas(ret);
@ -59,7 +59,7 @@ namespace FModel.Creator.Bases.SB
DrawDisplayName(c);
DrawDescription(c);
return ret;
return new []{ret};
}
private void DrawBackgrounds(SKCanvas c)

View File

@ -23,7 +23,7 @@ namespace FModel.Creator.Bases
public int Height { get; protected set; }
public abstract void ParseForInfo();
public abstract SKBitmap Draw();
public abstract SKBitmap[] Draw();
protected UCreator(UObject uObject, EIconStyle style)
{

View File

@ -223,6 +223,10 @@ namespace FModel.ViewModels
}
public void AddImage(UTexture2D texture) => AddImage(texture.Name, texture.bRenderNearestNeighbor, texture.Decode());
public void AddImage(string name, bool rnn, SKBitmap[] img)
{
foreach (var i in img) AddImage(name, rnn, i);
}
public void AddImage(string name, bool rnn, SKBitmap img)
{
Application.Current.Dispatcher.Invoke(() =>