public BaseIcon(IUExport export, string assetName, bool forceHR) : this() { if (export.GetExport <ObjectProperty>("Series") is ObjectProperty series) { Serie.GetRarity(this, series); } else if (Properties.Settings.Default.UseGameColors) // override default green { Rarity.GetInGameRarity(this, export.GetExport <EnumProperty>("Rarity")); // uncommon will be triggered by Rarity being null } else if (export.GetExport <EnumProperty>("Rarity") is EnumProperty rarity) { Rarity.GetHardCodedRarity(this, rarity); } if (export.GetExport <ObjectProperty>("HeroDefinition", "WeaponDefinition") is ObjectProperty itemDef) { LargeSmallImage.GetPreviewImage(this, itemDef, assetName, forceHR); } else if (export.GetExport <SoftObjectProperty>(forceHR ? "LargePreviewImage" : "SmallPreviewImage", forceHR ? "ItemDisplayAsset" : "SmallImage") is SoftObjectProperty previewImage) { LargeSmallImage.GetPreviewImage(this, previewImage); } else if (export.GetExport <ObjectProperty>("access_item") is ObjectProperty accessItem) { PakPackage p = Utils.GetPropertyPakPackage(accessItem.Value.Resource.OuterIndex.Resource.ObjectName.String); if (p.HasExport() && !p.Equals(default))
/// <summary> /// used to get low res icons ONLY /// </summary> /// <param name="export"></param> /// <param name="assetName"></param> public BaseIcon(IUExport export, string assetName) : this() { if (export.GetExport <ObjectProperty>("HeroDefinition", "WeaponDefinition") is ObjectProperty itemDef) { LargeSmallImage.GetPreviewImage(this, itemDef, assetName, false); } else if (export.GetExport <SoftObjectProperty>("SmallPreviewImage", "SmallImage") is SoftObjectProperty previewImage) { LargeSmallImage.GetPreviewImage(this, previewImage); } }
public BaseIcon(IUExport export, string assetName, bool forceHR) : this() { if (export.GetExport <ObjectProperty>("Series") is ObjectProperty series) { Serie.GetRarity(this, series); } else if (Properties.Settings.Default.UseGameColors) // override default green { Rarity.GetInGameRarity(this, export.GetExport <EnumProperty>("Rarity")); // uncommon will be triggered by Rarity being null } else if (export.GetExport <EnumProperty>("Rarity") is EnumProperty rarity) { Rarity.GetHardCodedRarity(this, rarity); } if (export.GetExport <ObjectProperty>("HeroDefinition", "WeaponDefinition") is ObjectProperty itemDef) { LargeSmallImage.GetPreviewImage(this, itemDef, assetName, forceHR); } else if (export.GetExport <SoftObjectProperty>(forceHR ? "LargePreviewImage" : "SmallPreviewImage", forceHR ? "ItemDisplayAsset" : "SmallImage") is SoftObjectProperty previewImage) { LargeSmallImage.GetPreviewImage(this, previewImage); } }
/// <summary> /// we draw based on the fist export type of the asset, no need to check others it's a waste of time /// i don't cache images because i don't wanna store a lot of SKCanvas in the memory /// </summary> /// <returns>true if an icon has been drawn</returns> public static bool TryDrawFortniteIcon(string assetPath, string exportType, IUExport export) { var d = new DirectoryInfo(assetPath); string assetName = d.Name; string assetFolder = d.Parent.Name; if (Text.TypeFaces.NeedReload(false)) { Text.TypeFaces = new Typefaces(); // when opening bundle creator settings without loading paks first } // please respect my wave if you wanna add a new exportType // Athena first, then Fort, thank you switch (exportType) { case "AthenaConsumableEmoteItemDefinition": case "AthenaSkyDiveContrailItemDefinition": case "AthenaLoadingScreenItemDefinition": case "AthenaVictoryPoseItemDefinition": case "AthenaPetCarrierItemDefinition": case "AthenaMusicPackItemDefinition": case "AthenaBattleBusItemDefinition": case "AthenaCharacterItemDefinition": case "AthenaBackpackItemDefinition": case "AthenaPickaxeItemDefinition": case "AthenaGadgetItemDefinition": case "AthenaGliderItemDefinition": case "AthenaDailyQuestDefinition": case "AthenaSprayItemDefinition": case "AthenaDanceItemDefinition": case "AthenaEmojiItemDefinition": case "AthenaItemWrapDefinition": case "AthenaToyItemDefinition": case "FortHeroType": case "FortTokenType": case "FortAbilityKit": case "FortWorkerType": case "FortBannerTokenType": case "FortVariantTokenType": case "FortFeatItemDefinition": case "FortStatItemDefinition": case "FortTrapItemDefinition": case "FortAmmoItemDefinition": case "FortQuestItemDefinition": case "FortBadgeItemDefinition": case "FortAwardItemDefinition": case "FortGadgetItemDefinition": case "FortPlaysetItemDefinition": case "FortGiftBoxItemDefinition": case "FortSpyTechItemDefinition": case "FortAccoladeItemDefinition": case "FortCardPackItemDefinition": case "FortDefenderItemDefinition": case "FortCurrencyItemDefinition": case "FortResourceItemDefinition": case "FortSchematicItemDefinition": case "FortIngredientItemDefinition": case "FortWeaponMeleeItemDefinition": case "FortContextTrapItemDefinition": case "FortPlayerPerksItemDefinition": case "FortPlaysetPropItemDefinition": case "FortHomebaseNodeItemDefinition": case "FortWeaponRangedItemDefinition": case "FortNeverPersistItemDefinition": case "FortPlaysetGrenadeItemDefinition": case "FortPersonalVehicleItemDefinition": case "FortHardcoreModifierItemDefinition": case "FortConsumableAccountItemDefinition": case "FortConversionControlItemDefinition": case "FortPersistentResourceItemDefinition": case "FortCampaignHeroLoadoutItemDefinition": case "FortConditionalResourceItemDefinition": case "FortChallengeBundleScheduleDefinition": case "FortWeaponMeleeDualWieldItemDefinition": case "FortDailyRewardScheduleTokenDefinition": { BaseIcon icon = new BaseIcon(export, exportType, ref assetName); int height = icon.Size + icon.AdditionalSize; using (var ret = new SKBitmap(icon.Size, height, SKColorType.Rgba8888, SKAlphaType.Premul)) using (var c = new SKCanvas(ret)) { if ((EIconDesign)Properties.Settings.Default.AssetsIconDesign != EIconDesign.NoBackground) { Rarity.DrawRarity(c, icon); } LargeSmallImage.DrawPreviewImage(c, icon); if ((EIconDesign)Properties.Settings.Default.AssetsIconDesign != EIconDesign.NoBackground) { if ((EIconDesign)Properties.Settings.Default.AssetsIconDesign != EIconDesign.NoText) { Text.DrawBackground(c, icon); Text.DrawDisplayName(c, icon); Text.DrawDescription(c, icon); if ((EIconDesign)Properties.Settings.Default.AssetsIconDesign != EIconDesign.Mini) { if (!icon.ShortDescription.Equals(icon.DisplayName) && !icon.ShortDescription.Equals(icon.Description)) { Text.DrawToBottom(c, icon, ETextSide.Left, icon.ShortDescription); } Text.DrawToBottom(c, icon, ETextSide.Right, icon.CosmeticSource); } } UserFacingFlag.DrawUserFacingFlags(c, icon); // has more things to show if (height > icon.Size) { Statistics.DrawStats(c, icon); } } Watermark.DrawWatermark(c); // watermark should only be applied on icons with width = 512 ImageBoxVm.imageBoxViewModel.Set(ret, assetName); } return(true); } case "FortMtxOfferData": { BaseOffer icon = new BaseOffer(export); using (var ret = new SKBitmap(icon.Size, icon.Size, SKColorType.Rgba8888, SKAlphaType.Premul)) using (var c = new SKCanvas(ret)) { if ((EIconDesign)Properties.Settings.Default.AssetsIconDesign != EIconDesign.NoBackground) { icon.DrawBackground(c); } icon.DrawImage(c); Watermark.DrawWatermark(c); // watermark should only be applied on icons with width = 512 ImageBoxVm.imageBoxViewModel.Set(ret, assetName); } return(true); } case "FortItemSeriesDefinition": { BaseIcon icon = new BaseIcon(); using (var ret = new SKBitmap(icon.Size, icon.Size, SKColorType.Rgba8888, SKAlphaType.Opaque)) using (var c = new SKCanvas(ret)) { Serie.GetRarity(icon, export); Rarity.DrawRarity(c, icon); Watermark.DrawWatermark(c); // watermark should only be applied on icons with width = 512 ImageBoxVm.imageBoxViewModel.Set(ret, assetName); } return(true); } case "PlaylistUserOptionEnum": case "PlaylistUserOptionBool": case "PlaylistUserOptionString": case "PlaylistUserOptionIntEnum": case "PlaylistUserOptionIntRange": case "PlaylistUserOptionColorEnum": case "PlaylistUserOptionFloatEnum": case "PlaylistUserOptionFloatRange": case "PlaylistUserOptionPrimaryAsset": case "PlaylistUserOptionCollisionProfileEnum": { BaseUserOption icon = new BaseUserOption(export); using (var ret = new SKBitmap(icon.Width, icon.Height, SKColorType.Rgba8888, SKAlphaType.Opaque)) using (var c = new SKCanvas(ret)) { icon.Draw(c); Watermark.DrawWatermark(c); // watermark should only be applied on icons with width = 512 ImageBoxVm.imageBoxViewModel.Set(ret, assetName); } return(true); } case "FortChallengeBundleItemDefinition": { BaseBundle icon = new BaseBundle(export, assetFolder); using (var ret = new SKBitmap(icon.Width, icon.HeaderHeight + icon.AdditionalSize, SKColorType.Rgba8888, SKAlphaType.Opaque)) using (var c = new SKCanvas(ret)) { HeaderStyle.DrawHeaderPaint(c, icon); HeaderStyle.DrawHeaderText(c, icon); QuestStyle.DrawQuests(c, icon); QuestStyle.DrawCompletionRewards(c, icon); ImageBoxVm.imageBoxViewModel.Set(ret, assetName); } return(true); } } return(false); }
/// <summary> /// i don't cache images because i don't wanna store a lot of SKCanvas in the memory /// </summary> /// <returns>true if an icon has been drawn</returns> public static bool TryDrawIcon(string assetPath, FName[] exportTypes, IUExport[] exports) { var d = new DirectoryInfo(assetPath); string assetName = d.Name; string assetFolder = d.Parent.Name; if (Text.TypeFaces.NeedReload(false)) { Text.TypeFaces = new Typefaces(); // when opening bundle creator settings without loading paks first } int index = Globals.Game.ActualGame == EGame.Valorant ? 1 : 0; string exportType = exportTypes.Length > index ? exportTypes[index].String : string.Empty; switch (exportType) { case "AthenaConsumableEmoteItemDefinition": case "AthenaSkyDiveContrailItemDefinition": case "AthenaLoadingScreenItemDefinition": case "AthenaVictoryPoseItemDefinition": case "AthenaPetCarrierItemDefinition": case "AthenaMusicPackItemDefinition": case "AthenaBattleBusItemDefinition": case "AthenaCharacterItemDefinition": case "AthenaBackpackItemDefinition": case "AthenaPickaxeItemDefinition": case "AthenaGadgetItemDefinition": case "AthenaGliderItemDefinition": case "AthenaDailyQuestDefinition": case "AthenaSprayItemDefinition": case "AthenaDanceItemDefinition": case "AthenaEmojiItemDefinition": case "AthenaItemWrapDefinition": case "AthenaToyItemDefinition": case "FortHeroType": case "FortTokenType": case "FortAbilityKit": case "FortWorkerType": case "RewardGraphToken": case "FortBannerTokenType": case "FortVariantTokenType": case "FortFeatItemDefinition": case "FortStatItemDefinition": case "FortTrapItemDefinition": case "FortAmmoItemDefinition": case "FortQuestItemDefinition": case "FortBadgeItemDefinition": case "FortAwardItemDefinition": case "FortGadgetItemDefinition": case "FortPlaysetItemDefinition": case "FortGiftBoxItemDefinition": case "FortSpyTechItemDefinition": case "FortAccoladeItemDefinition": case "FortCardPackItemDefinition": case "FortDefenderItemDefinition": case "FortCurrencyItemDefinition": case "FortResourceItemDefinition": case "FortSchematicItemDefinition": case "FortIngredientItemDefinition": case "FortAccountBuffItemDefinition": case "FortWeaponMeleeItemDefinition": case "FortContextTrapItemDefinition": case "FortPlayerPerksItemDefinition": case "FortPlaysetPropItemDefinition": case "FortHomebaseNodeItemDefinition": case "FortWeaponRangedItemDefinition": case "FortNeverPersistItemDefinition": case "FortPlaysetGrenadeItemDefinition": case "FortPersonalVehicleItemDefinition": case "FortHardcoreModifierItemDefinition": case "FortConsumableAccountItemDefinition": case "FortConversionControlItemDefinition": case "FortAccountBuffCreditItemDefinition": case "FortPersistentResourceItemDefinition": case "FortCampaignHeroLoadoutItemDefinition": case "FortConditionalResourceItemDefinition": case "FortChallengeBundleScheduleDefinition": case "FortWeaponMeleeDualWieldItemDefinition": case "FortDailyRewardScheduleTokenDefinition": { BaseIcon icon = new BaseIcon(exports[index], exportType, ref assetName); int height = icon.Size + icon.AdditionalSize; using (var ret = new SKBitmap(icon.Size, height, SKColorType.Rgba8888, SKAlphaType.Premul)) using (var c = new SKCanvas(ret)) { if ((EIconDesign)Properties.Settings.Default.AssetsIconDesign != EIconDesign.NoBackground) { Rarity.DrawRarity(c, icon); } LargeSmallImage.DrawPreviewImage(c, icon); if ((EIconDesign)Properties.Settings.Default.AssetsIconDesign != EIconDesign.NoBackground) { if ((EIconDesign)Properties.Settings.Default.AssetsIconDesign != EIconDesign.NoText) { Text.DrawBackground(c, icon); Text.DrawDisplayName(c, icon); Text.DrawDescription(c, icon); if ((EIconDesign)Properties.Settings.Default.AssetsIconDesign != EIconDesign.Mini) { if (!icon.ShortDescription.Equals(icon.DisplayName) && !icon.ShortDescription.Equals(icon.Description)) { Text.DrawToBottom(c, icon, ETextSide.Left, icon.ShortDescription); } Text.DrawToBottom(c, icon, ETextSide.Right, icon.CosmeticSource); } } UserFacingFlag.DrawUserFacingFlags(c, icon); // has more things to show if (height > icon.Size) { Statistics.DrawStats(c, icon); } } Watermark.DrawWatermark(c); // watermark should only be applied on icons with width = 512 ImageBoxVm.imageBoxViewModel.Set(ret, assetName); } return(true); } case "FortMtxOfferData": { BaseOffer icon = new BaseOffer(exports[index]); using (var ret = new SKBitmap(icon.Size, icon.Size, SKColorType.Rgba8888, SKAlphaType.Premul)) using (var c = new SKCanvas(ret)) { if ((EIconDesign)Properties.Settings.Default.AssetsIconDesign != EIconDesign.NoBackground) { icon.DrawBackground(c); } icon.DrawImage(c); Watermark.DrawWatermark(c); // watermark should only be applied on icons with width = 512 ImageBoxVm.imageBoxViewModel.Set(ret, assetName); } return(true); } case "FortItemSeriesDefinition": { BaseIcon icon = new BaseIcon(); using (var ret = new SKBitmap(icon.Size, icon.Size, SKColorType.Rgba8888, SKAlphaType.Opaque)) using (var c = new SKCanvas(ret)) { Serie.GetRarity(icon, exports[index]); Rarity.DrawRarity(c, icon); Watermark.DrawWatermark(c); // watermark should only be applied on icons with width = 512 ImageBoxVm.imageBoxViewModel.Set(ret, assetName); } return(true); } case "PlaylistUserOptionEnum": case "PlaylistUserOptionBool": case "PlaylistUserOptionString": case "PlaylistUserOptionIntEnum": case "PlaylistUserOptionIntRange": case "PlaylistUserOptionColorEnum": case "PlaylistUserOptionFloatEnum": case "PlaylistUserOptionFloatRange": case "PlaylistUserOptionPrimaryAsset": case "PlaylistUserOptionCollisionProfileEnum": { BaseUserOption icon = new BaseUserOption(exports[index]); using (var ret = new SKBitmap(icon.Width, icon.Height, SKColorType.Rgba8888, SKAlphaType.Opaque)) using (var c = new SKCanvas(ret)) { icon.Draw(c); Watermark.DrawWatermark(c); // watermark should only be applied on icons with width = 512 ImageBoxVm.imageBoxViewModel.Set(ret, assetName); } return(true); } case "FortChallengeBundleItemDefinition": { BaseBundle icon = new BaseBundle(exports[index], assetFolder); using (var ret = new SKBitmap(icon.Width, icon.HeaderHeight + icon.AdditionalSize, SKColorType.Rgba8888, SKAlphaType.Opaque)) using (var c = new SKCanvas(ret)) { HeaderStyle.DrawHeaderPaint(c, icon); HeaderStyle.DrawHeaderText(c, icon); QuestStyle.DrawQuests(c, icon); QuestStyle.DrawCompletionRewards(c, icon); ImageBoxVm.imageBoxViewModel.Set(ret, assetName); } return(true); } case "MapUIData": { BaseMapUIData icon = new BaseMapUIData(exports[index]); using (var ret = new SKBitmap(icon.Width, icon.Height, SKColorType.Rgba8888, SKAlphaType.Premul)) using (var c = new SKCanvas(ret)) { icon.Draw(c); ImageBoxVm.imageBoxViewModel.Set(ret, assetName); } return(true); } case "ArmorUIData": case "SprayUIData": case "ThemeUIData": case "ContractUIData": case "CurrencyUIData": case "GameModeUIData": case "CharacterUIData": case "SprayLevelUIData": case "EquippableUIData": case "PlayerCardUIData": case "Gun_UIData_Base_C": case "CharacterRoleUIData": case "EquippableSkinUIData": case "EquippableCharmUIData": case "EquippableSkinLevelUIData": case "EquippableSkinChromaUIData": case "EquippableCharmLevelUIData": { BaseUIData icon = new BaseUIData(exports, index); using (var ret = new SKBitmap(icon.Width + icon.AdditionalWidth, icon.Height, SKColorType.Rgba8888, SKAlphaType.Premul)) using (var c = new SKCanvas(ret)) { icon.Draw(c); Watermark.DrawWatermark(c); // watermark should only be applied on icons with width = 512 ImageBoxVm.imageBoxViewModel.Set(ret, assetName); } return(true); } case "StreamedVideoDataAsset": { if (Globals.Game.ActualGame == EGame.Valorant && exports[index].GetExport <StructProperty>("Uuid") is StructProperty s && s.Value is FGuid uuid) { Process.Start(new ProcessStartInfo { FileName = string.Format( "http://valorant.dyn.riotcdn.net/x/videos/release-01.05/{0}_default_universal.mp4", $"{uuid.A:x8}-{uuid.B >> 16:x4}-{uuid.B & 0xFFFF:x4}-{uuid.C >> 16:x4}-{uuid.C & 0xFFFF:x4}{uuid.D:x8}"), UseShellExecute = true }); } return(false); } } return(false); }
/// <summary> /// Order: /// 1. Rarity /// 2. Image /// 3. Text /// 1. DisplayName /// 2. Description /// 3. Misc /// 4. GameplayTags /// 1. order doesn't matter /// 2. the importance here is to get the description before gameplay tags /// </summary> public BaseIcon(IUExport export, string exportType, ref string assetName) : this() { // rarity if (export.GetExport <ObjectProperty>("Series") is ObjectProperty series) { Serie.GetRarity(this, series); } else if (Properties.Settings.Default.UseGameColors) // override default green { Rarity.GetInGameRarity(this, export.GetExport <EnumProperty>("Rarity")); // uncommon will be triggered by Rarity being null } else if (export.GetExport <EnumProperty>("Rarity") is EnumProperty rarity) { Rarity.GetHardCodedRarity(this, rarity); } // image if (Properties.Settings.Default.UseItemShopIcon && DisplayAssetImage.GetDisplayAssetImage(this, export.GetExport <SoftObjectProperty>("DisplayAssetPath"), ref assetName)) { } // ^^^^ will return false if image not found, if so, we try to get the normal icon else if (export.GetExport <ObjectProperty>("HeroDefinition", "WeaponDefinition") is ObjectProperty itemDef) { LargeSmallImage.GetPreviewImage(this, itemDef, assetName); } else if (export.GetExport <SoftObjectProperty>("LargePreviewImage", "SmallPreviewImage", "ItemDisplayAsset") is SoftObjectProperty previewImage) { LargeSmallImage.GetPreviewImage(this, previewImage); } else if (export.GetExport <StructProperty>("IconBrush") is StructProperty iconBrush) // abilities { LargeSmallImage.GetPreviewImage(this, iconBrush); } // text if (export.GetExport <TextProperty>("DisplayName", "DefaultHeaderText", "UIDisplayName") is TextProperty displayName) { DisplayName = Text.GetTextPropertyBase(displayName); } if (export.GetExport <TextProperty>("Description", "DefaultBodyText") is TextProperty description) { Description = Text.GetTextPropertyBase(description); } else if (export.GetExport <ArrayProperty>("Description") is ArrayProperty arrayDescription) // abilities { Description = Text.GetTextPropertyBase(arrayDescription); } if (export.GetExport <StructProperty>("MaxStackSize") is StructProperty maxStackSize) { ShortDescription = Text.GetMaxStackSize(maxStackSize); } else if (export.GetExport <TextProperty>("ShortDescription") is TextProperty shortDescription) { ShortDescription = Text.GetTextPropertyBase(shortDescription); } else if (exportType.Equals("AthenaItemWrapDefinition")) // if no ShortDescription it's most likely a wrap { ShortDescription = Localizations.GetLocalization("Fort.Cosmetics", "ItemWrapShortDescription", "Wrap"); } // gameplaytags if (export.GetExport <StructProperty>("GameplayTags") is StructProperty gameplayTags) { GameplayTag.GetGameplayTags(this, gameplayTags, exportType); } else if (export.GetExport <ObjectProperty>("cosmetic_item") is ObjectProperty cosmeticItem) // variants { CosmeticSource = cosmeticItem.Value.Resource.ObjectName.String; } if (export.GetExport <SoftObjectProperty>("AmmoData") is SoftObjectProperty ammoData) { Statistics.GetAmmoData(this, ammoData); } if (export.GetExport <StructProperty>("WeaponStatHandle") is StructProperty weaponStatHandle) { Statistics.GetWeaponStats(this, weaponStatHandle); } if (export.GetExport <ObjectProperty>("HeroGameplayDefinition") is ObjectProperty heroGameplayDefinition) { Statistics.GetHeroStats(this, heroGameplayDefinition); } /* Please do not add Schematics support because it takes way too much memory */ /* Thank the STW Dev Team for using a 5,69Mb file to get... Oh nvm, they all left */ AdditionalSize = 48 * Stats.Count; }
/// <summary> /// i don't cache images because i don't wanna store a lot of SKCanvas in the memory /// </summary> /// <returns>true if an icon has been drawn</returns> public static bool TryDrawIcon(string assetPath, FName[] exportTypes, IUExport[] exports) { var d = new DirectoryInfo(assetPath); string assetName = d.Name; string assetFolder = d.Parent.Name; if (Text.TypeFaces.NeedReload(false)) { Text.TypeFaces = new Typefaces(); // when opening bundle creator settings without loading paks first } int index; { if (Globals.Game.ActualGame == EGame.Valorant || Globals.Game.ActualGame == EGame.Spellbreak) { index = 1; } else { index = 0; } } string exportType; { if (exportTypes.Length > index && (exportTypes[index].String == "BlueprintGeneratedClass" || exportTypes[index].String == "FortWeaponAdditionalData_AudioVisualizerData" || exportTypes[index].String == "FortWeaponAdditionalData_SingleWieldState")) { index++; } exportType = exportTypes.Length > index ? exportTypes[index].String : string.Empty; } switch (exportType) { case "AthenaConsumableEmoteItemDefinition": case "AthenaSkyDiveContrailItemDefinition": case "AthenaLoadingScreenItemDefinition": case "AthenaVictoryPoseItemDefinition": case "AthenaPetCarrierItemDefinition": case "AthenaMusicPackItemDefinition": case "AthenaBattleBusItemDefinition": case "AthenaCharacterItemDefinition": case "FortAlterationItemDefinition": case "AthenaBackpackItemDefinition": case "AthenaPickaxeItemDefinition": case "AthenaGadgetItemDefinition": case "AthenaGliderItemDefinition": case "AthenaDailyQuestDefinition": case "FortBackpackItemDefinition": case "AthenaSprayItemDefinition": case "AthenaDanceItemDefinition": case "AthenaEmojiItemDefinition": case "AthenaItemWrapDefinition": case "AthenaToyItemDefinition": case "FortHeroType": case "FortTokenType": case "FortAbilityKit": case "FortWorkerType": case "RewardGraphToken": case "FortBannerTokenType": case "FortVariantTokenType": case "FortDecoItemDefinition": case "FortFeatItemDefinition": case "FortStatItemDefinition": case "FortTrapItemDefinition": case "FortAmmoItemDefinition": case "FortQuestItemDefinition": case "FortBadgeItemDefinition": case "FortAwardItemDefinition": case "FortGadgetItemDefinition": case "FortPlaysetItemDefinition": case "FortGiftBoxItemDefinition": case "FortSpyTechItemDefinition": case "FortOutpostItemDefinition": case "FortAccoladeItemDefinition": case "FortCardPackItemDefinition": case "FortDefenderItemDefinition": case "FortCurrencyItemDefinition": case "FortResourceItemDefinition": case "FortCodeTokenItemDefinition": case "FortSchematicItemDefinition": case "FortExpeditionItemDefinition": case "FortIngredientItemDefinition": case "FortAccountBuffItemDefinition": case "FortWeaponMeleeItemDefinition": case "FortContextTrapItemDefinition": case "FortPlayerPerksItemDefinition": case "FortPlaysetPropItemDefinition": case "FortHomebaseNodeItemDefinition": case "FortWeaponRangedItemDefinition": case "FortNeverPersistItemDefinition": case "RadioContentSourceItemDefinition": case "FortPlaysetGrenadeItemDefinition": case "FortPersonalVehicleItemDefinition": case "FortGameplayModifierItemDefinition": case "FortHardcoreModifierItemDefinition": case "FortConsumableAccountItemDefinition": case "FortConversionControlItemDefinition": case "FortAccountBuffCreditItemDefinition": case "FortEventCurrencyItemDefinitionRedir": case "FortPersistentResourceItemDefinition": case "FortHomebaseBannerIconItemDefinition": case "FortCampaignHeroLoadoutItemDefinition": case "FortConditionalResourceItemDefinition": case "FortChallengeBundleScheduleDefinition": case "FortWeaponMeleeDualWieldItemDefinition": case "FortDailyRewardScheduleTokenDefinition": case "FortCreativeRealEstatePlotItemDefinition": { BaseIcon icon = new BaseIcon(exports[index], exportType, ref assetName); int height = icon.Size + icon.AdditionalSize; using (var ret = new SKBitmap(icon.Size, height, SKColorType.Rgba8888, SKAlphaType.Premul)) using (var c = new SKCanvas(ret)) { if ((EIconDesign)Properties.Settings.Default.AssetsIconDesign != EIconDesign.NoBackground) { Rarity.DrawRarity(c, icon); } LargeSmallImage.DrawPreviewImage(c, icon); if ((EIconDesign)Properties.Settings.Default.AssetsIconDesign != EIconDesign.NoBackground) { if ((EIconDesign)Properties.Settings.Default.AssetsIconDesign != EIconDesign.NoText) { Text.DrawBackground(c, icon); Text.DrawDisplayName(c, icon); Text.DrawDescription(c, icon); if ((EIconDesign)Properties.Settings.Default.AssetsIconDesign != EIconDesign.Mini) { if (!icon.ShortDescription.Equals(icon.DisplayName) && !icon.ShortDescription.Equals(icon.Description)) { Text.DrawToBottom(c, icon, ETextSide.Left, icon.ShortDescription); } Text.DrawToBottom(c, icon, ETextSide.Right, icon.CosmeticSource); } } UserFacingFlag.DrawUserFacingFlags(c, icon); // has more things to show if (height > icon.Size) { Statistics.DrawStats(c, icon); } } Watermark.DrawWatermark(c); // watermark should only be applied on icons with width = 512 ImageBoxVm.imageBoxViewModel.Set(ret, assetName); } return(true); } case "FortPlaylistAthena": { BasePlaylist icon = new BasePlaylist(exports[index]); using (var ret = new SKBitmap(icon.Width, icon.Height, SKColorType.Rgba8888, SKAlphaType.Premul)) using (var c = new SKCanvas(ret)) { if ((EIconDesign)Properties.Settings.Default.AssetsIconDesign != EIconDesign.NoBackground) { Rarity.DrawRarity(c, icon); } LargeSmallImage.DrawNotStretchedPreviewImage(c, icon); if ((EIconDesign)Properties.Settings.Default.AssetsIconDesign != EIconDesign.NoBackground) { if ((EIconDesign)Properties.Settings.Default.AssetsIconDesign != EIconDesign.NoText) { Text.DrawBackground(c, icon); Text.DrawDisplayName(c, icon); Text.DrawDescription(c, icon); } } // Watermark.DrawWatermark(c); // boi why would you watermark something you don't own ¯\_(ツ)_/¯ ImageBoxVm.imageBoxViewModel.Set(ret, assetName); } return(true); } case "AthenaSeasonItemDefinition": { BaseSeason icon = new BaseSeason(exports[index], assetFolder); using (var ret = new SKBitmap(icon.Width, icon.HeaderHeight + icon.AdditionalSize, SKColorType.Rgba8888, SKAlphaType.Opaque)) using (var c = new SKCanvas(ret)) { icon.Draw(c); ImageBoxVm.imageBoxViewModel.Set(ret, assetName); } return(true); } case "FortMtxOfferData": { BaseOffer icon = new BaseOffer(exports[index]); using (var ret = new SKBitmap(icon.Size, icon.Size, SKColorType.Rgba8888, SKAlphaType.Premul)) using (var c = new SKCanvas(ret)) { if ((EIconDesign)Properties.Settings.Default.AssetsIconDesign != EIconDesign.NoBackground) { icon.DrawBackground(c); } icon.DrawImage(c); Watermark.DrawWatermark(c); // watermark should only be applied on icons with width = 512 ImageBoxVm.imageBoxViewModel.Set(ret, assetName); } return(true); } case "MaterialInstanceConstant": { if (assetFolder.Equals("MI_OfferImages")) { BaseOfferMaterial icon = new BaseOfferMaterial(exports[index]); using (var ret = new SKBitmap(icon.Size, icon.Size, SKColorType.Rgba8888, SKAlphaType.Premul)) using (var c = new SKCanvas(ret)) { if ((EIconDesign)Properties.Settings.Default.AssetsIconDesign != EIconDesign.NoBackground) { icon.DrawBackground(c); } icon.DrawImage(c); Watermark.DrawWatermark(c); // watermark should only be applied on icons with width = 512 ImageBoxVm.imageBoxViewModel.Set(ret, assetName); } return(true); } return(false); } case "FortItemSeriesDefinition": { BaseIcon icon = new BaseIcon(); using (var ret = new SKBitmap(icon.Size, icon.Size, SKColorType.Rgba8888, SKAlphaType.Opaque)) using (var c = new SKCanvas(ret)) { Serie.GetRarity(icon, exports[index]); Rarity.DrawRarity(c, icon); Watermark.DrawWatermark(c); // watermark should only be applied on icons with width = 512 ImageBoxVm.imageBoxViewModel.Set(ret, assetName); } return(true); } case "PlaylistUserOptionEnum": case "PlaylistUserOptionBool": case "PlaylistUserOptionString": case "PlaylistUserOptionIntEnum": case "PlaylistUserOptionIntRange": case "PlaylistUserOptionColorEnum": case "PlaylistUserOptionFloatEnum": case "PlaylistUserOptionFloatRange": case "PlaylistUserOptionPrimaryAsset": case "PlaylistUserOptionCollisionProfileEnum": { BaseUserOption icon = new BaseUserOption(exports[index]); using (var ret = new SKBitmap(icon.Width, icon.Height, SKColorType.Rgba8888, SKAlphaType.Opaque)) using (var c = new SKCanvas(ret)) { icon.Draw(c); Watermark.DrawWatermark(c); // watermark should only be applied on icons with width = 512 ImageBoxVm.imageBoxViewModel.Set(ret, assetName); } return(true); } case "FortChallengeBundleItemDefinition": { BaseBundle icon = new BaseBundle(exports[index], assetFolder); using (var ret = new SKBitmap(icon.Width, icon.HeaderHeight + icon.AdditionalSize, SKColorType.Rgba8888, SKAlphaType.Opaque)) using (var c = new SKCanvas(ret)) { HeaderStyle.DrawHeaderPaint(c, icon); HeaderStyle.DrawHeaderText(c, icon); QuestStyle.DrawQuests(c, icon); QuestStyle.DrawCompletionRewards(c, icon); ImageBoxVm.imageBoxViewModel.Set(ret, assetName); } return(true); } case "FortItemAccessTokenType": { BaseItemAccess icon = new BaseItemAccess(exports[index]); using (var ret = new SKBitmap(icon.Size, icon.Size, SKColorType.Rgba8888, SKAlphaType.Opaque)) using (var c = new SKCanvas(ret)) { icon.Draw(c); Watermark.DrawWatermark(c); // watermark should only be applied on icons with width = 512 ImageBoxVm.imageBoxViewModel.Set(ret, assetName); } return(true); } case "MapUIData": { BaseMapUIData icon = new BaseMapUIData(exports[index]); using (var ret = new SKBitmap(icon.Width, icon.Height, SKColorType.Rgba8888, SKAlphaType.Premul)) using (var c = new SKCanvas(ret)) { icon.Draw(c); ImageBoxVm.imageBoxViewModel.Set(ret, assetName); } return(true); } case "ArmorUIData": case "SprayUIData": case "ThemeUIData": case "ContractUIData": case "CurrencyUIData": case "GameModeUIData": case "CharacterUIData": case "SprayLevelUIData": case "EquippableUIData": case "PlayerCardUIData": case "Gun_UIData_Base_C": case "CharacterRoleUIData": case "EquippableSkinUIData": case "EquippableCharmUIData": case "EquippableSkinLevelUIData": case "EquippableSkinChromaUIData": case "EquippableCharmLevelUIData": { BaseUIData icon = new BaseUIData(exports, index); using (var ret = new SKBitmap(icon.Width + icon.AdditionalWidth, icon.Height, SKColorType.Rgba8888, SKAlphaType.Premul)) using (var c = new SKCanvas(ret)) { icon.Draw(c); Watermark.DrawWatermark(c); // watermark should only be applied on icons with width = 512 ImageBoxVm.imageBoxViewModel.Set(ret, assetName); } return(true); } //case "StreamedVideoDataAsset": // must find a way to automatically gets the right version in the url // { // if (Globals.Game.ActualGame == EGame.Valorant && exports[index].GetExport<StructProperty>("Uuid") is StructProperty s && s.Value is FGuid uuid) // { // Process.Start(new ProcessStartInfo // { // FileName = string.Format( // "http://valorant.dyn.riotcdn.net/x/videos/release-01.05/{0}_default_universal.mp4", // $"{uuid.A:x8}-{uuid.B >> 16:x4}-{uuid.B & 0xFFFF:x4}-{uuid.C >> 16:x4}-{uuid.C & 0xFFFF:x4}{uuid.D:x8}"), // UseShellExecute = true // }); // } // return false; // } case "GQuest": case "GAccolade": case "GCosmeticSkin": case "GCharacterPerk": case "GCosmeticTitle": case "GCosmeticBadge": case "GCosmeticEmote": case "GCosmeticTriumph": case "GCosmeticRunTrail": case "GCosmeticArtifact": case "GCosmeticDropTrail": { BaseGCosmetic icon = new BaseGCosmetic(exports[index], exportType); using (var ret = new SKBitmap(icon.Width, icon.Height, SKColorType.Rgba8888, SKAlphaType.Premul)) using (var c = new SKCanvas(ret)) { if ((EIconDesign)Properties.Settings.Default.AssetsIconDesign == EIconDesign.Flat) { icon.Draw(c); } else if ((EIconDesign)Properties.Settings.Default.AssetsIconDesign != EIconDesign.NoBackground) { Rarity.DrawRarity(c, icon); } LargeSmallImage.DrawPreviewImage(c, icon); if ((EIconDesign)Properties.Settings.Default.AssetsIconDesign != EIconDesign.NoBackground && (EIconDesign)Properties.Settings.Default.AssetsIconDesign != EIconDesign.NoText) { Text.DrawBackground(c, icon); Text.DrawDisplayName(c, icon); Text.DrawDescription(c, icon); } Watermark.DrawWatermark(c); // watermark should only be applied on icons with width = 512 ImageBoxVm.imageBoxViewModel.Set(ret, assetName); } return(true); } case "GCosmeticCard": { BaseGCosmetic icon = new BaseGCosmetic(exports[index], exportType); using (var ret = new SKBitmap(icon.Width, icon.Height, SKColorType.Rgba8888, SKAlphaType.Premul)) using (var c = new SKCanvas(ret)) { if ((EIconDesign)Properties.Settings.Default.AssetsIconDesign == EIconDesign.Flat) { icon.Draw(c); } else { if ((EIconDesign)Properties.Settings.Default.AssetsIconDesign != EIconDesign.NoBackground) { Rarity.DrawRarity(c, icon); } } LargeSmallImage.DrawPreviewImage(c, icon); if ((EIconDesign)Properties.Settings.Default.AssetsIconDesign != EIconDesign.NoBackground) { if ((EIconDesign)Properties.Settings.Default.AssetsIconDesign != EIconDesign.NoText) { Text.DrawBackground(c, icon); Text.DrawDisplayName(c, icon); Text.DrawDescription(c, icon); } } ImageBoxVm.imageBoxViewModel.Set(ret, assetName); } return(true); } // Battle Breakers case "WExpGenericAccountItemDefinition": { BaseBBDefinition icon = new BaseBBDefinition(exports[index], exportType); using (var ret = new SKBitmap(icon.Width, icon.Height, SKColorType.Rgba8888, SKAlphaType.Premul)) using (var c = new SKCanvas(ret)) { if ((EIconDesign)Properties.Settings.Default.AssetsIconDesign != EIconDesign.NoBackground) { if (icon.RarityBackgroundImage != null) { c.DrawBitmap(icon.RarityBackgroundImage, new SKRect(icon.Margin, icon.Margin, icon.Width - icon.Margin, icon.Height - icon.Margin), new SKPaint { FilterQuality = SKFilterQuality.High, IsAntialias = true }); } else { Rarity.DrawRarity(c, icon); } } LargeSmallImage.DrawPreviewImage(c, icon); if ((EIconDesign)Properties.Settings.Default.AssetsIconDesign != EIconDesign.NoBackground) { if ((EIconDesign)Properties.Settings.Default.AssetsIconDesign != EIconDesign.NoText) { Text.DrawBackground(c, icon); Text.DrawDisplayName(c, icon); Text.DrawDescription(c, icon); } } Watermark.DrawWatermark(c); // watermark should only be applied on icons with width = 512 ImageBoxVm.imageBoxViewModel.Set(ret, assetName); } return(true); } } return(false); }