FModel 3.1.1.3

This commit is contained in:
iAmAsval 2020-10-10 22:06:50 +02:00
parent b6a628f3b0
commit f4e8e34ce2
14 changed files with 128 additions and 78 deletions

View File

@ -38,7 +38,8 @@ namespace FModel.Creator.Bases
if (export.GetExport<TextProperty>("UIDescription", "Description") is { } description)
Description = Text.GetTextPropertyBase(description);
Width = Height = 512;
Width = 1024;
Height = 512;
if (export.GetExport<NameProperty>("PlaylistName") is { } playlistName && !playlistName.Value.IsNone)
{

View File

@ -152,7 +152,7 @@ namespace FModel.Creator
Rarity.DrawRarity(c, icon);
}
LargeSmallImage.DrawPreviewImage(c, icon);
LargeSmallImage.DrawNotStretchedPreviewImage(c, icon);
if ((EIconDesign)Properties.Settings.Default.AssetsIconDesign != EIconDesign.NoBackground)
{
@ -164,7 +164,7 @@ namespace FModel.Creator
}
}
Watermark.DrawWatermark(c); // watermark should only be applied on icons with width = 512
// Watermark.DrawWatermark(c); // boi why would you watermark something you don't own ¯\_(ツ)_/¯
ImageBoxVm.imageBoxViewModel.Set(ret, assetName);
}
return true;

View File

@ -57,5 +57,13 @@ namespace FModel.Creator.Icons
public static void DrawPreviewImage(SKCanvas c, IBase icon) =>
c.DrawBitmap(icon.IconImage ?? icon.FallbackImage, new SKRect(icon.Margin, icon.Margin, icon.Width - icon.Margin, icon.Height - icon.Margin),
new SKPaint { FilterQuality = SKFilterQuality.High, IsAntialias = true });
public static void DrawNotStretchedPreviewImage(SKCanvas c, IBase icon)
{
SKBitmap i = icon.IconImage ?? icon.FallbackImage;
int x = i.Width < icon.Width ? ((icon.Width / 2) - (i.Width / 2)) : icon.Margin;
c.DrawBitmap(i, new SKRect(x, icon.Margin, (x + i.Width) - (icon.Margin * 2), i.Height - icon.Margin),
new SKPaint { FilterQuality = SKFilterQuality.High, IsAntialias = true });
}
}
}

View File

@ -157,96 +157,92 @@ namespace FModel.Creator.Texts
{
_NAME_TEXT_SIZE = 45;
string text = icon.DisplayName;
if (!string.IsNullOrEmpty(text))
SKTextAlign side = SKTextAlign.Center;
int x = icon.Width / 2;
int y = _STARTER_TEXT_POSITION + _NAME_TEXT_SIZE;
switch ((EIconDesign)Properties.Settings.Default.AssetsIconDesign)
{
SKTextAlign side = SKTextAlign.Center;
int x = icon.Width / 2;
int y = _STARTER_TEXT_POSITION + _NAME_TEXT_SIZE;
switch ((EIconDesign)Properties.Settings.Default.AssetsIconDesign)
{
case EIconDesign.Mini:
{
_NAME_TEXT_SIZE = 47;
text = text.ToUpperInvariant();
break;
}
case EIconDesign.Flat:
{
_NAME_TEXT_SIZE = 47;
side = SKTextAlign.Right;
x = icon.Width - icon.Margin * 2;
break;
}
}
SKPaint namePaint = new SKPaint
{
IsAntialias = true,
FilterQuality = SKFilterQuality.High,
Typeface = TypeFaces.DisplayNameTypeface,
TextSize = _NAME_TEXT_SIZE,
Color = SKColors.White,
TextAlign = side
};
if ((ELanguage)Properties.Settings.Default.AssetsLanguage == ELanguage.Arabic)
{
SKShaper shaper = new SKShaper(namePaint.Typeface);
float shapedTextWidth;
while (true)
case EIconDesign.Mini:
{
SKShaper.Result shapedText = shaper.Shape(text, namePaint);
shapedTextWidth = shapedText.Points[^1].X + namePaint.TextSize / 2f;
if (shapedTextWidth > icon.Width - icon.Margin * 2)
{
namePaint.TextSize = _NAME_TEXT_SIZE -= 1;
}
else
{
break;
}
_NAME_TEXT_SIZE = 47;
text = text.ToUpperInvariant();
break;
}
case EIconDesign.Flat:
{
_NAME_TEXT_SIZE = 47;
side = SKTextAlign.Right;
x = icon.Width - icon.Margin * 2;
break;
}
}
c.DrawShapedText(shaper, text, (icon.Width - shapedTextWidth) / 2f, y, namePaint);
}
else
SKPaint namePaint = new SKPaint
{
IsAntialias = true,
FilterQuality = SKFilterQuality.High,
Typeface = TypeFaces.DisplayNameTypeface,
TextSize = _NAME_TEXT_SIZE,
Color = SKColors.White,
TextAlign = side
};
if ((ELanguage)Properties.Settings.Default.AssetsLanguage == ELanguage.Arabic)
{
SKShaper shaper = new SKShaper(namePaint.Typeface);
float shapedTextWidth;
while (true)
{
// resize if too long
while (namePaint.MeasureText(text) > icon.Width - icon.Margin * 2)
SKShaper.Result shapedText = shaper.Shape(text, namePaint);
shapedTextWidth = shapedText.Points[^1].X + namePaint.TextSize / 2f;
if (shapedTextWidth > icon.Width - icon.Margin * 2)
{
namePaint.TextSize = _NAME_TEXT_SIZE -= 1;
}
c.DrawText(text, x, y, namePaint);
else
{
break;
}
}
c.DrawShapedText(shaper, text, side == SKTextAlign.Right ? (x - shapedTextWidth) : ((icon.Width - shapedTextWidth) / 2f), y, namePaint);
}
else
{
// resize if too long
while (namePaint.MeasureText(text) > icon.Width - icon.Margin * 2)
{
namePaint.TextSize = _NAME_TEXT_SIZE -= 1;
}
c.DrawText(text, x, y, namePaint);
}
}
public static void DrawDescription(SKCanvas c, IBase icon)
{
if (!string.IsNullOrEmpty(icon.Description)) return;
int maxLine = 4;
_BOTTOM_TEXT_SIZE = 15;
string text = icon.Description;
ETextSide side = ETextSide.Center;
if (text != null)
switch ((EIconDesign)Properties.Settings.Default.AssetsIconDesign)
{
switch ((EIconDesign)Properties.Settings.Default.AssetsIconDesign)
{
case EIconDesign.Mini:
{
maxLine = 5;
_BOTTOM_TEXT_SIZE = icon.Margin;
text = text.ToUpper();
break;
}
case EIconDesign.Flat:
{
side = ETextSide.Right;
break;
}
}
case EIconDesign.Mini:
{
maxLine = 5;
_BOTTOM_TEXT_SIZE = icon.Margin;
text = text.ToUpper();
break;
}
case EIconDesign.Flat:
{
side = ETextSide.Right;
break;
}
}
SKPaint descriptionPaint = new SKPaint
@ -257,7 +253,7 @@ namespace FModel.Creator.Texts
TextSize = 13,
Color = SKColors.White,
};
// wrap if too long
Helper.DrawCenteredMultilineText(c, text, maxLine, icon, side,
new SKRect(icon.Margin, _STARTER_TEXT_POSITION + _NAME_TEXT_SIZE, icon.Width - icon.Margin, icon.Height - _BOTTOM_TEXT_SIZE),

View File

@ -8,8 +8,8 @@
<StartupObject>FModel.App</StartupObject>
<Authors>Asval</Authors>
<Company></Company>
<AssemblyVersion>3.1.1.2</AssemblyVersion>
<FileVersion>3.1.1.2</FileVersion>
<AssemblyVersion>3.1.1.3</AssemblyVersion>
<FileVersion>3.1.1.3</FileVersion>
<PackageIcon>FModel.ico</PackageIcon>
<PackageIconUrl />
<PackageProjectUrl>https://github.com/iAmAsval/FModel</PackageProjectUrl>

View File

@ -18,7 +18,7 @@ namespace FModel.Grabber.Paks
{
static class PaksGrabber
{
private static readonly Regex _pakFileRegex = new Regex(@"^FortniteGame/Content/Paks/.+\.pak$", RegexOptions.Compiled | RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOptions.CultureInvariant);
private static readonly Regex _pakFileRegex = new Regex(@"^FortniteGame/Content/Paks/pakchunk(?:0|10.*|\w+)-WindowsClient\.pak$", RegexOptions.Compiled | RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOptions.CultureInvariant);
public static async Task PopulateMenu()
{

View File

@ -960,6 +960,15 @@ namespace FModel.Properties {
}
}
/// <summary>
/// Recherche une chaîne localisée semblable à Fat.
/// </summary>
public static string Fat {
get {
return ResourceManager.GetString("Fat", resourceCulture);
}
}
/// <summary>
/// Recherche une chaîne localisée semblable à FBKP Files (*.fbkp)|*.fbkp|All Files (*.*)|*.*.
/// </summary>

View File

@ -821,4 +821,10 @@ Jetzt ist es die am häufigsten genutzte freie Software um mit Fortnite zu leake
<data name="SkipThisVersion" xml:space="preserve">
<value>Diese Version überspringen</value>
</data>
<data name="DrawStats" xml:space="preserve">
<value>Zeige Statistiken</value>
</data>
<data name="Fat" xml:space="preserve">
<value>Fett</value>
</data>
</root>

View File

@ -1031,4 +1031,10 @@ Ahora es el software gratuito más utilizado para filtrar en Fortnite.</value>
<data name="WithPosition" xml:space="preserve">
<value>Posición / Valor</value>
</data>
<data name="Fat" xml:space="preserve">
<value>Gordo</value>
</data>
<data name="DrawStats" xml:space="preserve">
<value>Mostrar estadísticas</value>
</data>
</root>

View File

@ -831,4 +831,7 @@ C'est maintenant le logiciel gratuit le plus utilisé pour leak sur Fortnite.</v
<data name="DrawStats" xml:space="preserve">
<value>Afficher les statistiques</value>
</data>
<data name="Fat" xml:space="preserve">
<value>Gros</value>
</data>
</root>

View File

@ -787,4 +787,10 @@ Col tempo sono state aggiunte nuove funzioni e molti altri utenti hanno comincia
<data name="MaybeLater" xml:space="preserve">
<value>Magari più avanti</value>
</data>
<data name="DrawStats" xml:space="preserve">
<value>Mostra statistiche</value>
</data>
<data name="Fat" xml:space="preserve">
<value>Grosso</value>
</data>
</root>

View File

@ -1085,4 +1085,7 @@ It's now the most used free software to leak on Fortnite.</value>
<data name="DrawStats" xml:space="preserve">
<value>Show statistics</value>
</data>
<data name="Fat" xml:space="preserve">
<value>Fat</value>
</data>
</root>

View File

@ -780,4 +780,10 @@
<data name="SkipThisVersion" xml:space="preserve">
<value>Пропустить эту версию</value>
</data>
<data name="DrawStats" xml:space="preserve">
<value>Посмотреть Статистику</value>
</data>
<data name="Fat" xml:space="preserve">
<value>Жирный</value>
</data>
</root>

View File

@ -790,4 +790,10 @@
<data name="SkipThisVersion" xml:space="preserve">
<value>跳过此版本</value>
</data>
<data name="DrawStats" xml:space="preserve">
<value>显示统计数据</value>
</data>
<data name="Fat" xml:space="preserve">
<value>厚</value>
</data>
</root>