diff --git a/Documentation/UPGRADING.md b/Documentation/UPGRADING.md index 7d622e9..3066218 100644 --- a/Documentation/UPGRADING.md +++ b/Documentation/UPGRADING.md @@ -19,12 +19,12 @@ All calls into async functions on the new mod.io Unity Plugin provide a single c This provides a much clearer calling convention and gives a guarantee of one operation completion - one callback invocation, rather than the two callbacks required by async functions in mod.io Unity V1. Here is an example of the usage with a callback and an await: -```c# +```csharp void CallbackExample() { - ModIOUnity.GetMods(filter, (Result result, ModPage modPage)=> + ModIOUnity.GetMods(filter, (ResultAnd response)=> { - if (result.Succeeded()) + if (response.result.Succeeded()) { // Success } @@ -47,8 +47,8 @@ async void AsyncExample() ## Initializing the plugin Initialization in mod.io Unity V1 was handled mostly statically, pulling the details from the `Resources/modio_settings` asset during static initialization. Optionally, a developer could set the user data directory by calling `UserDataStorage.SetActiveUser()` as seen in the sample below. -```c# -void modioUnityV1Example() +```csharp +void ModioUnityV1Example() { // Optional (Sets the user data directory) string userProfileIdentifier = "local_game_user_id"; // Local User Account Identifier @@ -58,7 +58,7 @@ void modioUnityV1Example() Apart from this, there are no initialization possibilities in mod.io Unity V1. For the new mod.io Unity Plugin, we have kept an automatic initialization option that pulls the data from the `Resources/mod.io/config` asset, similar to the function of mod.io Unity V1. However, there are also explicit initialization methods and shutdown methods that can be utilized if automatic initialization is disabled in the config asset. -```c# +```csharp void InitializationExample() { string userProfileIdentifier = "local_game_user_id"; // Local User Account Identifier @@ -74,8 +74,8 @@ mod.io Unity V1 built the synchronization of an authenticated user's subscriptio This has not changed in the new mod.io Unity Plugin, but the process of keeping that data synchronized is much easier, along with fetching the data for the subscribed mods. Adding, synchronizing, and retrieving subscription data in mod.io Unity V1 involves chaining multiple calls together. -```c# -void modioUnityV1Example() +```csharp +void ModioUnityV1Example() { int newSubModId = 123; int newUnsubModId = 456; @@ -102,35 +102,23 @@ void modioUnityV1Example() ``` The new mod.io Unity Plugin streamlines this process by reducing the need for callback chaining, synchronizing immediately for local changes, and removing the need to handle the mod ids. -[FetchUpdates()](https://sdkdocs.mod.io/unity/class_mod_i_o_1_1_mod_i_o_unity.html#aab9e3eb7697f13e4e96273ac50ab79af) is the single synchronization function on the interface, handling all synchronization actions. -```c# +[FetchUpdates()](https://sdkdocs.mod.io/unity/class_mod_i_o_1_1_mod_i_o_unity.html#aab9e3eb7697f13e4e96273ac50ab79af) is the single synchronization function on the interface, handling all synchronization actions and only needing to be run generally once per session (Ideally after you Initialize the plugin). +```csharp void Example() { - int newSubModId = 123; - int newUnsubModId = 456; - - // Pushes a subscribe attempt directly to the server, returning an error on failure - ModIOUnity.SubscribeToMod(newSubModId, - (Result result) => { /* callback code */ }); - // Pushes an unsubscribe attempt directly to the server, returning an error on failure - ModIOUnity.UnsubscribeFromMod(newUnsubModId, - (Result result) => { /* callback code */ }); - // Synchronizes the local and server data ModIOUnity.FetchUpdates( - (Result result) => { /* callback code */ }; - // Get Subscribed mod data - SubscribedMod[] subscribedMods = ModIOUnity.GetSubscribedMods(out Result result); + (Result result) => { /* callback code */ }); } ``` Furthermore, the subscribe and unsubscribe operations automatically flag the mod as requiring installation/uninstallation, a responsibility placed on the consumer in mod.io Unity V1. (See below) ## Listing the User's Installed Mods -Like in mod.io Unity V1, the new mod.io Unity Plugin allows the sharing of installed mods across multiple users to save network traffic and storage space. +Likewise in mod.io Unity V1, the new mod.io Unity Plugin allows the sharing of installed mods across multiple users to save network traffic and storage space. mod.io Unity V1 didn't have a direct method of retrieving the mods installed for the current user. There are a variety of different methods that need to be chained together to retrieve a complete picture of the installed mod data. -```c# -void modioUnityV1Example() +```csharp +void ModioUnityV1Example() { // Retrieves a de-identified list of mod directories for mods the user has "enabled" bool onlyEnabledMods = true; @@ -157,7 +145,7 @@ void modioUnityV1Example() ``` The new mod.io Unity Plugin makes this much simpler, giving you all the information in a single call, returning a [UserInstalledMod](https://sdkdocs.mod.io/unity/struct_mod_i_o_1_1_user_installed_mod.html) array (and a `Result`). -```c# +```csharp void Example() { UserInstalledMod[] mods = ModIOUnity.GetInstalledModsForUser(out Result result); @@ -168,8 +156,8 @@ void Example() The new mod.io Unity Plugin has the business rules of "Subscription = install and update" built into it, such that the download, extract, and uninstall processes are managed automatically by the [Mod Management Loop](https://sdkdocs.mod.io/unity/class_mod_i_o_1_1_mod_i_o_unity.html#aabba78ef1b55e60e2334cc1ba6faf1c3), a process that runs asynchronously to detect changes to the subscriptions and automate mod data management. mod.io Unity V1 handled the installation and uninstallation of mods in the ModBrowser code, but any developer looking to exclude that code or understand the installation process had a more difficult time. -```c# -void modioUnityV1Example() +```csharp +void ModioUnityV1Example() { /// === Add a new subscription and install === int newSubModId = 123; @@ -228,7 +216,7 @@ This is one of the key processes that has been streamlined in the new mod.io Uni A call to [ModIOUnity.EnableModManagement](https://sdkdocs.mod.io/unity/class_mod_i_o_1_1_mod_i_o_unity.html#aabba78ef1b55e60e2334cc1ba6faf1c3) starts the background process of monitoring for subscription changes, and takes a (nullable) callback for mod management events. This can be disabled at any point with a call to [ModIOUnity.DisableModManagement](https://sdkdocs.mod.io/unity/class_mod_i_o_1_1_mod_i_o_unity.html#a7eda62ae267aa409b6408fd60ed16429). Any changes invoked locally, and any changes retrieved with [ModIOUnity.FetchUpdates](https://sdkdocs.mod.io/unity/class_mod_i_o_1_1_mod_i_o_unity.html#aab9e3eb7697f13e4e96273ac50ab79af) are automatically queued and actioned. -```c# +```csharp void Example() { ModManagementEventDelegate eventDelegate = (ModManagementEventType eventType, ModId modId, Result eventResult) => { /* handle event */}; @@ -246,10 +234,6 @@ void Example() // Pushes the unsubcribe action to the server and flags it for uninstallation ModIOUnity.UnsubscribeFromMod(newUnsubModId, (Result result) => /* callback code */); - // === Fetch remote data and fix installation state === - // Synchronizes local and server data, flagging install/uninstall operations as required - ModIOUnity.FetchUpdates((Result result) => { /* callback code */ }); - // Ends monitoring for changes and disables downloading/extracting/deleting of mod data ModIOUnity.DisableModManagement(); } @@ -263,18 +247,32 @@ methods, such as Steam or Xbox. ### Email Authentication In the V1 Plugin you can authenticate via email in the following way: -```c# -// TODO: EXAMPLE OF EMAIL AUTH IN V1 +```csharp +void modioUnityV1_RequestEmailCode(string playerEmail) +{ + ModIO.APIClient.SendSecurityCode( + playerEmail, + (APIMessage apiMessage) => { /* callback code */ }, + (WebRequestError error) => { /* callback code */ }); +} + +void modioUnityV1_SubmitSecurityCode(string userSecurityCode) +{ + ModIO.UserAccountManagement.AuthenticateWithSecurityCode( + userSecurityCode, + (UserProfile userProfile) => { /* callback code */ }, + (WebRequestError error) => { /* callback code */ }); +} ``` In the new Plugin you can do it like so: -```c# -async void RequestEmailCode() +```csharp +async void RequestEmailCode(string playerEmail) { - Result result = await ModIOUnityAsync.RequestAuthenticationEmail("johndoe@gmail.com"); + Result result = await ModIOUnityAsync.RequestAuthenticationEmail(playerEmail); if (result.Succeeded()) { - Debug.Log("Succeeded to send security code"); + Debug.Log("Succeeded in sending security code"); } else { @@ -282,7 +280,7 @@ async void RequestEmailCode() } } -async void SubmitCode(string userSecurityCode) +async void SubmitSecurityCode(string userSecurityCode) { Result result = await ModIOUnityAsync.SubmitEmailSecurityCode(userSecurityCode); @@ -300,7 +298,7 @@ async void SubmitCode(string userSecurityCode) ### Third party Authentication In the V1 Plugin you can authenticate a user with a third party service like Steam: -```c# +```csharp UserAccountManagement.AuthenticateWithSteamEncryptedAppTicket(pTicket, pcbTicket, hasUserAcceptedTerms, @@ -308,7 +306,7 @@ UserAccountManagement.AuthenticateWithSteamEncryptedAppTicket(pTicket, onError); ``` In the new Plugin you can use the following: -```c# +```csharp ModIOUnity.AuthenticateUserViaSteam(token, email, termsHash, callback); ``` (Note you can use `ModIOUnityAsync` to `await` instead.) @@ -319,7 +317,7 @@ This is to ensure users view and accept the terms of use. Here is a complete example getting the TOS hash and Authenticating via Steam: -```c# +```csharp // Use this to cache the TOS we receive TermsOfUse termsOfUse; diff --git a/Editor/ModIO.EditorCode/EditorMenu.cs b/Editor/ModIO.EditorCode/EditorMenu.cs index b69c157..fe98ff5 100644 --- a/Editor/ModIO.EditorCode/EditorMenu.cs +++ b/Editor/ModIO.EditorCode/EditorMenu.cs @@ -53,7 +53,7 @@ internal static SettingsAsset GetConfigAsset() //Find properties and apply default values SerializedProperty serverSettingsProperty = so.FindProperty("serverSettings"); - serverSettingsProperty.FindPropertyRelative("serverURL").stringValue = "https://api.mod.io/v1";; + serverSettingsProperty.FindPropertyRelative("serverURL").stringValue = SettingsAssetEditor.GetURLProduction(0); serverSettingsProperty.FindPropertyRelative("languageCode").stringValue = "en"; //Apply new values while ensuring the user cannot use "undo" to erase the initial values. diff --git a/Editor/ModIO.EditorCode/SettingsAssetEditor.cs b/Editor/ModIO.EditorCode/SettingsAssetEditor.cs index 1eed06a..7bc5791 100644 --- a/Editor/ModIO.EditorCode/SettingsAssetEditor.cs +++ b/Editor/ModIO.EditorCode/SettingsAssetEditor.cs @@ -1,4 +1,5 @@ #if UNITY_EDITOR +using System.Text.RegularExpressions; using ModIO.Implementation; using UnityEditor; using UnityEngine; @@ -39,64 +40,91 @@ public override void OnInspectorGUI() labelStyle.normal.textColor = Color.white; EditorGUILayout.LabelField("Server Settings", labelStyle); - if(myTarget.serverSettings.gameId == 0 || string.IsNullOrWhiteSpace(myTarget.serverSettings.gameKey)) - { - EditorGUILayout.HelpBox("Once you've created a game profile on mod.io (or test.mod.io) " - + "you can input the game ID and Key below in order for the plugin " - + "to retrieve mods and information associated to your game.", - MessageType.Info); - } - EditorGUILayout.PropertyField(serverURL, new GUIContent("Server URL")); + EditorGUILayout.Space(); + EditorGUILayout.PropertyField(gameId,new GUIContent("Game ID")); gameKey.stringValue = EditorGUILayout.PasswordField("API Key", gameKey.stringValue); - EditorGUILayout.PropertyField(languageCode, new GUIContent("Language code")); + if(myTarget.serverSettings.gameId == 0 || string.IsNullOrWhiteSpace(myTarget.serverSettings.gameKey)) + { + EditorGUILayout.Space(); - EditorGUILayout.Space(); - EditorGUILayout.Space(); + EditorGUILayout.HelpBox( + "Once you've created a game profile on mod.io (or test.mod.io), enter your game ID and API key above in order for the plugin to retrieve mods and information associated with your game.", + MessageType.Info + ); - EditorGUILayout.BeginHorizontal(); - if(GUILayout.Button("Insert URL for Test API")) - { - serverURL.stringValue = "https://api.test.mod.io/v1"; + EditorGUILayout.Space(); - //remove focus from other fields - GUI.FocusControl(null); - } - if(GUILayout.Button("Insert URL for Production API")) - { - serverURL.stringValue = $"https://g-{gameId.intValue}.modapi.io/v1"; - //remove focus from other fields - GUI.FocusControl(null); + EditorGUILayout.BeginHorizontal(); + + EditorGUILayout.PrefixLabel("Locate ID and API Key"); + + if (GUILayout.Button("test.mod.io")) + { + SetURLTest(); + Application.OpenURL("https://test.mod.io/apikey"); + } + + if (GUILayout.Button("mod.io")) + { + SetURLProduction(); + Application.OpenURL("https://mod.io/apikey"); + } + + EditorGUILayout.EndHorizontal(); + + EditorGUILayout.Space(); + } else { + EditorGUILayout.Space(); + + EditorGUILayout.PropertyField(serverURL, new GUIContent("Server URL")); + EditorGUILayout.PropertyField(languageCode, new GUIContent("Language code")); + + EditorGUILayout.Space(); + + EditorGUILayout.BeginHorizontal(); + + if (GUILayout.Button("Insert URL for Test API")) + SetURLTest(); + + if (GUILayout.Button("Insert URL for Production API")) + SetURLProduction(); + + EditorGUILayout.EndHorizontal(); } - EditorGUILayout.EndHorizontal(); - - if(GUILayout.Button("Locate ID and API Key")) - { - if(myTarget.serverSettings.serverURL == "https://api.test.mod.io/v1") - { - Application.OpenURL("https://test.mod.io/apikey"); - } - else - { - Application.OpenURL("https://mod.io/apikey"); - } - } - // If the gameId has been changed, update the url - if(gameId.intValue != previousGameId) - { - if(myTarget.serverSettings.serverURL != "https://api.test.mod.io/v1" - && myTarget.serverSettings.serverURL != "https://api-staging.moddemo.io/v1") - { - serverURL.stringValue = $"https://g-{gameId.intValue}.modapi.io/v1"; - } + // If the gameId has been changed, update the url + if (gameId.intValue != previousGameId) + { + if (IsURLProduction(serverURL.stringValue)) + serverURL.stringValue = GetURLProduction(gameId.intValue); + previousGameId = gameId.intValue; } //Save the new values serializedObject.ApplyModifiedProperties(); + + return; + + void SetURLProduction() + { + serverURL.stringValue = GetURLProduction(gameId.intValue); + GUI.FocusControl(null); + } + + void SetURLTest() + { + serverURL.stringValue = GetURLTest(gameId.intValue); + GUI.FocusControl(null); + } } + + internal static string GetURLProduction(int gameId) => $"https://g-{gameId}.modapi.io/v1"; + static string GetURLTest(int gameId) => "https://api.test.mod.io/v1"; + + static bool IsURLProduction(string url) => Regex.IsMatch(url, @"https:\/\/g-\d*.modapi.io\/v1"); } #endif diff --git a/English.txt b/English.txt index 49df4b7..9b6e31d 100644 --- a/English.txt +++ b/English.txt @@ -228,13 +228,13 @@ msgid "Are you sure you'd like to log out?" msgstr "Are you sure you'd like to log out?" msgid "LogOutMessage" -msgstr "This will log you out of your mod.io account. You can still browse the mods but you will need to log back in to subscribe to a mod. Any ongoing downloads/installations will also be stopped.\n\nDo you wish to continue?" +msgstr "This will log you out of your mod.io account. You can still browse the mods but you will need to log back in to subscribe to a mod. Any ongoing downloads/installations will also be stopped.

Do you wish to continue?" msgid "Something went wrong!" msgstr "Something went wrong!" msgid "We were unable to connect to the mod.io server. Check you have a stable internet connection and try again." -msgstr "We were unable to connect to the mod.io server. Check you have a stable internet connection and try again." +msgstr "Unfortunately we are unable to connect you to the mod.io server.

Please check if you have a stable internet connection or try again in a few minutes." msgid "Terms of use" msgstr "Terms of use" @@ -610,3 +610,51 @@ msgstr "Connect with device" msgid "Failed to connect account" msgstr "Failed to connect account" + +msgid "{tokenCount} {tokenType}" +msgstr "{tokenCount} {tokenType}" + +msgid "Free" +msgstr "Free" + +msgid "Buy Now" +msgstr "Buy Now" + +msgid "Confirm purchase" +msgstr "Confirm purchase" + +msgid "Insufficient tokens" +msgstr "Insufficient tokens" + +msgid "Purchased" +msgstr "Purchased" + +msgid "Premium" +msgstr "Premium" + +msgid "Listing" +msgstr "Listing" + +msgid "InputValidEmail" +msgstr "Please enter a valid email address." + +msgid "InputValidDescription" +msgstr "Please enter a valid description longer than 20 characters." + +msgid "All mods" +msgstr "All mods" + +msgid "Alphabetical" +msgstr "Alphabetical" + +msgid "File size" +msgstr "File size" + +msgid "Most subscribed" +msgstr "Most subscribed" + +msgid "Popularity" +msgstr "Popularity" + +msgid "Rating" +msgstr "Rating" diff --git a/Example.meta b/Example.meta new file mode 100644 index 0000000..ed6e960 --- /dev/null +++ b/Example.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 35d8944b7073c0843b1b9bd0600b2bcb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Example/Images.meta b/Example/Images.meta new file mode 100644 index 0000000..c87ef49 --- /dev/null +++ b/Example/Images.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5cbb072914a9f9d44afea193887f9c6b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Example/Images/TEST.png b/Example/Images/TEST.png new file mode 100644 index 0000000..977a399 Binary files /dev/null and b/Example/Images/TEST.png differ diff --git a/Example/Images/TEST.png.meta b/Example/Images/TEST.png.meta new file mode 100644 index 0000000..8c63714 --- /dev/null +++ b/Example/Images/TEST.png.meta @@ -0,0 +1,133 @@ +fileFormatVersion: 2 +guid: 53d21e76eff624e88942af8ed7b63504 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 1 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Example/Images/auth_form_example.png b/Example/Images/auth_form_example.png new file mode 100644 index 0000000..37de4db Binary files /dev/null and b/Example/Images/auth_form_example.png differ diff --git a/UI/Sprites/search_icon.png.meta b/Example/Images/auth_form_example.png.meta similarity index 65% rename from UI/Sprites/search_icon.png.meta rename to Example/Images/auth_form_example.png.meta index 33b06b3..c24abcd 100644 --- a/UI/Sprites/search_icon.png.meta +++ b/Example/Images/auth_form_example.png.meta @@ -1,12 +1,12 @@ fileFormatVersion: 2 -guid: 9ae15bb2845082245bdec0d82483e1d8 +guid: 95205b83f4583d24289654cbf9c49033 TextureImporter: - fileIDToRecycleName: {} + internalIDToNameTable: [] externalObjects: {} - serializedVersion: 9 + serializedVersion: 12 mipmaps: mipMapMode: 0 - enableMipMap: 0 + enableMipMap: 1 sRGBTexture: 1 linearTexture: 0 fadeOut: 0 @@ -23,6 +23,7 @@ TextureImporter: isReadable: 0 streamingMipmaps: 0 streamingMipmapsPriority: 0 + vTOnly: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -31,16 +32,16 @@ TextureImporter: maxTextureSize: 2048 textureSettings: serializedVersion: 2 - filterMode: -1 - aniso: -1 - mipBias: -100 - wrapU: 1 - wrapV: 1 - wrapW: -1 - nPOTScale: 0 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - spriteMode: 1 + spriteMode: 0 spriteExtrude: 1 spriteMeshType: 1 alignment: 0 @@ -49,16 +50,21 @@ TextureImporter: spriteBorder: {x: 0, y: 0, z: 0, w: 0} spriteGenerateFallbackPhysicsShape: 1 alphaUsage: 1 - alphaIsTransparency: 1 + alphaIsTransparency: 0 spriteTessellationDetail: -1 - textureType: 8 + textureType: 0 textureShape: 1 singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 maxTextureSizeSet: 0 compressionQualitySet: 0 textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + cookieLightType: 0 platformSettings: - - serializedVersion: 2 + - serializedVersion: 3 buildTarget: DefaultTexturePlatform maxTextureSize: 2048 resizeAlgorithm: 0 @@ -69,17 +75,32 @@ TextureImporter: allowsAlphaSplitting: 0 overridden: 0 androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 spriteSheet: serializedVersion: 2 sprites: [] outline: [] physicsShape: [] bones: [] - spriteID: 41feb389cdec8614580b757eb2dc796c + spriteID: + internalID: 0 vertices: [] indices: edges: [] weights: [] + secondaryTextures: [] spritePackingTag: pSDRemoveMatte: 0 pSDShowRemoveMatteOption: 0 diff --git a/Example/Images/random_mod_example.png b/Example/Images/random_mod_example.png new file mode 100644 index 0000000..977a399 Binary files /dev/null and b/Example/Images/random_mod_example.png differ diff --git a/Example/Images/random_mod_example.png.meta b/Example/Images/random_mod_example.png.meta new file mode 100644 index 0000000..5d17161 --- /dev/null +++ b/Example/Images/random_mod_example.png.meta @@ -0,0 +1,109 @@ +fileFormatVersion: 2 +guid: 7b12878bbaa7bb544a2953cbf3eb4d44 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Example/ModIOExample.cs b/Example/ModIOExample.cs new file mode 100644 index 0000000..09c074d --- /dev/null +++ b/Example/ModIOExample.cs @@ -0,0 +1,436 @@ +using System; +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using UnityEngine; +using UnityEngine.Networking; +using UnityEngine.UI; + +namespace ModIO +{ + public class ModIOExample : MonoBehaviour + { + // Generating Dummy Mods + static readonly byte[] Megabyte = new byte[1024 * 1024]; + static readonly System.Random RandomBytes = new System.Random(); + + [Header("Authentication")] + [SerializeField] GameObject authContainer; + [SerializeField] InputField authInput; + [SerializeField] Button authRequest; + [SerializeField] Button authSubmit; + + // Downloading Images + [Header("Random Mod")] + [SerializeField] GameObject randomContainer; + [SerializeField] Text randomName; + [SerializeField] Image randomLogo; + [SerializeField] Button randomButton; + + // Searching for Mods + ModProfile[] allMods; + + // Installing Mods + string downloadName = ""; + float downloadProgress; + + void Awake() + { + randomContainer.SetActive(false); + } + + #region Initialization + + void Start() + { + Result result = ModIOUnity.InitializeForUser("default"); + if (!result.Succeeded()) + return; + + Debug.Log("ModIO plugin initialized!"); + + OnInit(); + } + + async void OnInit() + { + Result result = await ModIOUnityAsync.IsAuthenticated(); + if (result.Succeeded()) + { + OnAuth(); + + return; + } + + authRequest.onClick.AddListener(RequestAuthCode); + authSubmit.onClick.AddListener(SubmitAuthCode); + } + + #endregion + + #region Authentication + + async void RequestAuthCode() + { + Result result = await ModIOUnityAsync.RequestAuthenticationEmail(authInput.text); + if (!result.Succeeded()) + { + Debug.LogError($"RequestAuthenticationEmail failed: {result.message}"); + + return; + } + + Debug.Log($"Authentication email sent to: {authInput.text}"); + + authInput.text = string.Empty; + } + + async void SubmitAuthCode() + { + Result result = await ModIOUnityAsync.SubmitEmailSecurityCode(authInput.text); + if (!result.Succeeded()) + { + Debug.LogError($"SubmitEmailSecurityCode failed: {result.message}"); + + return; + } + + OnAuth(); + } + + #endregion + + async void OnAuth() + { + ResultAnd result = await ModIOUnityAsync.GetCurrentUser(); + if (!result.result.Succeeded()) + { + Debug.LogError($"GetCurrentUser failed: {result.result.message}"); + } + + Debug.Log($"Authenticated user: {result.value.username}"); + + authContainer.SetActive(false); + + await AddModsIfNone(); + + allMods = await GetAllMods(); + Debug.Log($"Available mods:\n{string.Join("\n", allMods.Select(mod => $"{mod.name} (id: {mod.id.id})"))}"); + + randomButton.onClick.AddListener(SetRandomMod); + randomContainer.SetActive(true); + SetRandomMod(); + + Result resultUpdate = await ModIOUnityAsync.FetchUpdates(); + if (!resultUpdate.Succeeded()) + { + Debug.LogError($"FetchUpdates failed: {resultUpdate.message}"); + } + + ModProfile[] subscribedMods = GetSubscribedMods(); + Debug.Log($"Subscribed mods:\n{(subscribedMods.Length > 0 ? string.Join("\n", subscribedMods.Select(mod => $"{mod.name} (id: {mod.id.id})")) : "None")}"); + + if (allMods.Length > 0) + { + int index = Array.FindIndex(allMods, mod => mod.name == "Ten New Missions"); + if (index != -1) + await SubscribeToMod(allMods[index].id, subscribedMods); + else + Debug.Log("Couldn't find Ten New Missions mod, not subscribing"); + } else + Debug.Log("No mods found, not subscribing"); + + EnableModManagement(); + + LogInstalledModsForUser(); + } + + #region Adding Mods + + async Task AddModsIfNone() + { + ResultAnd resultAnd = await ModIOUnityAsync.GetMods(new SearchFilter()); + if (!resultAnd.result.Succeeded()) + { + Debug.LogError($"GetMods failed: {resultAnd.result.message}"); + + return; + } + + if (resultAnd.value.modProfiles.Length != 0) + { + Debug.Log($"{resultAnd.value.modProfiles.Length} mods found. Not adding mods"); + + return; + } + + DummyModData[] mods = + { + await GenerateDummyMod("Cool Weapon", "A really cool weapon.", "24466B", "FDA576", 10), + await GenerateDummyMod("Funny Sound Pack", "You'll laugh a lot using this.", "B85675", "633E63", 50), + await GenerateDummyMod("Klingon Language Pack", "tlhIngan Hol Dajatlh'a'?", "93681C", "FFEAD0", 1), + await GenerateDummyMod("Ten New Missions", "Ported from the sequel to the prequel!", "FDA576", "D45B7A", 99), + }; + + foreach (DummyModData mod in mods) + { + await UploadMod(mod.name, mod.summary, mod.logo, mod.path); + Directory.Delete(mod.path, true); + } + } + + #endregion + + #region Uploading Mods + + static async Task UploadMod(string name, string summary, Texture2D logo, string path) + { + Debug.Log($"Starting upload: {name}"); + + ModProfileDetails details = new ModProfileDetails + { + name = name, + summary = summary, + logo = logo, + }; + + ResultAnd resultCreate = await ModIOUnityAsync.CreateModProfile(ModIOUnity.GenerateCreationToken(), details); + if (!resultCreate.result.Succeeded()) + { + Debug.LogError($"CreateModProfile failed: {resultCreate.result.message}"); + + return; + } + + ModfileDetails modFile = new ModfileDetails + { + modId = resultCreate.value, + directory = path, + }; + + float progress = 0f; + + Task taskUpload = ModIOUnityAsync.UploadModfile(modFile); + while (!taskUpload.IsCompleted) + { + ProgressHandle progressHandle = ModIOUnity.GetCurrentUploadHandle(); + + if (!Mathf.Approximately(progressHandle.Progress, progress)) + { + progress = progressHandle.Progress; + Debug.Log($"Uploading: {name} ({Mathf.RoundToInt(progress * 100)}%)"); + } + + await Task.Delay(1000); + } + + if (!taskUpload.Result.Succeeded()) + { + Debug.LogError($"UploadModfile failed: {taskUpload.Result.message}"); + + return; + } + + Debug.Log($"Finished upload: {name}"); + } + + #endregion + + #region Searching for Mods + + async Task GetAllMods() + { + ResultAnd resultAnd = await ModIOUnityAsync.GetMods(new SearchFilter()); + if (!resultAnd.result.Succeeded()) + { + Debug.LogError($"GetMods failed: {resultAnd.result.message}"); + + return Array.Empty(); + } + + return resultAnd.value.modProfiles; + } + + #endregion + + #region Downloading Images + + async void SetRandomMod() + { + ModProfile modProfile = allMods[UnityEngine.Random.Range(0, allMods.Length)]; + + randomName.text = modProfile.name; + + ResultAnd resultAnd = await ModIOUnityAsync.DownloadTexture(modProfile.logoImage320x180); + if (!resultAnd.result.Succeeded()) + { + Debug.LogError($"DownloadTexture failed: {resultAnd.result.message}"); + + return; + } + + Texture2D logo = resultAnd.value; + randomLogo.sprite = Sprite.Create(logo, new Rect(0, 0, logo.width, logo.height), Vector2.zero); + } + + #endregion + + #region Getting Subscribed Mods + + static ModProfile[] GetSubscribedMods() + { + SubscribedMod[] subscribed = ModIOUnity.GetSubscribedMods(out Result result); + if (!result.Succeeded()) + { + Debug.LogError($"GetSubscribedMods failed: {result.message}"); + + return Array.Empty(); + } + + return subscribed.Select(mod => mod.modProfile).ToArray(); + } + + #endregion + + #region Subscribing to Mods + + async Task SubscribeToMod(ModId modId, ModProfile[] subscribed) + { + if (subscribed.Any(mod => mod.id == modId)) + return; + + Result result = await ModIOUnityAsync.SubscribeToMod(modId); + if (!result.Succeeded()) + { + Debug.LogError($"SubscribeToMod failed: {result.message}"); + + return; + } + + Debug.Log($"Subscribed to mod: {allMods.First(mod => mod.id == modId).name}"); + } + + #endregion + + #region Installing Mods + + void EnableModManagement() + { + void HandleModManagementEvent(ModManagementEventType eventType, ModId modId, Result eventResult) + { + switch (eventType) + { + case ModManagementEventType.DownloadStarted: + downloadName = allMods.First(mod => mod.id == modId).name; + Debug.Log($"Downloading {downloadName}"); + break; + case ModManagementEventType.Downloaded: + Debug.Log($"Downloaded {downloadName}"); + downloadName = string.Empty; + break; + case ModManagementEventType.DownloadFailed: + Debug.Log($"Download failed {downloadName}"); + downloadName = string.Empty; + break; + } + } + + ModIOUnity.EnableModManagement(HandleModManagementEvent); + } + + void Update() + { + if (downloadName.Length == 0) + return; + + ProgressHandle progress = ModIOUnity.GetCurrentModManagementOperation(); + + if (Mathf.Approximately(progress.Progress, downloadProgress)) + return; + + downloadProgress = progress.Progress; + Debug.Log($"Downloading {downloadName} ({Mathf.RoundToInt(downloadProgress * 100)}%)"); + } + + #endregion + + #region Using Mods + + static void LogInstalledModsForUser() + { + UserInstalledMod[] installedMods = ModIOUnity.GetInstalledModsForUser(out Result result); + if (!result.Succeeded()) + { + Debug.LogError($"GetInstalledModsForUser failed: {result.message}"); + + return; + } + + Debug.Log($"Installed mods:\n{(installedMods.Length > 0 ? string.Join("\n", installedMods.Select(mod => $"{mod.modProfile.name} ({mod.directory})")) : "None")}"); + } + + #endregion + + #region Generate Dummy Mods + + static async Task GenerateDummyMod(string name, string summary, string backgroundColor, string textColor, int megabytes) + { + Debug.Log($"Writing temporary mod file: {name}"); + + string path = Path.Combine(Application.dataPath, $"../_temp_dummy_mods/{name}"); + Directory.CreateDirectory(path); + + using (FileStream fs = File.OpenWrite(Path.Combine(path, $"{name}.dummy"))) + { + for (int i = 0; i < megabytes; i++) + { + RandomBytes.NextBytes(Megabyte); + await fs.WriteAsync(Megabyte, 0, Megabyte.Length); + } + } + + return new DummyModData( + name, + summary, + await GenerateLogo(name.Replace(' ', '+'), backgroundColor, textColor), + path + ); + } + + static async Task GenerateLogo(string text, string backgroundColor, string textColor) + { + UnityWebRequest request = UnityWebRequestTexture.GetTexture($"https://placehold.co/512x288/{backgroundColor}/{textColor}.png?text={text}"); + request.SendWebRequest(); + + while (!request.isDone) + await Task.Yield(); + + if (request.result != UnityWebRequest.Result.Success) + { + Debug.LogError($"GenerateLogo failed: {request.error}"); + + return null; + } + + return DownloadHandlerTexture.GetContent(request); + } + + readonly struct DummyModData + { + public readonly string name; + public readonly string summary; + public readonly Texture2D logo; + public readonly string path; + + public DummyModData(string name, string summary, Texture2D logo, string path) + { + this.name = name; + this.summary = summary; + this.logo = logo; + this.path = path; + } + } + + #endregion + } +} diff --git a/Platform/SystemIO/ModIO.Implementation.Platform/SettingsAsset_iOS.cs.meta b/Example/ModIOExample.cs.meta similarity index 83% rename from Platform/SystemIO/ModIO.Implementation.Platform/SettingsAsset_iOS.cs.meta rename to Example/ModIOExample.cs.meta index 313af23..ce21150 100644 --- a/Platform/SystemIO/ModIO.Implementation.Platform/SettingsAsset_iOS.cs.meta +++ b/Example/ModIOExample.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 36426914fbd4cec429cfa340aafcb424 +guid: d10b235f4d15ea247ac929ea9a373c0d MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Example/ModIOExample.unity b/Example/ModIOExample.unity new file mode 100644 index 0000000..a43dbae --- /dev/null +++ b/Example/ModIOExample.unity @@ -0,0 +1,2182 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.37311953, g: 0.38074014, b: 0.3587274, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &26460068 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 26460069} + - component: {fileID: 26460071} + - component: {fileID: 26460070} + m_Layer: 5 + m_Name: Placeholder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &26460069 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 26460068} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 997510570} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -0.5} + m_SizeDelta: {x: -20, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &26460070 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 26460068} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.5} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 2 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Enter email or authentication code... +--- !u!222 &26460071 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 26460068} + m_CullTransparentMesh: 1 +--- !u!1 &69750817 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 69750820} + - component: {fileID: 69750819} + - component: {fileID: 69750818} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &69750818 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 69750817} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &69750819 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 69750817} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 10 +--- !u!4 &69750820 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 69750817} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &132866955 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 132866956} + - component: {fileID: 132866959} + - component: {fileID: 132866958} + - component: {fileID: 132866957} + m_Layer: 5 + m_Name: Name + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &132866956 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 132866955} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1000911024} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &132866957 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 132866955} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: 40 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!114 &132866958 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 132866955} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.050980393, g: 0.89411765, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 16 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Random Mod +--- !u!222 &132866959 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 132866955} + m_CullTransparentMesh: 1 +--- !u!1 &442944173 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 442944174} + - component: {fileID: 442944176} + - component: {fileID: 442944175} + - component: {fileID: 442944177} + m_Layer: 5 + m_Name: Title + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &442944174 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 442944173} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 998255910} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &442944175 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 442944173} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.050980393, g: 0.89411765, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 16 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Email Authentication +--- !u!222 &442944176 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 442944173} + m_CullTransparentMesh: 1 +--- !u!114 &442944177 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 442944173} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: 40 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!1 &483733170 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 483733171} + - component: {fileID: 483733174} + - component: {fileID: 483733173} + - component: {fileID: 483733172} + - component: {fileID: 483733175} + m_Layer: 5 + m_Name: Button (Random Mod) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &483733171 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 483733170} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 946183212} + m_Father: {fileID: 1000911024} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &483733172 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 483733170} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 0.20784314, g: 0.25882354, b: 0.43137255, a: 1} + m_HighlightedColor: {r: 0.1764706, g: 0.21568628, b: 0.3647059, a: 1} + m_PressedColor: {r: 0.13077012, g: 0.16052316, b: 0.2735849, a: 1} + m_SelectedColor: {r: 0.1764706, g: 0.21568628, b: 0.3647059, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 483733173} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &483733173 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 483733170} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &483733174 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 483733170} + m_CullTransparentMesh: 1 +--- !u!114 &483733175 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 483733170} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: 30 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!1 &535256787 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 535256788} + - component: {fileID: 535256789} + m_Layer: 0 + m_Name: Mod.io Example + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &535256788 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 535256787} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &535256789 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 535256787} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d10b235f4d15ea247ac929ea9a373c0d, type: 3} + m_Name: + m_EditorClassIdentifier: + authContainer: {fileID: 998255909} + authInput: {fileID: 997510572} + authRequest: {fileID: 723793724} + authSubmit: {fileID: 953332669} + randomContainer: {fileID: 1000911023} + randomName: {fileID: 132866958} + randomLogo: {fileID: 1065513057} + randomButton: {fileID: 483733172} +--- !u!1 &591694801 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 591694802} + - component: {fileID: 591694804} + - component: {fileID: 591694803} + m_Layer: 5 + m_Name: Vertical Layout Group + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &591694802 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 591694801} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 998255910} + - {fileID: 1000911024} + m_Father: {fileID: 836483799} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 300, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &591694803 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 591694801} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!114 &591694804 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 591694801} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 4 + m_Spacing: 60 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!1 &723793722 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 723793723} + - component: {fileID: 723793726} + - component: {fileID: 723793725} + - component: {fileID: 723793724} + m_Layer: 5 + m_Name: Button (Request) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &723793723 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 723793722} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1697825349} + m_Father: {fileID: 1073941194} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &723793724 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 723793722} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 0.20784314, g: 0.25882354, b: 0.43137255, a: 1} + m_HighlightedColor: {r: 0.1764706, g: 0.21568628, b: 0.3647059, a: 1} + m_PressedColor: {r: 0.13077012, g: 0.16052316, b: 0.2735849, a: 1} + m_SelectedColor: {r: 0.1764706, g: 0.21568628, b: 0.3647059, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 723793725} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &723793725 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 723793722} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &723793726 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 723793722} + m_CullTransparentMesh: 1 +--- !u!1 &836483795 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 836483799} + - component: {fileID: 836483798} + - component: {fileID: 836483797} + - component: {fileID: 836483796} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &836483796 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 836483795} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &836483797 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 836483795} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!223 &836483798 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 836483795} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &836483799 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 836483795} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 591694802} + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1 &931842896 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 931842897} + - component: {fileID: 931842899} + - component: {fileID: 931842898} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &931842897 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 931842896} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 953332668} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &931842898 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 931842896} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Submit Code +--- !u!222 &931842899 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 931842896} + m_CullTransparentMesh: 1 +--- !u!1 &946183211 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 946183212} + - component: {fileID: 946183214} + - component: {fileID: 946183213} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &946183212 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 946183211} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 483733171} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &946183213 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 946183211} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Get Random Mod +--- !u!222 &946183214 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 946183211} + m_CullTransparentMesh: 1 +--- !u!1 &953332667 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 953332668} + - component: {fileID: 953332671} + - component: {fileID: 953332670} + - component: {fileID: 953332669} + m_Layer: 5 + m_Name: Button (Submit) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &953332668 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 953332667} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 931842897} + m_Father: {fileID: 1073941194} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &953332669 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 953332667} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 0.20784314, g: 0.25882354, b: 0.43137255, a: 1} + m_HighlightedColor: {r: 0.1764706, g: 0.21568628, b: 0.3647059, a: 1} + m_PressedColor: {r: 0.13077012, g: 0.16052316, b: 0.2735849, a: 1} + m_SelectedColor: {r: 0.1764706, g: 0.21568628, b: 0.3647059, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 953332670} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &953332670 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 953332667} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &953332671 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 953332667} + m_CullTransparentMesh: 1 +--- !u!1 &979762813 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 979762814} + - component: {fileID: 979762816} + - component: {fileID: 979762815} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &979762814 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 979762813} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 997510570} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -0.5} + m_SizeDelta: {x: -20, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &979762815 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 979762813} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 0 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: +--- !u!222 &979762816 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 979762813} + m_CullTransparentMesh: 1 +--- !u!1 &997510569 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 997510570} + - component: {fileID: 997510574} + - component: {fileID: 997510573} + - component: {fileID: 997510572} + - component: {fileID: 997510571} + m_Layer: 5 + m_Name: Auth Input + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &997510570 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 997510569} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 26460069} + - {fileID: 979762814} + m_Father: {fileID: 998255910} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &997510571 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 997510569} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: 30 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!114 &997510572 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 997510569} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d199490a83bb2b844b9695cbf13b01ef, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 0.20784314, g: 0.25882354, b: 0.43137255, a: 1} + m_HighlightedColor: {r: 0.1764706, g: 0.21568628, b: 0.3647059, a: 1} + m_PressedColor: {r: 0.12941177, g: 0.16078432, b: 0.27450982, a: 1} + m_SelectedColor: {r: 0.20784314, g: 0.25882354, b: 0.43137255, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 997510573} + m_TextComponent: {fileID: 979762815} + m_Placeholder: {fileID: 26460070} + m_ContentType: 0 + m_InputType: 0 + m_AsteriskChar: 42 + m_KeyboardType: 0 + m_LineType: 0 + m_HideMobileInput: 0 + m_CharacterValidation: 0 + m_CharacterLimit: 0 + m_OnEndEdit: + m_PersistentCalls: + m_Calls: [] + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_CaretColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_CustomCaretColor: 0 + m_SelectionColor: {r: 0.65882355, g: 0.80784315, b: 1, a: 0.7529412} + m_Text: + m_CaretBlinkRate: 0.85 + m_CaretWidth: 1 + m_ReadOnly: 0 + m_ShouldActivateOnSelect: 1 +--- !u!114 &997510573 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 997510569} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10911, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &997510574 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 997510569} + m_CullTransparentMesh: 1 +--- !u!1 &998255909 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 998255910} + - component: {fileID: 998255912} + - component: {fileID: 998255911} + m_Layer: 5 + m_Name: Email Authentication + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &998255910 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 998255909} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1678276225} + - {fileID: 442944174} + - {fileID: 997510570} + - {fileID: 1073941194} + m_Father: {fileID: 591694802} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 150, y: 0} + m_SizeDelta: {x: 300, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &998255911 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 998255909} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!114 &998255912 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 998255909} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_Spacing: 10 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!1 &1000911023 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1000911024} + - component: {fileID: 1000911026} + - component: {fileID: 1000911025} + m_Layer: 5 + m_Name: Random Mod + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1000911024 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1000911023} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1868963789} + - {fileID: 132866956} + - {fileID: 1065513055} + - {fileID: 483733171} + m_Father: {fileID: 591694802} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 300, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!114 &1000911025 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1000911023} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!114 &1000911026 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1000911023} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_Spacing: 10 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!1 &1065513054 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1065513055} + - component: {fileID: 1065513058} + - component: {fileID: 1065513057} + - component: {fileID: 1065513056} + m_Layer: 5 + m_Name: Logo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1065513055 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1065513054} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1000911024} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1065513056 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1065513054} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: 168 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!114 &1065513057 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1065513054} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1065513058 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1065513054} + m_CullTransparentMesh: 1 +--- !u!1 &1073941193 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1073941194} + - component: {fileID: 1073941197} + - component: {fileID: 1073941196} + - component: {fileID: 1073941195} + m_Layer: 5 + m_Name: Horizontal Layout Group + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1073941194 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1073941193} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 723793723} + - {fileID: 953332668} + m_Father: {fileID: 998255910} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1073941195 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1073941193} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: 30 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!114 &1073941196 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1073941193} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_Spacing: 10 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!222 &1073941197 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1073941193} + m_CullTransparentMesh: 1 +--- !u!1 &1076189503 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1076189506} + - component: {fileID: 1076189505} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!20 &1076189505 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1076189503} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.06517242, g: 0.079137936, b: 0.135, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 1 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1076189506 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1076189503} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1678276224 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1678276225} + - component: {fileID: 1678276228} + - component: {fileID: 1678276227} + - component: {fileID: 1678276226} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1678276225 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1678276224} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 998255910} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 40, y: 40} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1678276226 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1678276224} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 1 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!114 &1678276227 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1678276224} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.12941177, g: 0.16078432, b: 0.27058825, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1678276228 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1678276224} + m_CullTransparentMesh: 1 +--- !u!1 &1697825348 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1697825349} + - component: {fileID: 1697825351} + - component: {fileID: 1697825350} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1697825349 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1697825348} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 723793723} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1697825350 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1697825348} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Request Code +--- !u!222 &1697825351 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1697825348} + m_CullTransparentMesh: 1 +--- !u!1 &1868963788 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1868963789} + - component: {fileID: 1868963792} + - component: {fileID: 1868963791} + - component: {fileID: 1868963790} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1868963789 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1868963788} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1000911024} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 40, y: 40} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1868963790 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1868963788} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 1 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!114 &1868963791 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1868963788} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.12941177, g: 0.16078432, b: 0.27058825, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1868963792 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1868963788} + m_CullTransparentMesh: 1 diff --git a/Example/ModIOExample.unity.meta b/Example/ModIOExample.unity.meta new file mode 100644 index 0000000..5a5d5e4 --- /dev/null +++ b/Example/ModIOExample.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 159d24010cbe3de48b4b059e4adb2c43 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Platform/Steam.meta b/Platform/Steam.meta new file mode 100644 index 0000000..a578c82 --- /dev/null +++ b/Platform/Steam.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8926cb5eaf62cbf42a9836cb6b36d9a8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Platform/Steam/Steam Marketplace.md b/Platform/Steam/Steam Marketplace.md new file mode 100644 index 0000000..ee3c10e --- /dev/null +++ b/Platform/Steam/Steam Marketplace.md @@ -0,0 +1,78 @@ +--- +id: unity-steam-marketplace-example +title: Unity Steam Marketplace Example +sidebar_label: Unity Steam Marketplace Example +slug: /unity-plugin/unity-steam-marketplace-example +sidebar_position: 7 +--- + +# Steam Marketplace Setup +The mod.io SDK supports full monetization features, allowing you sell a per-game virtual currency to your players that +they can use to purchase mods, with a share of the revenue split between creators and your studio. Every platform +requires specific setup for monetization features to work, with regards to the virtual currency configuration and API +calls. The following documentation walks you through the setup process and gives example usages. The mod.io monetization +features are enabled as part of the onboarding process on your game profile. Once that is setup, there is nothing +further you need to do for initialization in the SDK. + +# Steam +There are two packages that are typically used to integrate steamworks into Unity: Facepunch and Steamworks.Net. +Steamworks.Net is closer to the actual C++ implementation. Facepunch is more user friendly and takes advantage +of C# libraries. + +### Sync Entitlements +Synchronizes purchased tokens through the Steam Store with the mod.io server. This must be called to update the user's +balance after purchasing token packs. This is done for you automatically in FetchUpdates() but can be called manually +if needed. +```csharp +async void SyncEntitlements() +{ + var response = await ModIOUnityAsync.SyncEntitlements(); + if(response.result.Succeeded()) + { + Debug.Log("Token packs have been added to user's balance"); + } +} +``` + +[Steam API Documentation](https://partner.steamgames.com/doc/home) + +## Facepunch +[Facepunch Documentation](https://wiki.facepunch.com/steamworks/) + +### Quick Start +- Head over to https://mod.io/g and login with an admin account +- Go to your game's dashboard and click the edit button in the top right corner. +- Click the Monetization dropdown and select settings. +- Enter your Steam app ID and Steam Publisher Key. +- Go back to Unity and Create a folder in the project under the Assets folder named "Facepunch" +- Download the Package zip file at [here.](https://github.com/Facepunch/Facepunch.Steamworks/releases/) +- Open the release zip file and copy the contents of the Unity file into your Facepunch folder. +- Set the Scripting runtime (Api Compatibility level) to .NET 4.x or higher in Project Settings. +- Open the SteamExample Scene +- Enable the "Facepunch Example" game object in the hierarchy. +- Under the "FacepunchExample" component, set your app id +- Select the "Store" game object under "Example Title Canvas"->"Title Options" +- Add an onClickEvent that references the "Facepunch Example" game object's OpenStoreWebOverlay function +- Open Steam and login with an account associated with your app id +- Enter play mode, select Store and the steam overlay will open! + +## Steamworks.Net +[Steamworks.Net Documentation](https://steamworks.github.io/) + +### Quick Start +- Head over to https://mod.io/g and login with an admin account +- Go to your game's dashboard and click the edit button in the top right corner. +- Click the Monetization dropdown and select settings. +- Enter your Steam app ID and Steam Publisher Key. +- Download the .unitypackage from the Releases page on GitHub [here.](https://github.com/rlabrecque/Steamworks.NET/releases) +- Import the unity package into the project +- Open the steam_appid.txt which now resides in the root of your Unity project and replace "480" with your own AppId + (If it doesn't exist, just create a new text file named steam_appid.txt which only contains your app Id) +- Download and add the SteamManager class [here.](https://raw.githubusercontent.com/rlabrecque/SteamManager/master/SteamManager.cs) +- Open the SteamExample Scene +- Enable the "Steamworks Example" game object in the hierarchy. +- Under the "SteamworksExample" component, set your app id +- Select the "Store" game object under "Example Title Canvas"->"Title Options" +- Add an onClickEvent that references the "Steamworks Example" game object's OpenStoreWebOverlay function +- Open Steam and login with an account associated with your app id +- Enter play mode, select Store and the steam overlay will open! \ No newline at end of file diff --git a/Platform/Steam/Steam Marketplace.md.meta b/Platform/Steam/Steam Marketplace.md.meta new file mode 100644 index 0000000..a27b2f2 --- /dev/null +++ b/Platform/Steam/Steam Marketplace.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1b9df15ce95d440edad0b3817ad531c2 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Platform/SystemIO/ModIO.Implementation.Platform/SettingsAsset_Android.cs b/Platform/SystemIO/ModIO.Implementation.Platform/SettingsAsset_Android.cs deleted file mode 100644 index a821fd8..0000000 --- a/Platform/SystemIO/ModIO.Implementation.Platform/SettingsAsset_Android.cs +++ /dev/null @@ -1,23 +0,0 @@ -#if UNITY_2019_4_OR_NEWER -using UnityEngine; - -namespace ModIO.Implementation -{ - /// Windows extension to the SettingsAsset. - internal partial class SettingsAsset : ScriptableObject - { - /// Configuration for Android. - public BuildSettings androidConfiguration; - -#if UNITY_ANDROID && !UNITY_EDITOR - - /// Gets the configuration for Android. - public BuildSettings GetBuildSettings() - { - return this.androidConfiguration; - } - -#endif // UNITY_STANDALONE_WIN && !UNITY_EDITOR - } -} -#endif \ No newline at end of file diff --git a/Platform/SystemIO/ModIO.Implementation.Platform/SettingsAsset_Standalone.cs b/Platform/SystemIO/ModIO.Implementation.Platform/SettingsAsset_Standalone.cs deleted file mode 100644 index 2751546..0000000 --- a/Platform/SystemIO/ModIO.Implementation.Platform/SettingsAsset_Standalone.cs +++ /dev/null @@ -1,23 +0,0 @@ -#if UNITY_2019_4_OR_NEWER -using UnityEngine; - -namespace ModIO.Implementation -{ - /// standalone extension to the SettingsAsset. - internal partial class SettingsAsset : ScriptableObject - { - /// Configuration for Windows. - public BuildSettings standaloneConfiguration; - -#if (UNITY_STANDALONE || UNITY_WSA) && !UNITY_EDITOR - - /// Gets the configuration for standalone. - public BuildSettings GetBuildSettings() - { - return this.standaloneConfiguration; - } - -#endif // UNITY_STANDALONE && !UNITY_EDITOR - } -} -#endif diff --git a/Platform/SystemIO/ModIO.Implementation.Platform/SettingsAsset_iOS.cs b/Platform/SystemIO/ModIO.Implementation.Platform/SettingsAsset_iOS.cs deleted file mode 100644 index dc3b91e..0000000 --- a/Platform/SystemIO/ModIO.Implementation.Platform/SettingsAsset_iOS.cs +++ /dev/null @@ -1,27 +0,0 @@ -#if UNITY_2019_4_OR_NEWER -using UnityEngine; - -namespace ModIO.Implementation -{ - /// iOS extension to the SettingsAsset. - internal partial class SettingsAsset : ScriptableObject - { - /// Configuration for iOS. - public BuildSettings iosConfiguration; - -#if UNITY_IOS && !UNITY_EDITOR - private void Awake() - { - iosConfiguration.userPortal = UserPortal.Apple; - } - - /// Gets the configuration for iOS. - public BuildSettings GetBuildSettings() - { - return this.iosConfiguration; - } - -#endif // UNITY_STANDALONE_WIN && !UNITY_EDITOR - } -} -#endif diff --git a/Platform/SystemIO/ModIO.Implementation.Platform/SystemIODataService.cs b/Platform/SystemIO/ModIO.Implementation.Platform/SystemIODataService.cs index 4b09ca0..55a289c 100644 --- a/Platform/SystemIO/ModIO.Implementation.Platform/SystemIODataService.cs +++ b/Platform/SystemIO/ModIO.Implementation.Platform/SystemIODataService.cs @@ -2,9 +2,10 @@ using System; using System.Collections.Generic; -using System.IO; using System.Threading.Tasks; using UnityEngine; +using Debug = UnityEngine.Debug; +using System.IO; #pragma warning disable 1998 // These async functions don't use await! @@ -252,28 +253,32 @@ public bool TryCreateParentDirectory(string path) return SystemIOWrapper.TryCreateParentDirectory(path, out Result _); } + //TODO: Write native code to properly check for disk space for ILLCPP builds public async Task IsThereEnoughDiskSpaceFor(long bytes) { - try - { -#if UNITY_ANDROID - //DriveInfo is not supported on iLcpp - AndroidJNI.AttachCurrentThread(); - var statFs = new AndroidJavaObject("android.os.StatFs", persistentDataPath); - var freeBytes = statFs.Call("getFreeBytes"); - return bytes < freeBytes; +#if !ENABLE_IL2CPP + #if UNITY_ANDROID + AndroidJNI.AttachCurrentThread(); + var statFs = new AndroidJavaObject("android.os.StatFs", PersistentDataRootDirectory); + var freeBytes = statFs.Call("getFreeBytes"); + return bytes < freeBytes; + #elif UNITY_IOS + return true; + #elif UNITY_STANDALONE_OSX + return true; + #elif UNITY_STANDALONE_WIN + return true; + #elif UNITY_WSA + return true; + #else + return true; + #endif #else - FileInfo f = new FileInfo(PersistentDataRootDirectory); - string drive = Path.GetPathRoot(f.FullName); - var d = new DriveInfo(drive); - return bytes < d.AvailableFreeSpace; + FileInfo f = new FileInfo(PersistentDataRootDirectory); + string drive = Path.GetPathRoot(f.FullName); + DriveInfo d = new DriveInfo(drive); + return bytes < d.AvailableFreeSpace; #endif - } - catch(Exception e) - { - Console.WriteLine(e); - throw; - } } #endregion // Operations diff --git a/README.md b/README.md index 176aa94..8b590f5 100644 --- a/README.md +++ b/README.md @@ -2,281 +2,1348 @@ id: unity-introduction title: Unity Introduction sidebar_label: Unity Introduction -slug: /unity-plugin +slug: /unity-plugin/unity-introduction sidebar_position: 0 --- -mod.io -# mod.io Unity Plugin v2023.7.1 + +mod.io +# mod.io Unity Plugin v2024.3.1 [![License](https://img.shields.io/badge/license-MIT-brightgreen.svg)](https://github.com/modio/modio-unity/blob/master/LICENSE) [![Discord](https://img.shields.io/discord/389039439487434752.svg?label=Discord&logo=discord&color=7289DA&labelColor=2C2F33)](https://discord.mod.io) [![Master docs](https://img.shields.io/badge/docs-master-green.svg)](https://go.mod.io/unity-docs) [![Unity 3D](https://img.shields.io/badge/Unity-2020.3+-lightgrey.svg)](https://unity3d.com) -Welcome to the mod.io Unity Engine plugin repository. It allows game developers to host and automatically install user-created mods in their games which use **Unity 2020.3** or newer. It provides a UI for mod discovery, installation and collection management, and a C# interface which connects to the [mod.io REST API](https://docs.mod.io). +Welcome to the mod.io Unity Engine plugin repository! + +mod.io enables game developers of all sizes to integrate user-generated content directly into their games quickly and easily. This includes hosting, user profiles and subscriptions, moderation tools, file delivery, and *more*: + +- Completely cross-platform: content uploaded on PC can be enjoyed by players on Xbox, Switch, PlayStation, VR and mobile +- One-click mod installs, synced to a single mod.io account across all platforms +- Independent API: integrate mod.io into your game's launcher or your homepage using our Embedded UGC Hub. It can also be used by community fan sites and Discord bots +- Founded by the [ModDB.com](https://moddb.com) team, with over two decades of experience in the UGC space +- Constantly evolving - we continue to work alongside our partners to iterate and improve our plugin support + +The mod.io Unity Engine plugin is the simplest and fastest way to integrate UGC into your Unity **2020.3+** game. It handles all of the common tasks, allowing game developers to quickly and easily implement a solution that enables players to access and discover user-generated content for their games. -## Watch the video tutorial -mod.io +A custom built [ready-made UI](#browser-ui) for mod discovery is included, along with installation and collection management, and a full-featured [C# interface](#getting-started) which connects to the [mod.io REST API](https://docs.mod.io). ## Platform Support +You can view the Monetization Endpoints [here.](./Marketplace.md) + +|Platform | Support | Documentation | +| ------------- |-------------------------|--------------------------------------------------------------------------------------------| +|Windows | Yes | | +|Windows (GDK) | Yes ([Contact us](#game-studios-and-publishers)) | | +|XBox (GDK) | Yes ([Contact us](#game-studios-and-publishers)) | [Marketplace](./Platform/Gamecore/Gamecore Marketplace.md) | +|PlayStation 4 | Yes ([Contact us](#game-studios-and-publishers)) | [Marketplace](./Platform/Playstation/ModIO.Implementation.Platform/PS4/PS4 Marketplace.md) | +|PlayStation 5 | Yes ([Contact us](#game-studios-and-publishers)) | [Marketplace](./Platform/Playstation/ModIO.Implementation.Platform/PS5/PS5 Marketplace.md) | +|Nintendo Switch| Yes ([Contact us](#game-studios-and-publishers)) | | +|Linux | Yes | | +|macOS | Yes | | + + +## Game Studios and Publishers +If you need assistance with first-party approval, or require a private, white-label UGC solution. [Contact us](mailto:developers@mod.io)! + +## Contributions Welcome +Our Unity plugin is public and open source. Game developers are welcome to utilize it as-is or fork it for their game's specific requirements. + +Want to make changes to our plugin? Submit a pull request, and we'll review your recommended changes! Our goal at [mod.io](https://mod.io) is an [open modding API](https://docs.mod.io), and you're encouraged to view, fork and contribute to [all of our codebases](https://github.com/modio)! + +## Installation + +> [!WARNING] +> If you have a previous version of the plugin installed, it is _highly_ recommended to delete it before updating to a later version. + +1. Install the *Newtonsoft Json* plugin using the Package Manager. + - If your Unity Package Manager does not contain Newtonsoft Json, follow the instructions [here](https://github.com/applejag/Newtonsoft.Json-for-Unity/wiki/Install-official-via-UPM#installing-the-package-via-upm-window) to find the installation method for your Unity version. +2. Download and install the plugin using one of the following methods: + - Using the [Unity Asset Store](https://assetstore.unity.com/packages/tools/integration/mod-browser-manager-by-mod-io-138866) and Package Manager. + - Download the `.unitypackage` directly from the [Releases page](https://github.com/modio/modio-unity/releases). + - Download an archive of the code using GitHub's download feature, and unpack it in your project's `Assets/Plugins` directory. +3. Restart Unity, to ensure it recognises the new assembly definitions. + +> [!NOTE] +> If you receive errors due to conflicting libraries after installing the plugin, remove any duplicates from `Assets/Plugins/mod.io/ThirdParty`. + +## Setup + +The first thing you'll need to do is [create a game profile](https://mod.io/g/add) on mod.io (or our [private test environment](https://test.mod.io/g/add)). + +> [!IMPORTANT] +> You'll need your `game ID` and `API key` for the following steps. + +1. Ensure you have installed the plugin using the [installation instructions](#installation) above. +2. In Unity, select the mod.io *config file* by navigating to `Tools -> mod.io -> Edit Settings`. +3. In the Inspector under *Server Settings*, enter your `game ID` and `API key`. +4. Use the *Insert URL* buttons to set the `server URL` depending on where you created your game profile earlier. + +> [!WARNING] +> Deselect the config file before entering Play mode. A known Unity bug can cause the Editor to crash in Unity 2019-2021. + +Your setup is now complete. The following sections will guide you through getting your mod.io integration up and running quickly. + +If you have any questions or need some help join our [Discord](https://discord.mod.io) server. + +## Quick Start + +The mod.io Unity Engine plugin comes with a prebuilt UI, a drop-in, instant solution for browsing and installing your game's mods. + +If you want to skip implementing your own UI, head to the [Browser UI](#browser-ui) section for setup and usage instructions. However, we recommend following the guide below to better understand how the plugin works. + +## Getting Started + +In the following section, we will walk through implementing some of the most common functions of the mod.io Unity Engine plugin. We recommend reading this step-by-step guide to ensure you understand how everything works, but you can find the resulting class for reference [here](#complete-class). + +### Video Tutorial -|Platform | Support | -| ------------- |------------------------------------------------| -|Windows | Yes | -|Windows (GDK) | Yes [Contact us](#game-studios-and-publishers) | -|XBox (GDK) | Yes [Contact us](#game-studios-and-publishers) | -|PlayStation 4 | Yes [Contact us](#game-studios-and-publishers) | -|PlayStation 5 | Yes [Contact us](#game-studios-and-publishers) | -|Nintendo Switch| Yes [Contact us](#game-studios-and-publishers) | -|Linux | Yes | -|macOS | Yes | +If you prefer a video tutorial, click the image below to view it on YouTube: -### Git Repository or .unitypackage -You can import the plugin directly from the [Unity Asset Store](https://assetstore.unity.com/packages/tools/integration/mod-browser-manager-by-mod-io-138866), or by downloading the package directly from the [Releases page](https://github.com/modio/modio-unity/releases). If you have any previous versions of the plugin installed, it is highly recommended to delete them before importing a newer version. + + mod.io + -Alternatively, you can download an archive of the code using GitHub's download feature and place it in the Assets/Plugins directory within your Unity project. +### Initial Setup -## Getting started +First, let's create a new `MonoBehaviour` called `ModIOExample.cs` that will contain all of our example functionality: -1. Set up your [game profile on mod.io](https://mod.io/g/add) (or our [private test environment](https://test.mod.io/g/add)) to get your game ID and API key. -2. Add the plugin to your project using the installation instructions above. -3. Ensure you dont have any conflicting libraries by going to Assets/Plugins/mod.io/ThirdParty to remove any libraries you may already have in your project. -4. If you dont have Newtonsoft in your project, add it from the Package Manager by clicking the "Add package from git URL" option and enter "com.unity.nuget.newtonsoft-json" to add the Newtonsoft package -5. Restart unity to ensure it recognises the new assembly definitions. -6. Go to Tools > mod.io > Edit Settings to locate the config file. -7. Select the config file and use the inspector to assign your game ID and API key in server settings (Make sure to deselect the config file before using playmode in the editor. A known unity bug can cause the editor to crash in 2019-2021). -8. Setup complete! Join us [on Discord](https://discord.mod.io) if you have any questions or need help. +```csharp +using UnityEngine; + +public class ModIOExample : MonoBehaviour +{ + // TODO: Keep reading the Getting Started guide +} +``` + +Once you've created the above class: + +1. Create a new `Scene`. +2. In that scene, create an `Empty Game Object` (name it anything you'd like). +3. Add the `ModIOExample` component to your `GameObject`. +4. Save the scene. -## Setting up the Browser UI +### Initialization -If you do not wish to create your own UI implementation you can use our default UI that comes built in to the plugin. Examples of how the UI looks are provided below. (If you dont wish to use the UI it is safe to delete the UI folder located at Assets/Plugins/mod.io/UI) +> [!IMPORTANT] +> The plugin relies on the *config file* that is configured during the [setup instructions](#setup) above. Please ensure you have completed all of those steps before proceeding. -1. Follow the steps above to setup the config. -2. Navigate to the ModIOBrowser prefab at Assets/Plugins/mod.io/UI/Examples and drag it into your scene. -3. Use the ModIOBrowser.Browser.OpenBrowser() method to open the browser in your scene. - `ModIOBrowser.Browser.OpenBrowser(null)` -4. The Browser UI is now setup! +Before the plugin can be used, it needs to be initialized for the current player. This usually only needs to happen once, so let's implement Unity's `Start` method in our `ModIOExample.cs` file: + +```csharp +using ModIO; // Add this to the top of your class + +void Start() +{ + Result result = ModIOUnity.InitializeForUser("default"); + if (!result.Succeeded()) + return; + + Debug.Log("ModIO plugin initialized!"); +} +``` -![Example mod browser](https://assetstorev1-prd-cdn.unity3d.com/package-screenshot/a7f9360d-4837-4d6e-b5cb-db5544a27b8c_orig.png) -![Example mod collection](https://assetstorev1-prd-cdn.unity3d.com/package-screenshot/b37c33d6-aaa1-49c5-a6fd-c4ae18627bd2_orig.png) +The value passed into `InitializeForUser` is important. We've used *"default"* here, however, if your game allows for multiple players on the same installation, you should instead use a unique identifier per player. This allows the plugin to cache authentication and mod-subscriptions on a per-player basis. + +Now, return to your scene in Unity, enter Play mode and you should see the logged success message. ## Authentication -In the current version of the plugin it is required that a user session is authenticated. Either via email or through another third party, such as Steam or Google. The process is fairly simply. Examples can be found below. +> [!NOTE] +> This guide uses `ModIOUnityAsync` wherever possible. However, you can find callback equivalents to every method in `ModIOUnity` if you prefer. + +Most of the API’s functionality requires player authentication. The plugin offers a large range of SSO (single-sign on) authentication options, including Steam, Xbox, Google, PlayStation, and more. We strongly recommend using these options as they provide a frictionless user experience and don't require multiple steps. -## Usage -below are a couple examples for some of the common usages of the plugin. Such as initialising, authenticating, enabling automatic downloads and installs, and getting a few mods from the mod.io server. +For now, let's start with a simple email authentication to allow us full access. -All of the methods required to use the plugin can be found in ModIOUnity.cs. If you prefer using async methods over callbacks you can alternatively use ModIOUnityAsync.cs to use an async variation of the same methods. +> [!NOTE] +> While creating the UI layout referenced below is outside the scope of this guide, there are great Unity UI tutorials available. You can, however, use the image below as a guide for the elements required to achieve the same functionality: +> +> ![Auth Form Example](Example/Images/auth_form_example.png) + +With your UI created, let's add our authentication functionality: -### Initialise the plugin ```csharp -void Example() +using UnityEngine.UI; // Add this to the top of your class + +[SerializeField] InputField authInput; +[SerializeField] Button authRequest; +[SerializeField] Button authSubmit; + +void Start() { - Result result ModIOUnity.InitializeForUser("ExampleUser"); - + // Initialization ... + + OnInit(); +} + +async void OnInit() +{ + Result result = await ModIOUnityAsync.IsAuthenticated(); if (result.Succeeded()) { - Debug.Log("Initialised plugin"); + OnAuth(); + + return; } - else + + // You can assign these using the Inspector if you prefer + authRequest.onClick.AddListener(RequestAuthCode); + authSubmit.onClick.AddListener(SubmitAuthCode); +} + +async void RequestAuthCode() +{ + Result result = await ModIOUnityAsync.RequestAuthenticationEmail(authInput.text); + if (!result.Succeeded()) { - Debug.Log("Failed to initialise plugin"); + Debug.LogError($"RequestAuthenticationEmail failed: {result.message}"); + + return; + } + + Debug.Log($"Authentication email sent to: {authInput.text}"); + + authInput.text = string.Empty; +} + +async void SubmitAuthCode() +{ + Result result = await ModIOUnityAsync.SubmitEmailSecurityCode(authInput.text); + if (!result.Succeeded()) { + Debug.LogError($"SubmitEmailSecurityCode failed: {result.message}"); + + return; + } + + OnAuth(); +} + +async void OnAuth() +{ + ResultAnd result = await ModIOUnityAsync.GetCurrentUser(); + if (!result.result.Succeeded()) + { + Debug.LogError($"GetCurrentUser failed: {result.result.message}"); + } + + Debug.Log($"Authenticated user: {result.value.username}"); } ``` -### Get the user's installed mods +> [!IMPORTANT] +> Don't forget to assign the fields in the Inspector! + +If you've implemented the above correctly, you should now be able to: + +1. Start Play mode in Unity +2. Enter your email address in the input field and press the `authRequest` button +3. Retrieve the authorization code from your inbox +4. Enter the authorization code into the input field and press the `authSubmit` button +5. See the logged authentication message + +> [!NOTE] +> If there is no mod.io account associated with the provided email address, one will automatically be created. + +There is something worth highlighting: if you restart Play mode, you'll see the logged authentication message again almost immediately. This is the result of two separate factors: + +- The value passed to `InitializeForUser` during the [initialization section](#initialization) needs to have been used when a user successfully authenticated. +- At the beginning of `OnInit()`, we check to see if we are already authenticated, and if so move straight to `OnAuth()`. + +If you change the initialization value (currently *"default"*), you will no longer receive the authenticated log. This functionality can enable support for multiple players; separately tracking authentication states and mod-subscriptions. However, as mentioned previously, most games can pass a constant value if they only ever expect one player on the device. + +> [!NOTE] +> If your email provider supports it, you can use plus-addressing to test multiple users with a single email address: +> ``` +> john.smith+test1@gmail.com +> john.smith+test2@gmail.com +> john.smith+test3@gmail.com +> ``` + +## Adding Mods + +> [!NOTE] +> Among a range of other functionality, players can use the mod.io website for creating, modifying, and removing mods for your game. +> +> In this section, we're going to add mods using the plugin and API. Feel free to skip this section if you'd prefer to use the web interface. + +Before we can interact with your game's mods via the API, we're going to need to create some test mods. We’ll start by adding some functionality that checks to see if your game has any mods. If it doesn't then we'll upload some using the API: + ```csharp -void Example() +using System.Threading.Tasks; // Add this to the top of your class + +async void OnAuth() { - UserInstalledMod[] mods = ModIOUnity.GetInstalledModsForUser(out Result result); + // Authenticated ... - foreach(UserInstalledMod mod in mods) + await AddModsIfNone(); +} + +async Task AddModsIfNone() +{ + // This section ensures we only upload our mods once. Don't worry too much + // about the specifics for now, we will introduce SearchFilters and GetMods + // properly later on. + ResultAnd resultAnd = await ModIOUnityAsync.GetMods(new SearchFilter()); + if (!resultAnd.result.Succeeded()) { - // This is the location of the installed mod - string directory = mod.directory; + Debug.LogError($"GetMods failed: {resultAnd.result.message}"); + + return; } + + if (resultAnd.value.modProfiles.Length != 0) + { + Debug.Log($"{resultAnd.value.modProfiles.Length} mods found. Not adding mods"); + + return; + } + + // TODO: Keep reading the Getting Started guide } ``` -### Enable automatic mod downloads and installs +### Generating Dummy Mods + +> [!NOTE] +> This section is going to generate some dummy mods for use throughout the rest of this guide. If you already have mods or test files ready to upload, you can skip to the [uploading mods](#uploading-mods) section. + +
+ +Click to expand +
+Let's generate a few dummy mods for you to use for testing. At a minimum, a mod requires the following: + +- A name +- A summary +- A logo (image file with a minimum resolution of 512x288) +- At least one file + +We'll use a third-party API to generate a logo for each of your mods, and we'll create a temporary folder and dummy file in each in your Unity project's directory: + +> [!NOTE] +> Don't worry if you don't understand the code below. Its only job is to generate our dummy mods, and it doesn't have any relation to the plugin! If you'd prefer to create your own dummy mods, skip to the [uploading mods](#uploading-mods) section! + +> [!WARNING] +> The following code is going to generate a handful of 10-100 MB files, the size of which will give us enough time to show download progress later on. Ensure you have some free space available in your project directory. + ```csharp -void Example() +using System.IO; // Add these to the top of your class +using UnityEngine.Networking; + +// Reusing a single byte-array is a small memory-conscious +// optimization for when we are generating our dummy files. +static readonly byte[] Megabyte = new byte[1024 * 1024]; +static readonly Random RandomBytes = new Random(); + +async Task AddModsIfNone() { - Result result = ModIOUnity.EnableModManagement(ModManagementDelegate); + // Return if any mods exist ... + + DummyModData[] mods = + { + await GenerateDummyMod("Cool Weapon", "A really cool weapon.", "24466B", "FDA576", 10), + await GenerateDummyMod("Funny Sound Pack", "You'll laugh a lot using this.", "B85675", "633E63", 50), + await GenerateDummyMod("Klingon Language Pack", "tlhIngan Hol Dajatlh'a'?", "93681C", "FFEAD0", 1), + await GenerateDummyMod("Ten New Missions", "Ported from the sequel to the prequel!", "FDA576", "D45B7A", 99), + }; +} - if (result.Succeeded()) +async Task GenerateDummyMod(string name, string summary, string backgroundColor, string textColor, int megabytes) +{ + Debug.Log($"Writing temporary mod file: {name}"); + + string path = Path.Combine(Application.dataPath, $"../_temp_dummy_mods/{name}"); + Directory.CreateDirectory(path); + + using (FileStream fs = File.OpenWrite(Path.Combine(path, $"{name}.dummy"))) { - Debug.Log("Enabled mod management"); + for (int i = 0; i < megabytes; i++) + { + RandomBytes.NextBytes(Megabyte); + await fs.WriteAsync(Megabyte, 0, Megabyte.Length); + } } - else - { - Debug.Log("Failed to enable mod management"); + + return new DummyModData( + name, + summary, + await GenerateLogo(name.Replace(' ', '+'), backgroundColor, textColor), + path + ); +} + +// Uses a third-party API to generate a logo for each +// mod, adding some variety when we display them later +async Task GenerateLogo(string text, string backgroundColor, string textColor) +{ + UnityWebRequest request = UnityWebRequestTexture.GetTexture($"https://placehold.co/512x288/{backgroundColor}/{textColor}.png?text={text}"); + request.SendWebRequest(); + + while (!request.isDone) + await Task.Yield(); + + if (request.result != UnityWebRequest.Result.Success) { + Debug.LogError($"GenerateLogo failed: {request.error}"); + + return null; + } + + return DownloadHandlerTexture.GetContent(request); } - -// The following method will get invoked whenever an event concerning mod management occurs -void ModManagementDelegate(ModManagementEventType eventType, ModId modId, Result result) + +readonly struct DummyModData { - Debug.Log("a mod management event of type " + eventType.ToString() + " has been invoked"); + public readonly string name; + public readonly string summary; + public readonly Texture2D logo; + public readonly string path; + + public DummyModData(string name, string summary, Texture2D logo, string path) + { + this.name = name; + this.summary = summary; + this.logo = logo; + this.path = path; + } } ``` -### Authenticate a user -In the current version of the plugin it is required that a user session is authenticated in order to subscribe and download mods. You can accomplish this with an email address or through another third party service, such as Steam or Google. Below is an example of how to do this from an email address provided by the user. A security code will be sent to their email account and can be used to authenticate (The plugin will cache the session token to avoid having to re-authenticate every time they run the application). +
+ +### Uploading Mods + +Uploading mods is a two-step process: + +1. We need to create a *Mod Profile*. This is essentially the mod's page or listing. It contains all of a mod's metadata, including its files. + - Creating a *Mod Profile* requires an API call (`CreateModProfile`), which will return a `mod id`. +2. We can upload our files to the associated *Mod Profile* with our newly created `mod id`. + +Let's add a method that handles both steps: + +> [!NOTE] +> The following code takes advantage of `ModIOUnity.GetCurrentUploadHandle`, which can be used for obtaining the current upload progress. This isn't required, and you can use `await ModIOUnityAsync.UploadModFile(details)` instead if you prefer. + ```csharp -async void RequestEmailCode() +async Task UploadMod(string name, string summary, Texture2D logo, string path) { - Result result = await ModIOUnityAsync.RequestAuthenticationEmail("johndoe@gmail.com"); - - if (result.Succeeded()) + Debug.Log($"Starting upload: {name}"); + + ModProfileDetails details = new ModProfileDetails { - Debug.Log("Succeeded to send security code"); + name = name, + summary = summary, + logo = logo, + }; + + ResultAnd resultCreate = await ModIOUnityAsync.CreateModProfile(ModIOUnity.GenerateCreationToken(), details); + if (!resultCreate.result.Succeeded()) + { + Debug.LogError($"CreateModProfile failed: {resultCreate.result.message}"); + + return; } - else + + ModfileDetails modFile = new ModfileDetails + { + modId = resultCreate.value, + directory = path, + }; + + float progress = 0f; + + Task taskUpload = ModIOUnityAsync.UploadModfile(modFile); + while (!taskUpload.IsCompleted) { - Debug.Log("Failed to send security code to that email address"); + ProgressHandle progressHandle = ModIOUnity.GetCurrentUploadHandle(); + + if (!Mathf.Approximately(progressHandle.Progress, progress)) + { + progress = progressHandle.Progress; + Debug.Log($"Uploading: {name} ({Mathf.RoundToInt(progress * 100)}%)"); + } + + await Task.Delay(1000); + } + + if (!taskUpload.Result.Succeeded()) + { + Debug.LogError($"UploadModfile failed: {taskUpload.Result.message}"); + + return; } + + Debug.Log($"Finished upload: {name}"); } +``` + +All that's left now is to feed some mods to our brand new `UploadMod` method. After we test to see if any mods exist in `AddModsIfNone`, we will iterate our list of mods and upload them: + +> [!IMPORTANT] +> If you didn't generate dummy mods in the previous section, modify the below to suit your mod files. -async void SubmitCode(string userSecurityCode) +```csharp +async Task AddModsIfNone() { - Result result = await ModIOUnityAsync.SubmitEmailSecurityCode(userSecurityCode); - - if (result.Succeeded()) + // Return if any mods exist ... + + DummyModData[] mods = { - Debug.Log("You have successfully authenticated the user"); + // ... + }; + + foreach (DummyModData mod in mods) + { + await UploadMod(mod.name, mod.summary, mod.logo, mod.path); + // Directory.Delete(mod.path, true); // Uncomment if you generated dummy mods } - else +} +``` + +> [!NOTE] +> When uploading a mod, the plugin expects a directory (for each mod) that it will compress before uploading. You do not need to zip your files before uploading. + +That’s it! Enter Play mode now and, after authentication, the Unity console should come to life with the upload progress of your mods. If you're eager, you can view the mods as soon as they're uploaded by going to your game's mod.io page and using the web interface. + +## Searching for Mods + +Searching for mods is a simple task — we've actually seen it already in the [adding mods](#adding-mods) section. To get a list of all1 available mods you can use the `GetMods` method: + +```csharp +using System; // Add this to the top of your class + +async Task GetAllMods() +{ + ResultAnd resultAnd = await ModIOUnityAsync.GetMods(new SearchFilter()); + if (!resultAnd.result.Succeeded()) { - Debug.Log("Failed to authenticate the user"); + Debug.LogError($"GetMods failed: {resultAnd.result.message}"); + + return Array.Empty(); } + + return resultAnd.value.modProfiles; } ``` -### Get Mod profiles from the mod.io server +> [!IMPORTANT] +> A *Mod Profile* is a read-only snapshot of the state of a mod. It is not a unique or dynamic class. Compare `ModProfile.id` if you want to determine whether two Mod Profiles represent the same mod. + +If we add the above to our example class, and then head back up to our `OnAuth` method we can quickly log a list of all1 of our available mods: + ```csharp -async void Example() +using System.Linq; // Add this to the top of your class + +ModProfile[] allMods; + +async void OnAuth() { - // create a filter to retreive the first ten mods for your game - SearchFilter filter = new SearchFilter(); - filter.SetPageIndex(0); - filter.SetPageSize(10); + // ... - ResultAnd response = await ModIOUnityAsync.GetMods(filter); + allMods = await GetAllMods(); + Debug.Log($"Available mods:\n{string.Join("\n", allMods.Select(mod => $"{mod.name} (id: {mod.id.id})"))}"); +} +``` - if (response.result.Succeeded()) +We write *all1* because while using the default *Search Filter* settings will return all of *your* mods, this is only because you don't have many. This brings us to *Search Filters*. + +### Search Filters + +The maximum number of results returned can be set in the Search Filter using its `SetPageSize()` method. However, the default value of 100 is also the limit. In order to return later results, you can use the Search Filter's `SetPageIndex()` method. + +This is fairly simple in practice and is explained best with the following snippet: + +```csharp +var searchFilter = new SearchFilter(); +searchFilter.SetPageSize(10); +searchFilter.SetPageIndex(0); // Will return results 1-10 +searchFilter.SetPageIndex(1); // Will return results 11-20 +searchFilter.SetPageIndex(2); // Will return results 21-30 + +// You can also set pageIndex and pageSize using the constructor +new SearchFilter(0, 10); // Will return results 1-10 +new SearchFilter(1, 10); // Will return results 11-20 +new SearchFilter(2, 10); // Will return results 21-30 +``` + +> [!NOTE] +> Search Filters have a number of options for filtering and ordering your results. See the [documentation](https://sdkdocs.mod.io/unity/) (or use code completion in your IDE) for its available options. + +### Downloading Images + +More specifically: downloading a *Mod Profile's* images. We'll cover subscribing to and installing mods soon. + +A common feature when listing mods is to display an image along with its name and summary. Metadata images such as logos, screenshots, and avatars don't require subscribing to a mod to view them, and can be downloaded separately from a mod's in-game files. + +As we know, [all mods have a logo](#adding-mods). So let's write a short method that selects a random mod, downloads its logo and displays it alongside its name: + +> [!NOTE] +> Below is a screenshot of the UI we're using to utilize the method. You can use this as a guide for your own or display the result however you'd like! +> +> ![Auth Form Example](Example/Images/random_mod_example.png) + +```csharp +[SerializeField] Text randomName; +[SerializeField] Image randomLogo; + +async void SetRandomMod() +{ + ModProfile modProfile = allMods[UnityEngine.Random.Range(0, allMods.Length)]; + + randomName.text = modProfile.name; + + ResultAnd resultAnd = await ModIOUnityAsync.DownloadTexture(modProfile.logoImage_320x180); + if (!resultAnd.result.Succeeded()) { - Debug.Log("ModPage has " + response.value.modProfiles.Length + " mods"); + Debug.LogError($"DownloadTexture failed: {resultAnd.result.message}"); + + return; } - else + + Texture2D logo = resultAnd.value; + randomLogo.sprite = Sprite.Create(logo, new Rect(0, 0, logo.width, logo.height), Vector2.zero); +} +``` + +> [!WARNING] +> The code above relies on `allMods`, which is set in the first [searching for mods](#searching-for-mods) section. **Ensure that `allMods` has been set before running this method.** + +This method is downloading the smallest version of the logo, `logoImage_320x180`. However, Mod Profiles have a number of sizes for each image. See the [documentation](https://sdkdocs.mod.io/unity/) (or use code completion in your IDE) to view available options. + +## Getting Subscribed Mods + +We're going to cover mod subscriptions in what will seem like a backward way. First, we'll learn how to get a list of our subscribed mods, then we'll learn how to subscribe to a mod. + +The reason we do it this way is because subscribed mods are cached locally, so we avoid redundant API calls if we're already subscribed. + +With that in mind, the rest is quite straightforward: + +```csharp +static ModProfile[] GetSubscribedMods() +{ + SubscribedMod[] subscribed = ModIOUnity.GetSubscribedMods(out Result result); + if (!result.Succeeded()) { - Debug.Log("failed to get mods"); + Debug.LogError($"GetSubscribedMods failed: {result.message}"); + + return Array.Empty(); } + + return subscribed.Select(mod => mod.modProfile).ToArray(); } ``` -## Submitting mods -You can also submit mods directly from the plugin. Refer to the documentation for methods such as `ModIOUnity.CreateModProfile` and `ModIOUnity.UploadModfile`. +Getting the user's subscribed mods first requires a call to `FetchUpdates()`. This method synchronises the cached local state with mod.io (subscriptions, ratings, etc.). This is an expensive method and usually only needs to be called on authentication, as local subscription changes are reflected automatically. However if, for example, you change subscriptions using the web interface, they won't be reflected in your game until `FetchUpdates()` has been called. -Users can also submit mods directly from the mod.io website by going to your game profile page. Simply create an account and upload mods directly. +We'll make use of the above from our `OnAuth()` method, after we log all available mods. First, we call `FetchUpdates()` to synchronize our local state, and then we can get an array of our subscribed mods: -### Adding a mod -Here we go through the mod addition flow. Generate Token, Create Mod Profile, and Upload Mod File ```csharp -public async void CreateMod() +async void OnAuth() { - //token used to create mod profile - var token = ModIOUnity.GenerateCreationToken(); + // ... + + Result resultUpdate = await ModIOUnityAsync.FetchUpdates(); // Synchronize our local state + if (!resultUpdate.Succeeded()) + { + Debug.LogError($"FetchUpdates failed: {resultUpdate.message}"); + } - //Mod profile specifics - ModProfileDetails modDetails = new ModProfileDetails - { - logo = GetTexture(),//the texture you will use for this mod's logo - summary = "A brief summary of the mod.", - name = "Mod Name" - }; - - //create the mod profile - var createResultAnd = await ModIOUnityAsync.CreateModProfile(token, modDetails); - if(!createResultAnd.result.Succeeded()) - return;//create mod unsuccessful - - //Points to a folder where all mod files are located (folder cannot be empty) - ModfileDetails modFile = new ModfileDetails - { - modId = createResultAnd.value, - directory = "files/mods/mod_123" - }; + ModProfile[] subscribedMods = GetSubscribedMods(); + Debug.Log($"Subscribed mods:\n{(subscribedMods.Length > 0 ? string.Join("\n", subscribedMods.Select(mod => $"{mod.name} (id: {mod.id.id})")) : "None")}"); +} +``` + +> [!IMPORTANT] +> A *Mod Profile* is a read-only snapshot of the state of a mod. It is not a unique or dynamic class. Compare `ModProfile.id` if you want to determine whether two Mod Profiles represent the same mod. + +For now, you should see "*Subscribed mods: None*" in the log if you enter Play mode. But we're going to rectify that *very* soon. - //upload the file to the mod profile - var result = await ModIOUnityAsync.UploadModfile(modFile); - if(result.Succeeded()) +## Subscribing to Mods + +> [!NOTE] +> The web interface at your game's mod.io page can also be used to subscribe to mods. However, you'll need to exit and enter Play mode to see the changes, as `FetchUpdates()` needs to be run to synchronise the local state. + +Subscribing to mods is very simple. The following code adds a check to see if we're already subscribed and then logs the name of the mod once the subscription is successful. The only *actual* requirement is the call to `SubscribeToMod()`: + +```csharp +async Task SubscribeToMod(ModId modId, ModProfile[] subscribed) +{ + if (subscribed.Any(mod => mod.id == modId)) + return; + + Result result = await ModIOUnityAsync.SubscribeToMod(modId); + if (!result.Succeeded()) + { + Debug.LogError($"SubscribeToMod failed: {result.message}"); + + return; + } + + Debug.Log($"Subscribed to mod: {allMods.First(mod => mod.id == modId).name}"); +} +``` + +> [!NOTE] +> Inefficient code is used here to reduce the sample's complexity. Translating subscriptions to a `List` and keeping a `Dictionary` would be more efficient solutions for these look-ups. + +To test it out: + +1. Enter Play mode, and in the "Available mods" log, locate the "Ten New Missions" id. +2. In your `OnAuth()` method, after we log all subscribed mods add the following line (replace `YOUR_MOD_ID` with the id from step 1): + ```csharp + async void OnAuth() { - //Upload file successful! + // ... + + await SubscribeToMod(new ModId(YOUR_MOD_ID), subscribedMods); } + ``` +3. Restart Play mode and you should see "Ten New Missions" in your "Subscribed mods" log! + +## Installing Mods + +Now, the moment we've all been waiting for. Downloading, installing, updating, and deleting mods are all handled automatically by the plugin. However, it requires both an authenticated user and to opt-in to the behaviour. The latter is done via a simple `EnableModManagement()` call. This method requires a delegate argument that exposes us to the various events that mod management emits. + +In the following code we're going to enable mod management and also log the download progress when a mod is being downloaded: + +```csharp +string downloadName = ""; +float downloadProgress; + +void EnableModManagement() +{ + void HandleModManagementEvent(ModManagementEventType eventType, ModId modId, Result eventResult) + { + switch (eventType) + { + case ModManagementEventType.DownloadStarted: + downloadName = allMods.First(mod => mod.id == modId).name; + Debug.Log($"Downloading {downloadName}"); + break; + case ModManagementEventType.Downloaded: + Debug.Log($"Downloaded {downloadName}"); + downloadName = string.Empty; + break; + case ModManagementEventType.DownloadFailed: + Debug.Log($"Download failed {downloadName}"); + downloadName = string.Empty; + break; + } + } + + ModIOUnity.EnableModManagement(HandleModManagementEvent); +} + +void Update() +{ + if (downloadName.Length == 0) + return; + + ProgressHandle progress = ModIOUnity.GetCurrentModManagementOperation(); + + if (Mathf.Approximately(progress.Progress, downloadProgress)) + return; + + downloadProgress = progress.Progress; + Debug.Log($"Downloading {downloadName} ({Mathf.RoundToInt(downloadProgress * 100)}%)"); +} +``` + +In a real implementation, you'll likely track the `modId`'s download and install progress separately to display in your UI. But, this should give you an idea of what's possible with the mod management feature. + +> [!NOTE] +> There are a number of mod management events available. See the [documentation](https://sdkdocs.mod.io/unity/) (or use code completion in your IDE) for a complete list. + +## Using Mods + +We’re nearing the end now. You've [initialized](#initialization). You've [authenticated](#authentication). You've [uploaded](#adding-mods). You've [searched](#searching-for-mods). You've [subscribed](#subscribing-to-mods). You've [installed](#installing-mods). It's all led to this single question: + +*"How do I find installed mods?"* + +The answer is very straight forward: `GetInstalledModsForUser()`. Using this is as simple as expected: + +```csharp +void LogInstalledModsForUser() +{ + UserInstalledMod[] installedMods = ModIOUnity.GetInstalledModsForUser(out Result result); + if (!result.Succeeded()) + { + Debug.LogError($"GetInstalledModsForUser failed: {result.message}"); + + return; + } + + Debug.Log($"Installed mods:\n{(installedMods.Length > 0 ? string.Join("\n", installedMods.Select(mod => $"{mod.modProfile.name} ({mod.directory})")) : "None")}"); +} +``` + +We're currently logging each installed mod and the path to its files (`UserInstalledMod.directory`). However, *you* are only limited by how you want to utilize user-generated content. A mod's installation directory is exactly the same as when we uploaded it: uncompressed and ready for action. + +That’s it, we’re done. The time has come to build a bridge to your creator community using mod.io. + +Please join us on our [Discord server](https://discord.mod.io) if you have any questions or need some help. + +## Complete Class + +> [!NOTE] +> You can also find the following class (along with an example scene) in `Assets/Plugins/mod.io/Example`. + +
+ +Click to expand + +```csharp +using System; +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using UnityEngine; +using UnityEngine.Networking; +using UnityEngine.UI; + +namespace ModIO +{ + public class ModIOExample : MonoBehaviour + { + // Generating Dummy Mods + static readonly byte[] Megabyte = new byte[1024 * 1024]; + static readonly System.Random RandomBytes = new System.Random(); + + [Header("Authentication")] + [SerializeField] GameObject authContainer; + [SerializeField] InputField authInput; + [SerializeField] Button authRequest; + [SerializeField] Button authSubmit; + + // Downloading Images + [Header("Random Mod")] + [SerializeField] GameObject randomContainer; + [SerializeField] Text randomName; + [SerializeField] Image randomLogo; + [SerializeField] Button randomButton; + + // Searching for Mods + ModProfile[] allMods; + + // Installing Mods + string downloadName = ""; + float downloadProgress; + + void Awake() + { + randomContainer.SetActive(false); + } + + #region Initialization + + void Start() + { + Result result = ModIOUnity.InitializeForUser("default"); + if (!result.Succeeded()) + return; + + Debug.Log("ModIO plugin initialized!"); + + OnInit(); + } + + async void OnInit() + { + Result result = await ModIOUnityAsync.IsAuthenticated(); + if (result.Succeeded()) + { + OnAuth(); + + return; + } + + authRequest.onClick.AddListener(RequestAuthCode); + authSubmit.onClick.AddListener(SubmitAuthCode); + } + + #endregion + + #region Authentication + + async void RequestAuthCode() + { + Result result = await ModIOUnityAsync.RequestAuthenticationEmail(authInput.text); + if (!result.Succeeded()) + { + Debug.LogError($"RequestAuthenticationEmail failed: {result.message}"); + + return; + } + + Debug.Log($"Authentication email sent to: {authInput.text}"); + + authInput.text = string.Empty; + } + + async void SubmitAuthCode() + { + Result result = await ModIOUnityAsync.SubmitEmailSecurityCode(authInput.text); + if (!result.Succeeded()) + { + Debug.LogError($"SubmitEmailSecurityCode failed: {result.message}"); + + return; + } + + OnAuth(); + } + + #endregion + + async void OnAuth() + { + ResultAnd result = await ModIOUnityAsync.GetCurrentUser(); + if (!result.result.Succeeded()) + { + Debug.LogError($"GetCurrentUser failed: {result.result.message}"); + } + + Debug.Log($"Authenticated user: {result.value.username}"); + + authContainer.SetActive(false); + + await AddModsIfNone(); + + allMods = await GetAllMods(); + Debug.Log($"Available mods:\n{string.Join("\n", allMods.Select(mod => $"{mod.name} (id: {mod.id.id})"))}"); + + randomButton.onClick.AddListener(SetRandomMod); + randomContainer.SetActive(true); + SetRandomMod(); + + ModProfile[] subscribedMods = await GetSubscribedMods(); + Debug.Log($"Subscribed mods:\n{(subscribedMods.Length > 0 ? string.Join("\n", subscribedMods.Select(mod => $"{mod.name} (id: {mod.id.id})")) : "None")}"); + + if (allMods.Length > 0) + { + int index = Array.FindIndex(allMods, mod => mod.name == "Ten New Missions"); + if (index != -1) + await SubscribeToMod(allMods[index].id, subscribedMods); + else + Debug.Log("Couldn't find Ten New Missions mod, not subscribing"); + } else + Debug.Log("No mods found, not subscribing"); + + EnableModManagement(); + + LogInstalledModsForUser(); + } + + #region Adding Mods + + async Task AddModsIfNone() + { + ResultAnd resultAnd = await ModIOUnityAsync.GetMods(new SearchFilter()); + if (!resultAnd.result.Succeeded()) + { + Debug.LogError($"GetMods failed: {resultAnd.result.message}"); + + return; + } + + if (resultAnd.value.modProfiles.Length != 0) + { + Debug.Log($"{resultAnd.value.modProfiles.Length} mods found. Not adding mods"); + + return; + } + + DummyModData[] mods = + { + await GenerateDummyMod("Cool Weapon", "A really cool weapon.", "24466B", "FDA576", 10), + await GenerateDummyMod("Funny Sound Pack", "You'll laugh a lot using this.", "B85675", "633E63", 50), + await GenerateDummyMod("Klingon Language Pack", "tlhIngan Hol Dajatlh'a'?", "93681C", "FFEAD0", 1), + await GenerateDummyMod("Ten New Missions", "Ported from the sequel to the prequel!", "FDA576", "D45B7A", 99), + }; + + foreach (DummyModData mod in mods) + { + await UploadMod(mod.name, mod.summary, mod.logo, mod.path); + Directory.Delete(mod.path, true); + } + } + + #endregion + + #region Uploading Mods + + static async Task UploadMod(string name, string summary, Texture2D logo, string path) + { + Debug.Log($"Starting upload: {name}"); + + ModProfileDetails details = new ModProfileDetails + { + name = name, + summary = summary, + logo = logo, + }; + + ResultAnd resultCreate = await ModIOUnityAsync.CreateModProfile(ModIOUnity.GenerateCreationToken(), details); + if (!resultCreate.result.Succeeded()) + { + Debug.LogError($"CreateModProfile failed: {resultCreate.result.message}"); + + return; + } + + ModfileDetails modFile = new ModfileDetails + { + modId = resultCreate.value, + directory = path, + }; + + float progress = 0f; + + Task taskUpload = ModIOUnityAsync.UploadModfile(modFile); + while (!taskUpload.IsCompleted) + { + ProgressHandle progressHandle = ModIOUnity.GetCurrentUploadHandle(); + + if (!Mathf.Approximately(progressHandle.Progress, progress)) + { + progress = progressHandle.Progress; + Debug.Log($"Uploading: {name} ({Mathf.RoundToInt(progress * 100)}%)"); + } + + await Task.Delay(1000); + } + + if (!taskUpload.Result.Succeeded()) + { + Debug.LogError($"UploadModfile failed: {taskUpload.Result.message}"); + + return; + } + + Debug.Log($"Finished upload: {name}"); + } + + #endregion + + #region Searching for Mods + + async Task GetAllMods() + { + ResultAnd resultAnd = await ModIOUnityAsync.GetMods(new SearchFilter()); + if (!resultAnd.result.Succeeded()) + { + Debug.LogError($"GetMods failed: {resultAnd.result.message}"); + + return Array.Empty(); + } + + return resultAnd.value.modProfiles; + } + + #endregion + + #region Downloading Images + + async void SetRandomMod() + { + ModProfile modProfile = allMods[UnityEngine.Random.Range(0, allMods.Length)]; + + randomName.text = modProfile.name; + + ResultAnd resultAnd = await ModIOUnityAsync.DownloadTexture(modProfile.logoImage_320x180); + if (!resultAnd.result.Succeeded()) + { + Debug.LogError($"DownloadTexture failed: {resultAnd.result.message}"); + + return; + } + + Texture2D logo = resultAnd.value; + randomLogo.sprite = Sprite.Create(logo, new Rect(0, 0, logo.width, logo.height), Vector2.zero); + } + + #endregion + + #region Getting Subscribed Mods + + static async Task GetSubscribedMods() + { + Result resultUpdate = await ModIOUnityAsync.FetchUpdates(); + if (!resultUpdate.Succeeded()) + { + Debug.LogError($"FetchUpdates failed: {resultUpdate.message}"); + + return Array.Empty(); + } + + SubscribedMod[] subscribed = ModIOUnity.GetSubscribedMods(out Result resultSubscribed); + if (!resultSubscribed.Succeeded()) + { + Debug.LogError($"GetSubscribedMods failed: {resultSubscribed.message}"); + + return Array.Empty(); + } + + return subscribed.Select(mod => mod.modProfile).ToArray(); + } + + #endregion + + #region Subscribing to Mods + + async Task SubscribeToMod(ModId modId, ModProfile[] subscribed) + { + if (subscribed.Any(mod => mod.id == modId)) + return; + + Result result = await ModIOUnityAsync.SubscribeToMod(modId); + if (!result.Succeeded()) + { + Debug.LogError($"SubscribeToMod failed: {result.message}"); + + return; + } + + Debug.Log($"Subscribed to mod: {allMods.First(mod => mod.id == modId).name}"); + } + + #endregion + + #region Installing Mods + + void EnableModManagement() + { + void HandleModManagementEvent(ModManagementEventType eventType, ModId modId, Result eventResult) + { + switch (eventType) + { + case ModManagementEventType.DownloadStarted: + downloadName = allMods.First(mod => mod.id == modId).name; + Debug.Log($"Downloading {downloadName}"); + break; + case ModManagementEventType.Downloaded: + Debug.Log($"Downloaded {downloadName}"); + downloadName = string.Empty; + break; + case ModManagementEventType.DownloadFailed: + Debug.Log($"Download failed {downloadName}"); + downloadName = string.Empty; + break; + } + } + + ModIOUnity.EnableModManagement(HandleModManagementEvent); + } + + void Update() + { + if (downloadName.Length == 0) + return; + + ProgressHandle progress = ModIOUnity.GetCurrentModManagementOperation(); + + if (Mathf.Approximately(progress.Progress, downloadProgress)) + return; + + downloadProgress = progress.Progress; + Debug.Log($"Downloading {downloadName} ({Mathf.RoundToInt(downloadProgress * 100)}%)"); + } + + #endregion + + #region Using Mods + + static void LogInstalledModsForUser() + { + UserInstalledMod[] installedMods = ModIOUnity.GetInstalledModsForUser(out Result result); + if (!result.Succeeded()) + { + Debug.LogError($"GetInstalledModsForUser failed: {result.message}"); + + return; + } + + Debug.Log($"Installed mods:\n{(installedMods.Length > 0 ? string.Join("\n", installedMods.Select(mod => $"{mod.modProfile.name} ({mod.directory})")) : "None")}"); + } + + #endregion + + #region Generate Dummy Mods + + static async Task GenerateDummyMod(string name, string summary, string backgroundColor, string textColor, int megabytes) + { + Debug.Log($"Writing temporary mod file: {name}"); + + string path = Path.Combine(Application.dataPath, $"../_temp_dummy_mods/{name}"); + Directory.CreateDirectory(path); + + using (FileStream fs = File.OpenWrite(Path.Combine(path, $"{name}.dummy"))) + { + for (int i = 0; i < megabytes; i++) + { + RandomBytes.NextBytes(Megabyte); + await fs.WriteAsync(Megabyte, 0, Megabyte.Length); + } + } + + return new DummyModData( + name, + summary, + await GenerateLogo(name.Replace(' ', '+'), backgroundColor, textColor), + path + ); + } + + static async Task GenerateLogo(string text, string backgroundColor, string textColor) + { + UnityWebRequest request = UnityWebRequestTexture.GetTexture($"https://placehold.co/512x288/{backgroundColor}/{textColor}.png?text={text}"); + request.SendWebRequest(); + + while (!request.isDone) + await Task.Yield(); + + if (request.result != UnityWebRequest.Result.Success) + { + Debug.LogError($"GenerateLogo failed: {request.error}"); + + return null; + } + + return DownloadHandlerTexture.GetContent(request); + } + + readonly struct DummyModData + { + public readonly string name; + public readonly string summary; + public readonly Texture2D logo; + public readonly string path; + + public DummyModData(string name, string summary, Texture2D logo, string path) + { + this.name = name; + this.summary = summary; + this.logo = logo; + this.path = path; + } + } + + #endregion + } } ``` -### Loading mods -Here is an example that grabs all mods installed for the current user, finds the png files in the mod's directory if they are tagged as a "Texture" and then loads them into a Texture2D asset. +
+ +## Browser UI + +> [!IMPORTANT] +> The Browser UI relies on the *config file* that is configured during the [setup instructions](#setup) above. Ensure you have completed all of those steps before proceeding. + +The Browser UI is incredibly simple to set up, and completely avoids the complexity that can come with building a full-featured mod browser: + +1. Drag the Browser UI prefab at `Assets/Plugins/mod.io/UI/Examples/ModIOBrowser` into your scene. +2. Call its `ModIOBrowser.Browser.Open()` method to show the browser in your scene. + +If you want a fuller understanding of the plugin and its features, we recommend following the [getting started](#getting-started) guide above. + +

+ Browser UI screenshot + Browser UI screenshot +

+ +# Marketplace +The mod.io SDK supports full monetization features, allowing you to sell a per-game virtual currency to your players that +they can use to purchase mods, with a share of the revenue split between creators and your studio. Every platform +requires specific setup for monetization features to work, with regards to the virtual currency configuration and API +calls. The following documentation walks you through the setup process and gives example usages. The mod.io monetization +features are enabled as part of the onboarding process on your game profile. Once that is setup, there is nothing +further you need to do for initialization in the SDK. + +### Enable Marketplace in the Plugin +The first thing you will need to do is enable the marketplace toggle inside your config. This informs the plugin that your game profile has marketplace features enabled and will behave accordingly. + +> [!NOTE] +> You can quickly access your config file by going to Tools > mod.io > Edit Settings + +### Get User Wallet Balance +Returns the current user's token balance ```csharp -public void LoadModExample() +async void GetUserWalletBalanceExample() { - UserInstalledMod[] mods = ModIOUnity.GetInstalledModsForUser(out Result result); - if (result.Succeeded()) + var response = await ModIOUnityAsync.GetUserWalletBalance(); + if (response.result.Succeeded()) { - foreach(var mod in mods) - { - //Tags are USER defined strings for a game and are setup in the web portal. - string textureTag = "Texture"; - - string directoryWithInstalledMod = mod.directory; - - //Optionally, you may want to use tags to help you determine the files to look for in an installed mod folder - if(!mod.modProfile.tags.Contains(textureTag)) - { - //Get all files in a directory - string[] filePaths = System.IO.Directory.GetFiles(directoryWithInstalledMod); - foreach(var path in filePaths) - { - //Find .png files so that we can convert them into textures - if(path.EndsWith(".png")) - { - Texture2D tex = new Texture2D(1024, 1024); - - //Load a texture from directory - tex.LoadImage(File.ReadAllBytes(path)); - - //Now you can replace the current texture in your game with the new one - } - } - } - } + Debug.Log($"User has a balance of {response.value.balance } tokens."); + } + else + { + Debug.Log("failed to get balance"); } } ``` -## Dependencies -The [mod.io](https://mod.io) Unity Plugin requires the functionality of two other open-source Unity plugins to run. These are included as libraries in the UnityPackage in the `Assets/Plugins/mod.io/ThirdParty` directory: -* Json.Net for improved Json serialization. ([GitHub Repo](https://github.com/SaladLab/Json.Net.Unity3D) || [Unity Asset Store Page](https://assetstore.unity.com/packages/tools/input-management/json-net-for-unity-11347)) -* SharpZipLib to zip and unzip transmitted files. ([GitHub Repo](https://github.com/icsharpcode/SharpZipLib)) - -## Benefits -mod.io offers the same core functionality as Steamworks Workshop (1 click mod installs in-game), plus mod hosting, moderation and all of the critical pieces needed. Where we differ is our approach to modding and the flexibility a REST API offers. For example: +### Purchase Item +Purchases a mod using Tokens +```csharp +async void PurchaseItemExample() +{ + string idempotent = $"aUniqueKey";//Unique key used to prevent duplicate purchases + ModId modId = new ModId(1234);//Mod to purchase + int displayAmount = 12;//Price displayed to the player (Must match mod price) + var response = await ModIOUnityAsync.PurchaseItem(modId, displayAmount, idempotent); + if (response.result.Succeeded()) + { + Debug.Log("Completed Purchase"); + } + else + { + Debug.Log("failed to complete purchase"); + } +} +``` -* We make mods cross platform accessible. That means users can upload a mod on PC and someone else can play it on the Xbox, for example. -* Our API is not dependent on a client, platform or SDK, allowing you to run mod.io in many places such as your homepage and launchers. -* Designing a good mod browsing UI is hard, our plugin ships with a UI built in to save you a lot of effort and help your mods stand out. -* We don’t apply rules globally, so if you want to enable patronage, sales or other experimental features, reach out to discuss. -* Our platform is built by the super experienced ModDB.com team and is continually improving for your benefit. -* Your community can consume the mod.io API to build modding fan sites or discord bots if they want. +### Get User Purchases +Returns the current user's purchased Mods +```csharp +async void GetUserPurchases() +{ + ModIOUnity.GetPurchasedMods(out Result result); -## Game studios and Publishers -If you need assistance with 1st party approvals, or require a private, white-label UGC solution. [Contact us](mailto:developers@mod.io) to discuss. + if (result.Succeeded()) + { + foreach (var modProfile in response.value.modProfiles) + { + Debug.Log($"User owns mod with id: {modProfile.id}"); + } + } + else + { + Debug.Log("Failed to get purchases"); + } +} +``` -## Contributions Welcome -Our Unity plugin is public and open source. Game developers are welcome to utilize it directly, to add support for mods in their games, or fork it for their games customized use. Want to make changes to our plugin? Submit a pull request with your recommended changes to be reviewed. +### Syncing Purchases with Steam +If you setup SKUs for your users to purchase tokens through steam, you can sync these purchases with the mod.io server with the `SyncEntitlments` method. If a user purchases a token pack on steam, you can add the SKU used for that token pack on the Web by going to Admin > Monetization > Manage SKUs. Then when you use SyncEntitlments it will consume the purchased item and add those tokens to the user's wallet. Below is a very simple example of how to use the method. +> [!NOTE] +> SyncEntitlements will automatically be run when using ModIOUnity.FetchUpdates as well -## Other Repositories -Our aim with [mod.io](https://mod.io), is to provide an [open modding API](https://docs.mod.io). You are welcome to [view, fork and contribute to our other codebases](https://github.com/modio) in use. +```csharp +async void SyncEntitlements() + { + Result result = await ModIOUnityAsync.SyncEntitlements(); + if (response.result.Succeeded()) + { + Debug.Log("Entitlements are synced"); + } + else + { + Debug.Log("failed to sync"); + } + } +``` +> [!NOTE] +> This method will also work with console platforms diff --git a/Runtime/Classes/ModProfileDetails.cs b/Runtime/Classes/ModProfileDetails.cs index 1fde29b..a60733a 100644 --- a/Runtime/Classes/ModProfileDetails.cs +++ b/Runtime/Classes/ModProfileDetails.cs @@ -49,6 +49,9 @@ public class ModProfileDetails public List images; #endif + /// (Optional) If set, are named according to this array. + public string[] imagesNames; + /// /// Name of your mod /// @@ -91,14 +94,14 @@ public class ModProfileDetails /// for infinite subscribers. /// /// Can be null - public int? maxSubscribers; + public int? stock; /// /// This is a Bitwise enum so you can assign multiple values /// - /// + /// /// Can be null - public ContentWarnings? contentWarning; + public MaturityOptions? maturityOptions; /// /// Your own custom metadata that can be uploaded with the mod profile. (This is for the @@ -111,7 +114,7 @@ public class ModProfileDetails /// /// The tags this mod profile has. Only tags that are supported by the parent game can be - /// applied. (Invalid tags will be ignored) + /// applied. An empty array will clear all tags, use null for no change. (Invalid tags will be ignored) /// /// Can be null public string[] tags; @@ -125,6 +128,26 @@ public class ModProfileDetails /// Can be null public CommunityOptions? communityOptions = CommunityOptions.AllowCommenting; + /// + /// The price of the mod + /// + /// NOTE: The value of this field will be ignored if the parent game's queue is enabled + /// (see CurationOption in Game Object) + /// + /// Can be null + public int? price; + + /// + /// Monetization options enabled by the mod creator. + /// You must set the team before setting monetization to live. + /// In order for a marketplace mod to go live both and need to be set. + /// + /// NOTE: The value of this field will be ignored if the parent game's queue is enabled + /// (see CurationOption in Game Object) + /// + /// Can be null + public MonetizationOption? monetizationOptions; + internal byte[] GetLogo() { #if UNITY_2019_4_OR_NEWER @@ -135,7 +158,7 @@ internal byte[] GetLogo() return logo; #endif } - + internal List GetGalleryImages() { #if UNITY_2019_4_OR_NEWER diff --git a/Runtime/Classes/ModfileDetails.cs b/Runtime/Classes/ModfileDetails.cs index f17970c..713b922 100644 --- a/Runtime/Classes/ModfileDetails.cs +++ b/Runtime/Classes/ModfileDetails.cs @@ -10,7 +10,7 @@ public class ModfileDetails /// /// The directory containing all of the files that makeup the mod. The directory and all of /// its contents will be compressed and uploaded when submitted via - /// ModIOUnity.UploadModfile. + /// ModIOUnity.AddModfile. /// public string directory; @@ -29,5 +29,23 @@ public class ModfileDetails /// /// the metadata has a maximum size of 50,000 characters. public string metadata; + + /// + /// Required if the filedata parameter is omitted. The UUID of a completed multipart upload session. + /// + public string uploadId = null; + + /// + /// Default value is true. Flag this upload as the current release, this will change the modfile field + /// on the parent mod to the id of this file after upload. + /// + public bool active = true; + + /// + /// If platform filtering enabled An array containing one or more platforms this file is targeting. + /// Valid values can be found under the targeting a platform section. + /// + public string[] platforms = null; + } } diff --git a/Runtime/Classes/SearchFilter.cs b/Runtime/Classes/SearchFilter.cs index 054841a..9c5c567 100644 --- a/Runtime/Classes/SearchFilter.cs +++ b/Runtime/Classes/SearchFilter.cs @@ -1,5 +1,9 @@ -using System.Collections.Generic; -using ModIO.Implementation; +using ModIO.Implementation; +using ModIO.Implementation.API.Requests; +using System; +using System.Collections.Generic; +using UnityEngine; +using Logger = ModIO.Implementation.Logger; namespace ModIO { @@ -8,29 +12,109 @@ namespace ModIO /// /// /// + [Serializable] public class SearchFilter { - bool hasPageIndexBeenSet = false; - bool hasPageSizeBeenSet = false; - -#region Endpoint Parameters + #region Endpoint Parameters // These are for internal use. Do not use internal string sortFieldName = string.Empty; - internal bool isSortAscending = true; - internal SortModsBy sortBy = SortModsBy.DateSubmitted; + [SerializeField] internal bool isSortAscending = true; + [SerializeField] internal SortModsBy sortBy = SortModsBy.DateSubmitted; internal int pageIndex; internal int pageSize; - internal List searchPhrases = new List(); + internal Dictionary searchPhrases = new Dictionary(); internal List tags = new List(); internal List users = new List(); -#endregion + internal bool showMatureContent = false; + + [SerializeField] internal RevenueType revenueType = RevenueType.Free; + [SerializeField] internal int stock = Mods_DontShowSoldOut; + + /// + /// The search will now show sold out mods + /// + public void ShowSoldOut() => stock = Mods_ShowSoldOut; + const int Mods_ShowSoldOut = 0; + + /// + /// The search will now not show sold out mods + /// + public void DontShowSoldOut() => stock = Mods_DontShowSoldOut; + const int Mods_DontShowSoldOut = 1; + #endregion + + /// The search will skip pageIndex * pageSize results and return (up to) the following results. + /// + /// Limit the number of results returned (100 max). + ///

Use to skip results and return later results.

+ /// + public SearchFilter(int pageIndex = 0, int pageSize = 100) + { + SetPageIndex(pageIndex); + SetPageSize(pageSize); + } + + /// + /// Choose if the filter should include/exclude free or paid mods. + /// + /// + public RevenueType RevenueType + { + get => this.revenueType; + set => revenueType = value; + } + + public void ShowMatureContent(bool value) => showMatureContent = value; + /// /// Adds a phrase into the filter to be used when filtering mods in a request. /// /// the string to be added to the filter - public void AddSearchPhrase(string phrase) + /// (Optional) type of filter to be used with the text, defaults to Full text search + public void AddSearchPhrase(string phrase, FilterType filterType = FilterType.FullTextSearch) { - searchPhrases.Add(phrase); + string url = string.Empty; + switch (filterType) + { + case FilterType.FullTextSearch: + url += $"&{Filtering.FullTextSearch}{phrase}"; + break; + case FilterType.NotEqualTo: + url += $"&{Filtering.NotEqualTo}{phrase}"; + break; + case FilterType.Like: + url += $"&{Filtering.Like}{phrase}"; + break; + case FilterType.NotLike: + url += $"&{Filtering.NotLike}{phrase}"; + break; + case FilterType.In: + url += $"&{Filtering.In}{phrase}"; + break; + case FilterType.NotIn: + url += $"&{Filtering.NotIn}{phrase}"; + break; + case FilterType.Max: + url += $"&{Filtering.Max}{phrase}"; + break; + case FilterType.Min: + url += $"&{Filtering.Min}{phrase}"; + break; + case FilterType.BitwiseAnd: + url += $"&{Filtering.BitwiseAnd}{phrase}"; + break; + default: + break; + } + + if (searchPhrases.ContainsKey(filterType)) + { + searchPhrases[filterType] += url; + } + else + { + searchPhrases.Add(filterType, url); + } } /// @@ -52,11 +136,13 @@ public void AddTag(string tag) /// /// the category to sort the request /// - public void SortBy(SortModsBy category) + public void SetSortBy(SortModsBy category) { sortBy = category; } + public SortModsBy SortBy => sortBy; + /// /// Determines the order of the results being returned. eg should results be filtered from /// highest to lowest, or lowest to highest. @@ -68,30 +154,22 @@ public void SetToAscending(bool isAscending) } /// - /// Sets the zero based index of the page. eg if there are 1,000 results based on the filter - /// settings provided, and the page size is 100. Setting this to 1 will return the mods from - /// 100-200. Whereas setting this to 0 will return the first 100 results. + /// The search will skip pageIndex * pageSize results and return (up to) the following results. /// - /// /// public void SetPageIndex(int pageIndex) { - this.pageIndex = pageIndex; - hasPageIndexBeenSet = true; + this.pageIndex = pageIndex < 0 ? 0 : pageIndex; } /// - /// Sets the maximum page size of the request. eg if there are 50 results and the index is - /// set to 0. If the page size is set to 10 you will receive the first 10 results. If the - /// page size is set to 100 you will only receive the total 50 results, because there are - /// no more to be got. + ///

Limit the number of results returned (100 max).

+ ///

Use to skip results and return later results.

///
- /// /// public void SetPageSize(int pageSize) { - this.pageSize = pageSize; - hasPageSizeBeenSet = true; + this.pageSize = pageSize < 1 ? 1 : pageSize > 100 ? 100 : pageSize; } /// @@ -115,28 +193,14 @@ public void AddUser(long userId) /// public bool IsSearchFilterValid(out Result result) { - bool paginationSet = hasPageIndexBeenSet && hasPageSizeBeenSet; - // TODO Check for illegal characters in search phrase? // TODO Check if tags are correct? Or will they just get ignored? // ^ Perhaps log a warning if non-fatal - if(!paginationSet) - { - result = ResultBuilder.Create(ResultCode.InvalidParameter_PaginationParams); - Logger.Log( - LogLevel.Error, - "The pagination parameters haven't been set for this filter. Make sure to " - + "use SetPageIndex(int) and SetPageSize(int) before using a filter."); - } - else - { - result = ResultBuilder.Success; - return true; - } + result = ResultBuilder.Success; - return false; + return true; } } } diff --git a/Runtime/Enums/AuthenticationServiceProvider.cs b/Runtime/Enums/AuthenticationServiceProvider.cs index c0ffc84..aa0d695 100644 --- a/Runtime/Enums/AuthenticationServiceProvider.cs +++ b/Runtime/Enums/AuthenticationServiceProvider.cs @@ -11,7 +11,9 @@ public enum AuthenticationServiceProvider Switch, Discord, Google, - PlayStation + PlayStation, + OpenId, + None, } public static class AuthenticationServiceProviderExtensions @@ -52,6 +54,12 @@ public static string GetProviderName(this AuthenticationServiceProvider provider case AuthenticationServiceProvider.PlayStation: providerName = "psnauth"; break; + case AuthenticationServiceProvider.OpenId: + providerName = "openidauth"; + break; + case AuthenticationServiceProvider.None: + providerName = "none"; + break; } return providerName; @@ -93,6 +101,9 @@ public static string GetTokenFieldName(this AuthenticationServiceProvider provid case AuthenticationServiceProvider.PlayStation: tokenFieldName = "auth_code"; break; + case AuthenticationServiceProvider.OpenId: + tokenFieldName = "id_token"; + break; } return tokenFieldName; diff --git a/Runtime/Enums/ContentWarnings.cs b/Runtime/Enums/ContentWarnings.cs deleted file mode 100644 index 6e4e38b..0000000 --- a/Runtime/Enums/ContentWarnings.cs +++ /dev/null @@ -1,13 +0,0 @@ - -namespace ModIO -{ - [System.Flags] - public enum ContentWarnings - { - None = 0x00, - Alcohol = 0x01, - Drugs = 0x02, - Violence = 0x04, - Explicit = 0x08, - } -} diff --git a/Runtime/Enums/FilterType.cs b/Runtime/Enums/FilterType.cs new file mode 100644 index 0000000..c1128d2 --- /dev/null +++ b/Runtime/Enums/FilterType.cs @@ -0,0 +1,20 @@ + +namespace ModIO +{ + /// + /// Type of search to be used in the SearchFilter + /// + /// + public enum FilterType + { + FullTextSearch, + NotEqualTo, + Like, + NotLike, + In, + NotIn, + Max, + Min, + BitwiseAnd + } +} diff --git a/Platform/SystemIO/ModIO.Implementation.Platform/SettingsAsset_Android.cs.meta b/Runtime/Enums/FilterType.cs.meta similarity index 83% rename from Platform/SystemIO/ModIO.Implementation.Platform/SettingsAsset_Android.cs.meta rename to Runtime/Enums/FilterType.cs.meta index c90f1ee..317b87e 100644 --- a/Platform/SystemIO/ModIO.Implementation.Platform/SettingsAsset_Android.cs.meta +++ b/Runtime/Enums/FilterType.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: e027ce138ca5a054aa078d9eccbdfa53 +guid: 93e88766dec8942788d9eee41e659761 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Runtime/Enums/GameMonetizationOptions.cs b/Runtime/Enums/GameMonetizationOptions.cs new file mode 100644 index 0000000..afe8d48 --- /dev/null +++ b/Runtime/Enums/GameMonetizationOptions.cs @@ -0,0 +1,14 @@ +using System; + +namespace ModIO +{ + [Flags] + public enum GameMonetizationOptions + { + All = 0b0000, + Enabled = 0b0001, + EnableMarketplace = 0b0010, + EnablePartnerProgram = 0b0100, + EnableScarcity = 0b1000 + } +} diff --git a/Runtime/Enums/GameMonetizationOptions.cs.meta b/Runtime/Enums/GameMonetizationOptions.cs.meta new file mode 100644 index 0000000..3f8585b --- /dev/null +++ b/Runtime/Enums/GameMonetizationOptions.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ee01580db03444f98c8a46b96877c5ce +timeCreated: 1710999942 \ No newline at end of file diff --git a/Runtime/Enums/MaturityOptions.cs b/Runtime/Enums/MaturityOptions.cs new file mode 100644 index 0000000..20f98b2 --- /dev/null +++ b/Runtime/Enums/MaturityOptions.cs @@ -0,0 +1,13 @@ + +namespace ModIO +{ + [System.Flags] + public enum MaturityOptions + { + None = 0b0000, + Alcohol = 0b0001, + Drugs = 0b0010, + Violence = 0b0100, + Explicit = 0b1000, + } +} diff --git a/Runtime/Enums/ContentWarnings.cs.meta b/Runtime/Enums/MaturityOptions.cs.meta similarity index 100% rename from Runtime/Enums/ContentWarnings.cs.meta rename to Runtime/Enums/MaturityOptions.cs.meta diff --git a/Runtime/Enums/MonetizationOption.cs b/Runtime/Enums/MonetizationOption.cs new file mode 100644 index 0000000..189f430 --- /dev/null +++ b/Runtime/Enums/MonetizationOption.cs @@ -0,0 +1,21 @@ + +using System; + +namespace ModIO +{ + /// + /// Monetization options enabled by the creator. + /// Multiple options can be combined. + /// + /// + /// + [Flags] + public enum MonetizationOption + { + None = 0, + Enabled = 1, + Live = 2, + EnablePartnerProgram = 4, + EnableScarcity = 8, + } +} diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetUserEvents.cs.meta b/Runtime/Enums/MonetizationOption.cs.meta similarity index 83% rename from Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetUserEvents.cs.meta rename to Runtime/Enums/MonetizationOption.cs.meta index 4d002cd..52b8c07 100644 --- a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetUserEvents.cs.meta +++ b/Runtime/Enums/MonetizationOption.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: c066e9b6338a7dc4cad4433cfaea3eda +guid: 1efd51d77fa3e4738b34652ac95f8b77 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Runtime/Enums/RevenueType.cs b/Runtime/Enums/RevenueType.cs new file mode 100644 index 0000000..ee06c23 --- /dev/null +++ b/Runtime/Enums/RevenueType.cs @@ -0,0 +1,15 @@ + +namespace ModIO +{ + /// + /// Finds all mods with or without a price. Default is Free. + /// + /// + /// + public enum RevenueType + { + Free = 0, + Paid = 1, + FreeAndPaid = 2 + } +} diff --git a/Platform/SystemIO/ModIO.Implementation.Platform/SettingsAsset_Standalone.cs.meta b/Runtime/Enums/RevenueType.cs.meta similarity index 83% rename from Platform/SystemIO/ModIO.Implementation.Platform/SettingsAsset_Standalone.cs.meta rename to Runtime/Enums/RevenueType.cs.meta index 49be983..acc7d86 100644 --- a/Platform/SystemIO/ModIO.Implementation.Platform/SettingsAsset_Standalone.cs.meta +++ b/Runtime/Enums/RevenueType.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 12da22907d4670b499ab1a9e29276124 +guid: 71476cf3a783e4ad2a13ee919d766d2f MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Runtime/Enums/SortModsBy.cs b/Runtime/Enums/SortModsBy.cs index 37a1ad6..e75a629 100644 --- a/Runtime/Enums/SortModsBy.cs +++ b/Runtime/Enums/SortModsBy.cs @@ -11,6 +11,7 @@ namespace ModIO public enum SortModsBy { Name, + Price, Rating, Popular, Downloads, diff --git a/Runtime/ModIO.Implementation/Classes/CompressOperationBase.cs b/Runtime/ModIO.Implementation/Classes/CompressOperationBase.cs index 4fcd2e5..73a6be7 100644 --- a/Runtime/ModIO.Implementation/Classes/CompressOperationBase.cs +++ b/Runtime/ModIO.Implementation/Classes/CompressOperationBase.cs @@ -27,25 +27,25 @@ public void Dispose() _operation?.Dispose(); } - public virtual Task> Compress() + public virtual Task Compress(Stream stream) { throw new NotImplementedException(); } - protected async Task CompressStream(string entryName, Stream fileStream, ZipOutputStream zipStream) + protected async Task CompressStream(string entryName, Stream stream, ZipOutputStream zipStream) { ZipEntry newEntry = new ZipEntry(entryName); zipStream.PutNextEntry(newEntry); - long max = fileStream.Length; + long max = stream.Length; byte[] data = new byte[4096]; - fileStream.Position = 0; - while(fileStream.Position < fileStream.Length) + stream.Position = 0; + while(stream.Position < stream.Length) { // TODO @Jackson ensure ReadAsync and WriteAsync are // implemented on all filestream wrappers - int size = await fileStream.ReadAsync(data, 0, data.Length); + int size = await stream.ReadAsync(data, 0, data.Length); if(size > 0) { await zipStream.WriteAsync(data, 0, size); @@ -65,16 +65,16 @@ protected async Task CompressStream(string entryName, Stream fileStream, ZipOutp } - protected ResultAnd Abort(ResultAnd resultAnd, string details) + protected Result Abort(Result result, string details) { Logger.Log(LogLevel.Verbose, - $"FAILED COMPRESSION [{resultAnd.result.code}] {details}"); + $"FAILED COMPRESSION [{result.code}] {details}"); - resultAnd.result = sizeLimitReached + result = sizeLimitReached ? ResultBuilder.Create(ResultCode.IO_FileSizeTooLarge) : ResultBuilder.Create(ResultCode.Internal_OperationCancelled); - return resultAnd; + return result; } } } diff --git a/Runtime/ModIO.Implementation/Classes/CompressOperationDirectory.cs b/Runtime/ModIO.Implementation/Classes/CompressOperationDirectory.cs index 79bd9ab..70fa34d 100644 --- a/Runtime/ModIO.Implementation/Classes/CompressOperationDirectory.cs +++ b/Runtime/ModIO.Implementation/Classes/CompressOperationDirectory.cs @@ -14,27 +14,24 @@ namespace ModIO.Implementation internal class CompressOperationDirectory : CompressOperationBase { //theres a card to fix this - - string directory; + + readonly string directory; public CompressOperationDirectory(string directory, ProgressHandle progressHandle = null) : base(progressHandle) { - this.directory = directory; + this.directory = Path.GetFullPath(directory) + Path.DirectorySeparatorChar; } - - public override async Task> Compress() + public override async Task Compress(Stream stream) { Logger.Log(LogLevel.Verbose, $"COMPRESS STARTED [{directory}]"); - - ResultAnd resultAnd = new ResultAnd(); - resultAnd.value = new MemoryStream(); - using(ZipOutputStream zipStream = new ZipOutputStream(resultAnd.value)) + Result result = new Result(); + + using(ZipOutputStream zipStream = new ZipOutputStream(stream)) { zipStream.SetLevel(3); - int folderOffset = directory.TrimEnd('/', '\\').Length; //loop this across the directory, and set up the filestream etc var directories = DataStorage.IterateFilesInDirectory(directory); @@ -45,7 +42,7 @@ public override async Task> Compress() { using(dir.value) { - string entryName = GetEntryName(folderOffset, dir); + string entryName = Path.GetFullPath(dir.value.FilePath).Substring(directory.Length); await CompressStream(entryName, dir.value, zipStream); } } @@ -56,37 +53,23 @@ public override async Task> Compress() : $"Failed to compress files at directory: " + $"{directory}\nResult[{dir.result.code}])"); - return Abort(resultAnd, directory); + return Abort(result, directory); } } if(cancel || ModIOUnityImplementation.shuttingDown) { - return Abort(resultAnd, directory); + return Abort(result, directory); } - resultAnd.result = ResultBuilder.Success; - zipStream.IsStreamOwner = false; + result = ResultBuilder.Success; + zipStream.IsStreamOwner = false; } - Logger.Log(LogLevel.Verbose, $"COMPRESSED [{resultAnd.result.code}] {directory}"); - resultAnd.result = ResultBuilder.Success; - - return resultAnd; - } - - - static string GetEntryName(int folderOffset, ResultAnd dir) - { - // Make the name in zip based on the folder - // eg, - // Library/Application - // Support/DefaultCompany/Shooter/mods/BobsMod/items/entryName - - // should become: + Logger.Log(LogLevel.Verbose, $"COMPRESSED [{result.code}] {directory}"); + result = ResultBuilder.Success; - // BobsMod/items/entryName - return dir.value.FilePath.Substring(folderOffset).Trim('/','\\'); + return result; } } } diff --git a/Runtime/ModIO.Implementation/Classes/CompressOperationMultiple.cs b/Runtime/ModIO.Implementation/Classes/CompressOperationMultiple.cs index f01eb94..9774e2f 100644 --- a/Runtime/ModIO.Implementation/Classes/CompressOperationMultiple.cs +++ b/Runtime/ModIO.Implementation/Classes/CompressOperationMultiple.cs @@ -20,14 +20,13 @@ public override void Cancel() cancel = true; } - public override async Task> Compress() + public override async Task Compress(Stream stream) { - ResultAnd resultAnd = new ResultAnd(); - resultAnd.value = new MemoryStream(); + Result result = ResultBuilder.Unknown; int count = 0; - using(ZipOutputStream zipStream = new ZipOutputStream(resultAnd.value)) + using(ZipOutputStream zipStream = new ZipOutputStream(stream)) { zipStream.SetLevel(3); @@ -36,23 +35,22 @@ public override async Task> Compress() string entryName = $"image_{count}.png"; count++; - using(MemoryStream memoryStream = new MemoryStream()) + using(Stream memoryStream = new MemoryStream()) { - memoryStream.Write(bytes, 0, bytes.Length); + await memoryStream.WriteAsync(bytes, 0, bytes.Length); await CompressStream(entryName, memoryStream, zipStream); } if(cancel || ModIOUnityImplementation.shuttingDown) { - return Abort(resultAnd, $"Aborting while zipping images."); + return Abort(result, $"Aborting while zipping images."); } } zipStream.IsStreamOwner = false; } - resultAnd.result = ResultBuilder.Success; - return resultAnd; + return ResultBuilder.Success; } } } diff --git a/Runtime/ModIO.Implementation/Classes/Logger.cs b/Runtime/ModIO.Implementation/Classes/Logger.cs index 4ac4f72..6956278 100644 --- a/Runtime/ModIO.Implementation/Classes/Logger.cs +++ b/Runtime/ModIO.Implementation/Classes/Logger.cs @@ -10,7 +10,7 @@ namespace ModIO.Implementation /// /// This class is responsible for outputting all of the logs that pertain to the ModIO Plugin /// - internal static class Logger + public static class Logger { internal const string ModioLogPrefix = "[mod.io]"; @@ -33,7 +33,7 @@ internal static void UnityLogDelegate(LogLevel logLevel, string logMessage) { return; } - + switch(logLevel) { #if UNITY_2019_4_OR_NEWER @@ -68,11 +68,11 @@ static bool IsThisLogAboveMaxLogLevelSetting(LogLevel level) { return (int)level > (int)Settings.build.logLevel; } - + return true; } - internal static void Log(LogLevel logLevel, string logMessage) + public static void Log(LogLevel logLevel, string logMessage) { logMessage = $"{ModioLogPrefix} {logMessage}"; LogDelegate?.Invoke(logLevel, logMessage); diff --git a/Runtime/ModIO.Implementation/Classes/ModCollectionEntry.cs b/Runtime/ModIO.Implementation/Classes/ModCollectionEntry.cs index 82dd1e8..dcb38c4 100644 --- a/Runtime/ModIO.Implementation/Classes/ModCollectionEntry.cs +++ b/Runtime/ModIO.Implementation/Classes/ModCollectionEntry.cs @@ -1,5 +1,4 @@ - -using ModIO.Implementation.API.Objects; +using ModIO.Implementation.API.Objects; namespace ModIO.Implementation { @@ -9,5 +8,6 @@ internal class ModCollectionEntry public ModfileObject currentModfile; public ModObject modObject; public bool uninstallIfNotSubscribedToCurrentSession; + public int priority = 100; } } diff --git a/Runtime/ModIO.Implementation/Classes/ModCollectionManager.cs b/Runtime/ModIO.Implementation/Classes/ModCollectionManager.cs index cf68f9a..1121dbc 100644 --- a/Runtime/ModIO.Implementation/Classes/ModCollectionManager.cs +++ b/Runtime/ModIO.Implementation/Classes/ModCollectionManager.cs @@ -5,6 +5,10 @@ using ModIO.Implementation.API.Objects; using ModIO.Implementation.API.Requests; +#if UNITY_GAMECORE +using Unity.GameCore; +#endif + namespace ModIO.Implementation { /// @@ -17,17 +21,8 @@ internal static class ModCollectionManager { public static ModCollectionRegistry Registry; -#region Syncing User Fields - static bool hasSyncedBefore; - static long lastUserEventId; - static long lastModEventId; -#endregion // Syncing User Fields - public static async Task LoadRegistryAsync() { - // Reset syncing in case of re-init - hasSyncedBefore = false; - ResultAnd response = await DataStorage.LoadSystemRegistryAsync(); if(response.result.Succeeded()) @@ -48,9 +43,6 @@ public static async Task LoadRegistryAsync() public static Result LoadRegistry() { - // Reset syncing in case of re-init - hasSyncedBefore = false; - ResultAnd response = DataStorage.LoadSystemRegistry(); if(response.result.Succeeded()) @@ -92,9 +84,6 @@ public static async void SaveRegistry() public static void ClearRegistry() { - lastUserEventId = 0; - lastModEventId = 0; - hasSyncedBefore = false; Registry?.mods?.Clear(); Registry?.existingUsers?.Clear(); Registry = null; @@ -136,7 +125,6 @@ public static void AddUserToRegistry(UserObject user) /// Does a fetch for the user's subscriptions and syncs them with the registry. /// Also checks for updates for modfiles. /// - /// the modObject.io username of the user to sync /// true if the sync was successful public static async Task FetchUpdates() { @@ -252,9 +240,50 @@ public static async Task FetchUpdates() //--------------------------------------------------------------------------------// result = await SyncUsersSubscriptions(user); + if ((await ModIOUnityImplementation.IsMarketplaceEnabled(true)).Succeeded()) + { + //--------------------------------------------------------------------------------// + // UPDATE ENTITLEMENTS // + //--------------------------------------------------------------------------------// + + await ModIOUnityAsync.SyncEntitlements(); + - // Mark as true to change behaviour when re-checking (resets after new Init) - hasSyncedBefore = true; + //--------------------------------------------------------------------------------// + // GET PURCHASES // + //--------------------------------------------------------------------------------// + int pageSize = 100; + int pageIndex = 0; + bool continueFetching = true; + + while (continueFetching) + { + SearchFilter filter = new SearchFilter(pageIndex, pageSize); + ResultAnd r = await ModIOUnityImplementation.GetUserPurchases(filter); + result = r.result; + + if (r.result.Succeeded()) + { + ResponseCache.AddModsToCache(API.Requests.GetUserPurchases.UnpaginatedURL(filter), 0, r.value); + AddModsToUserPurchases(r.value); + long totalResults = r.value.totalSearchResultsFound; + int resultsFetched = (pageIndex + 1) * pageSize; + if (resultsFetched > totalResults) + { + continueFetching = false; + } + } + else + { + continueFetching = false; + } + + pageIndex++; + } + } + //--------------------------------------------------------------------------------// + // Finish Fetch // + //--------------------------------------------------------------------------------// ModManagement.WakeUp(); Logger.Log(LogLevel.Message, @@ -279,20 +308,18 @@ static async Task SyncUsersSubscriptions(long user) //string url = GetUserSubscriptions.URL(); //ResultAnd subscribedResultAnd = // await RESTAPI.TryRequestAllResults(url, GetUserSubscriptions.Template); - var config = API.Requests.GetUserSubscriptions.Request(); - var subscribedResponse = await TryRequestAllResults< - ModObject>(config.Url, ()=>config); + WebRequestConfig config = API.Requests.GetUserSubscriptions.Request(); + ResultAnd subscribedResponse = await TryRequestAllResults(config.Url, ()=>config); if(subscribedResponse.result.Succeeded()) { // clear user's subscribed mods Registry.existingUsers[user].subscribedMods.Clear(); - foreach(ModObject mod in subscribedResponse.value) + foreach(ModObject modObject in subscribedResponse.value) { - Registry.existingUsers[user].subscribedMods.Add(new ModId(mod.id)); - - UpdateModCollectionEntryFromModObject(mod); + Registry.existingUsers[user].subscribedMods.Add(new ModId(modObject.id)); + UpdateModCollectionEntryFromModObject(modObject); } } else @@ -308,7 +335,7 @@ static async Task SyncUsersSubscriptions(long user) /// at 10 requests (1,000 results). /// /// The endpoint with relevant filters (But do not include pagination) - /// The template of the request + /// /// The data type of the page response schema (Make sure this is the /// correct API Object for the response schema relating to the endpoint being /// used) @@ -367,6 +394,8 @@ public static async Task> TryRequestAllResults( return response; } + public static bool HasModCollectionEntry(ModId modId) => Registry.mods.ContainsKey(modId); + public static void AddModCollectionEntry(ModId modId) { // Check an entry exists for this modObject, if not create one @@ -378,12 +407,12 @@ public static void AddModCollectionEntry(ModId modId) } } - public static void UpdateModCollectionEntry(ModId modId, ModObject modObject) + public static void UpdateModCollectionEntry(ModId modId, ModObject modObject, int priority = 0) { AddModCollectionEntry(modId); Registry.mods[modId].modObject = modObject; - + Registry.mods[modId].priority = priority; // Check this in case of UserData being deleted if(DataStorage.TryGetInstallationDirectory(modId, modObject.modfile.id, out string notbeingusedhere)) @@ -394,10 +423,68 @@ public static void UpdateModCollectionEntry(ModId modId, ModObject modObject) SaveRegistry(); } + private static void AddModsToUserPurchases(ModPage modPage) + { + foreach (ModProfile modProfile in modPage.modProfiles) + { + AddModToUserPurchases(modProfile.id); + } + } + + public static void AddModToUserPurchases(ModId modId, bool saveRegistry = true) + { + long user = GetUserKey(); + + // Early out + if(!IsRegistryLoaded() || !DoesUserExist(user)) + { + return; + } + + user = GetUserKey(); + + if(!Registry.existingUsers[user].purchasedMods.Contains(modId)) + { + Registry.existingUsers[user].purchasedMods.Add(modId); + } + + // Check an entry exists for this modObject, if not create one + AddModCollectionEntry(modId); + + if(saveRegistry) + { + SaveRegistry(); + } + } + + public static void RemoveModFromUserPurchases(ModId modId, bool saveRegistry = true) + { + long user = GetUserKey(); + + // Early out + if(!IsRegistryLoaded() || !DoesUserExist(user)) + { + Logger.Log(LogLevel.Warning, "registry not loaded"); + return; + } + + user = GetUserKey(); + + // Remove modId from user collection data + if(Registry.existingUsers[user].purchasedMods.Contains(modId)) + { + Registry.existingUsers[user].purchasedMods.Remove(modId); + } + + if(saveRegistry) + { + SaveRegistry(); + } + } + public static void AddModToUserSubscriptions(ModId modId, bool saveRegistry = true) { - long user = GetUserKey(); // Early out @@ -457,8 +544,7 @@ public static void RemoveModFromUserSubscriptions(ModId modId, bool offline, } } - public static void UpdateModCollectionEntryFromModObject(ModObject modObject, - bool saveRegistry = true) + public static void UpdateModCollectionEntryFromModObject(ModObject modObject, bool saveRegistry = true) { ModId modId = (ModId)modObject.id; @@ -524,6 +610,38 @@ public static bool DisableModForCurrentUser(ModId modId) return true; } + /// + /// Gets all mods that are purchased regardless of whether or not the user is subscribed to them or not + /// + /// + public static ModProfile[] GetPurchasedMods(out Result result) + { + // early out + if(!IsRegistryLoaded()) + { + result = ResultBuilder.Create(ResultCode.Internal_RegistryNotInitialized); + return null; + } + + List mods = new List(); + + long currentUser = GetUserKey(); + + using(var enumerator = Registry.existingUsers[currentUser].purchasedMods.GetEnumerator()) + { + while(enumerator.MoveNext()) + { + if(Registry.mods.TryGetValue(enumerator.Current, out ModCollectionEntry entry)) + { + mods.Add(ConvertModCollectionEntryToPurchasedMod(entry)); + } + } + } + + result = ResultBuilder.Success; + return mods.ToArray(); + } + /// /// Gets all mods that are installed regardless of whether or not the user is subscribed to /// them or not @@ -629,16 +747,13 @@ public static SubscribedMod[] GetSubscribedModsForUser(out Result result) return subscribedMods.ToArray(); } - public static SubscribedMod ConvertModCollectionEntryToSubscribedMod( - ModCollectionEntry entry) + static SubscribedMod ConvertModCollectionEntryToSubscribedMod(ModCollectionEntry entry) { - SubscribedMod mod = new SubscribedMod(); - - // generate ModProfile from ModObject - mod.modProfile = ResponseTranslator.ConvertModObjectToModProfile(entry.modObject); - - // set the status for this subscribed mod - mod.status = ModManagement.GetModCollectionEntrysSubscribedModStatus(entry); + SubscribedMod mod = new SubscribedMod + { + modProfile = ResponseTranslator.ConvertModObjectToModProfile(entry.modObject), + status = ModManagement.GetModCollectionEntrysSubscribedModStatus(entry), + }; // assign directory field DataStorage.TryGetInstallationDirectory(entry.modObject.id, entry.modObject.modfile.id, @@ -647,18 +762,19 @@ public static SubscribedMod ConvertModCollectionEntryToSubscribedMod( return mod; } - public static InstalledMod ConvertModCollectionEntryToInstalledMod(ModCollectionEntry entry, - string directory) + static InstalledMod ConvertModCollectionEntryToInstalledMod(ModCollectionEntry entry, string directory) { - InstalledMod mod = new InstalledMod(); - mod.modProfile = ResponseTranslator.ConvertModObjectToModProfile(entry.modObject); - mod.updatePending = entry.currentModfile.id != entry.modObject.modfile.id; - mod.directory = directory; - mod.subscribedUsers = new List(); - mod.metadata = entry.modObject.modfile.metadata_blob; - mod.version = entry.currentModfile.version; - mod.changeLog = entry.currentModfile.changelog; - mod.dateAdded = ResponseTranslator.GetUTCDateTime(entry.currentModfile.date_added); + InstalledMod mod = new InstalledMod + { + modProfile = ResponseTranslator.ConvertModObjectToModProfile(entry.modObject), + updatePending = entry.currentModfile.id != entry.modObject.modfile.id, + directory = directory, + subscribedUsers = new List(), + metadata = entry.modObject.modfile.metadata_blob, + version = entry.currentModfile.version, + changeLog = entry.currentModfile.changelog, + dateAdded = ResponseTranslator.GetUTCDateTime(entry.currentModfile.date_added), + }; foreach(long user in Registry.existingUsers.Keys) { @@ -671,6 +787,11 @@ public static InstalledMod ConvertModCollectionEntryToInstalledMod(ModCollection return mod; } + static ModProfile ConvertModCollectionEntryToPurchasedMod(ModCollectionEntry entry) + { + return ResponseTranslator.ConvertModObjectToModProfile(entry.modObject); + } + public static Result MarkModForUninstallIfNotSubscribedToCurrentSession(ModId modId) { // Early out diff --git a/Runtime/ModIO.Implementation/Classes/ModIOUnityImplementation.cs b/Runtime/ModIO.Implementation/Classes/ModIOUnityImplementation.cs index 20898eb..e43ac86 100644 --- a/Runtime/ModIO.Implementation/Classes/ModIOUnityImplementation.cs +++ b/Runtime/ModIO.Implementation/Classes/ModIOUnityImplementation.cs @@ -1,15 +1,18 @@ -using System; +using ModIO.Implementation.API; +using ModIO.Implementation.API.Objects; +using ModIO.Implementation.API.Requests; +using ModIO.Implementation.Platform; +using ModIO.Implementation.Wss; +using System; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Net.Mail; +using System.Text.RegularExpressions; +using System.Threading; using System.Threading.Tasks; -using ModIO.Implementation.API; -using ModIO.Implementation.API.Objects; -using ModIO.Implementation.Platform; using UnityEngine; -using System.Linq; -using ModIO.Implementation.API.Requests; -using ModIO.Implementation.Wss; +using GameObject = ModIO.Implementation.API.Objects.GameObject; namespace ModIO.Implementation { @@ -17,7 +20,7 @@ namespace ModIO.Implementation /// /// The actual implementation for methods called from the ModIOUnity interface /// - internal static class ModIOUnityImplementation + internal static partial class ModIOUnityImplementation { /// /// A cached reference to the current upload operation handle. @@ -46,6 +49,8 @@ internal static class ModIOUnityImplementation /// Has the plugin been initialized. internal static bool isInitialized; + internal static GameObject? GameProfile; + /// /// Flagged to true if the plugin is being shutdown /// @@ -59,11 +64,12 @@ internal static class ModIOUnityImplementation public static bool AutoInitializePlugin { - get { - if(!autoInitializePluginSet) + get + { + if (!autoInitializePluginSet) { var result = SettingsAsset.TryLoad(out autoInitializePlugin); - if(!result.Succeeded()) + if (!result.Succeeded()) Logger.Log(LogLevel.Error, result.message); autoInitializePluginSet = true; } @@ -71,7 +77,8 @@ public static bool AutoInitializePlugin return autoInitializePlugin; } //Ignore the value in config - set { + set + { autoInitializePluginSet = true; autoInitializePlugin = value; } @@ -80,17 +87,17 @@ public static bool AutoInitializePlugin /// Has the plugin been initialized. public static bool IsInitialized(out Result result) { - if(isInitialized) + if (isInitialized) { result = ResultBuilder.Success; return true; } - if(AutoInitializePlugin) + if (AutoInitializePlugin) { Debug.Log("Auto initialized"); result = InitializeForUser("Default"); - if(result.Succeeded()) + if (result.Succeeded()) { result = ResultBuilder.Success; return true; @@ -106,11 +113,50 @@ public static bool IsInitialized(out Result result) return false; } + internal static async Task IsMarketplaceEnabled(bool silent = false) + { + if (await EnsureGameProfileHasBeenRetrieved()) + { + if (GameProfile.HasValue && GameProfile.Value.monetization_options.HasFlag(GameMonetizationOptions.Enabled)) + { + return ResultBuilder.Success; + } + if (!silent) + { + Logger.Log( + LogLevel.Error, + "Marketplace has not been enabled for this game profile. Ensure " + + "you have correctly setup the Marketplace feature on the mod.io website."); + } + return ResultBuilder.Create(ResultCode.Settings_MarketplaceNotEnabled); + } + // NOTE from STEVE: + // If we fail to get the game profile it's likely we are offline and we simply dont know. + // thus make sure not to rely on this method if the user just needs to use say GetPurchasedMods + return ResultBuilder.Create(ResultCode.Settings_UnableToRetrieveGameProfile); + } + + public static async Task EnsureGameProfileHasBeenRetrieved() + { + if (GameProfile.HasValue) return true; + + var response = await GetGameProfile(); + + if (response.result.Succeeded()) + { + GameProfile = response.value; + return true; + } + + Logger.Log(LogLevel.Error, "Unable to retrieve Game Profile from the server."); + return false; + } + /// Checks the state of the credentials used to authenticate. public static bool IsAuthenticatedSessionValid(out Result result) { // Check if we have an Auth token saved to the current UserData - if(UserData.instance == null || string.IsNullOrEmpty(UserData.instance.oAuthToken)) + if (UserData.instance == null || string.IsNullOrEmpty(UserData.instance.oAuthToken)) { Logger.Log( LogLevel.Verbose, @@ -120,7 +166,7 @@ public static bool IsAuthenticatedSessionValid(out Result result) } // Check if a previous WebRequest was rejected due to an old token - if(UserData.instance.oAuthTokenWasRejected) + if (UserData.instance.oAuthTokenWasRejected) { Logger.Log( LogLevel.Warning, @@ -166,7 +212,7 @@ public static bool IsValidEmail(string emailaddress, out Result result) static bool IsSearchFilterValid(SearchFilter filter, out Result result) { - if(filter == null) + if (filter == null) { Logger.Log(LogLevel.Error, "The SearchFilter parameter cannot be null. Be sure to assign a " @@ -202,8 +248,8 @@ public static void SetLoggingDelegate(LogMessageDelegate loggingDelegate) /// state of mods installed on the system as well as the set of mods the /// specified user has installed on this device. public static Result InitializeForUser(string userProfileIdentifier, - ServerSettings serverSettings, - BuildSettings buildSettings) + ServerSettings serverSettings, + BuildSettings buildSettings) { TaskCompletionSource callbackConfirmation = new TaskCompletionSource(); openCallbacks_dictionary.Add(callbackConfirmation, null); @@ -240,8 +286,8 @@ public static Result InitializeForUser(string userProfileIdentifier, DataStorage.temp = createTds.value; - if(result.code == ResultCode.IO_FileDoesNotExist - || result.code == ResultCode.IO_DirectoryDoesNotExist) + if (result.code == ResultCode.IO_FileDoesNotExist + || result.code == ResultCode.IO_DirectoryDoesNotExist) { UserData.instance = new UserData(); result = DataStorage.SaveUserData(); @@ -249,7 +295,7 @@ public static Result InitializeForUser(string userProfileIdentifier, // TODO We need to have one line that invokes - if(!result.Succeeded()) + if (!result.Succeeded()) { // TODO(@jackson): Prepare for public callbackConfirmation.SetResult(true); @@ -300,7 +346,7 @@ public static Result InitializeForUser(string userProfileIdentifier) Result result = SettingsAsset.TryLoad(out serverSettings, out buildSettings); - if(result.Succeeded()) + if (result.Succeeded()) { result = InitializeForUser(userProfileIdentifier, serverSettings, buildSettings); } @@ -316,7 +362,7 @@ public static Result InitializeForUser(string userProfileIdentifier) /// public static async Task Shutdown(Action shutdownComplete) { - if(!IsInitialized(out Result _)) + if (!IsInitialized(out Result _)) { Logger.Log(LogLevel.Verbose, "ALREADY SHUTDOWN"); return; @@ -324,7 +370,7 @@ public static async Task Shutdown(Action shutdownComplete) // This first block ensures we dont have conflicting shutdown operations // being called at the same time. - if(shuttingDown && shutdownOperation != null) + if (shuttingDown && shutdownOperation != null) { Logger.Log(LogLevel.Verbose, "WAITING FOR SHUTDOWN "); await shutdownOperation; @@ -349,7 +395,7 @@ public static async Task Shutdown(Action shutdownComplete) shuttingDown = false; } - catch(Exception e) + catch (Exception e) { shuttingDown = false; Logger.Log(LogLevel.Error, $"Exception caught when shutting down plugin: {e.Message} - inner={e.InnerException?.Message} - stacktrace: {e.StackTrace}"); @@ -384,17 +430,17 @@ static async Task ShutdownTask() new Dictionary, Task>(openCallbacks_dictionary); // iterate over the tasks and await for non faulted callbacks to finish - using(var enumerator = tasks.GetEnumerator()) + using (var enumerator = tasks.GetEnumerator()) { - while(enumerator.MoveNext()) + while (enumerator.MoveNext()) { - if(enumerator.Current.Value != null && enumerator.Current.Value.IsFaulted) + if (enumerator.Current.Value != null && enumerator.Current.Value.IsFaulted) { Logger.Log(LogLevel.Error, "An Unhandled Exception was thrown in" + " an awaited task. The corresponding callback" + " will never be invoked."); - if(openCallbacks_dictionary.ContainsKey(enumerator.Current.Key)) + if (openCallbacks_dictionary.ContainsKey(enumerator.Current.Key)) { openCallbacks_dictionary.Remove(enumerator.Current.Key); } @@ -418,13 +464,13 @@ public static async Task IsAuthenticated() var callbackConfirmation = openCallbacks.New(); Result result = ResultBuilder.Unknown; - if(IsInitialized(out result) && IsAuthenticatedSessionValid(out result)) + if (IsInitialized(out result) && IsAuthenticatedSessionValid(out result)) { var config = API.Requests.GetAuthenticatedUser.Request(); var task = await openCallbacks.Run(callbackConfirmation, WebRequestManager.Request(config)); result = task.result; - if(result.Succeeded()) + if (result.Succeeded()) { result = task.result; UserData.instance.SetUserObject(task.value); @@ -437,7 +483,7 @@ public static async Task IsAuthenticated() public static async void IsAuthenticated(Action callback) { - if(callback == null) + if (callback == null) { Logger.Log(LogLevel.Warning, "No callback was given to the IsAuthenticated method. " + "This method has been cancelled."); @@ -452,7 +498,7 @@ public static async Task RequestEmailAuthToken(string emailaddress) { var callbackConfirmation = openCallbacks.New(); - if(IsInitialized(out var result) && IsValidEmail(emailaddress, out result)) + if (IsInitialized(out var result) && IsValidEmail(emailaddress, out result)) { var config = API.Requests.AuthenticateViaEmail.Request(emailaddress); result = await openCallbacks.Run(callbackConfirmation, WebRequestManager.Request(config)); @@ -466,7 +512,7 @@ public static async Task RequestEmailAuthToken(string emailaddress) public static async void RequestEmailAuthToken(string emailaddress, Action callback) { - if(callback == null) + if (callback == null) { Logger.Log( LogLevel.Warning, @@ -487,7 +533,7 @@ public static async Task SubmitEmailSecurityCode(string securityCode) //------------------------------[ Setup callback param ]------------------------------- Result result = ResultBuilder.Unknown; //------------------------------------------------------------------------------------- - if(string.IsNullOrWhiteSpace(securityCode)) + if (string.IsNullOrWhiteSpace(securityCode)) { Logger.Log( LogLevel.Warning, @@ -495,7 +541,7 @@ public static async Task SubmitEmailSecurityCode(string securityCode) + " sent to the specified email address when using RequestEmailAuthToken()"); ResultBuilder.Create(ResultCode.InvalidParameter_CantBeNull); } - else if(IsInitialized(out result)) + else if (IsInitialized(out result)) { // Synchronous checks SUCCEEDED WebRequestConfig config = API.Requests.AuthenticateUser.InternalRequest(securityCode); @@ -509,14 +555,14 @@ public static async Task SubmitEmailSecurityCode(string securityCode) result = response.result; - if(result.Succeeded()) + if (result.Succeeded()) { // Server request SUCCEEDED // Assign deserialized response as the token // Set User Access Token - UserData.instance.SetOAuthToken(response.value); + UserData.instance.SetOAuthToken(response.value, AuthenticationServiceProvider.None); // Get and cache the current user // (using empty delegate instead of null callback to avoid log and early-out) @@ -529,7 +575,8 @@ public static async Task SubmitEmailSecurityCode(string securityCode) // helps to keep track fo what WE are calling and what the user might be // calling, the following line of code is a perfect example of how we'd expect // slightly different behaviour) - await GetCurrentUser(delegate { }); + await GetCurrentUser(delegate + { }); // continue to invoke at the end of this method } @@ -543,9 +590,9 @@ public static async Task SubmitEmailSecurityCode(string securityCode) } public static async void SubmitEmailSecurityCode(string securityCode, - Action callback) + Action callback) { - if(callback == null) + if (callback == null) { Logger.Log( LogLevel.Warning, @@ -565,7 +612,7 @@ public static async Task> GetTermsOfUse() var config = API.Requests.GetTerms.Request(); TermsOfUse termsOfUse = default(TermsOfUse); - if(IsInitialized(out var result) && !ResponseCache.GetTermsFromCache(config.Url, out termsOfUse)) + if (IsInitialized(out var result) && !ResponseCache.GetTermsFromCache(config.Url, out termsOfUse)) { //hmm okay //lets call it without the open callbacks? @@ -573,7 +620,7 @@ public static async Task> GetTermsOfUse() var response = await openCallbacks.Run(callbackConfirmation, task); result = response.result; - if(result.Succeeded()) + if (result.Succeeded()) { termsOfUse = ResponseTranslator.ConvertTermsObjectToTermsOfUse(response.value); @@ -589,7 +636,7 @@ public static async Task> GetTermsOfUse() public static async void GetTermsOfUse(Action> callback) { - if(callback == null) + if (callback == null) { Logger.Log( LogLevel.Warning, @@ -614,8 +661,8 @@ public static async Task AuthenticateUser( Result result; //------------------------------------------------------------------------------------- - if(IsInitialized(out result) - && (emailAddress == null || IsValidEmail(emailAddress, out result))) + if (IsInitialized(out result) + && (emailAddress == null || IsValidEmail(emailAddress, out result))) { // Synchronous checks SUCCEEDED @@ -631,15 +678,16 @@ public static async Task AuthenticateUser( result = response.result; - if(result.Succeeded()) + if (result.Succeeded()) { // Server request SUCCEEDED // Set User Access Token - UserData.instance.SetOAuthToken(response.value); + UserData.instance.SetOAuthToken(response.value, serviceProvider); // TODO @Steve (see other example, same situation in email auth) - await GetCurrentUser(delegate { }); + await GetCurrentUser(delegate + { }); } else { @@ -656,7 +704,7 @@ public static async Task AuthenticateUser( private static void SetUserPortal(AuthenticationServiceProvider serviceProvider) { - switch(serviceProvider) + switch (serviceProvider) { case AuthenticationServiceProvider.Epic: Settings.build.userPortal = UserPortal.EpicGamesStore; @@ -697,7 +745,7 @@ public static async void AuthenticateUser( OculusDevice? device, string userId, PlayStationEnvironment environment, Action callback) { - if(callback == null) + if (callback == null) { Logger.Log( LogLevel.Warning, @@ -712,7 +760,7 @@ public static async void AuthenticateUser( public static async void BeginWssAuthentication(Action> callback) { - if(callback == null) + if (callback == null) { Logger.Log( LogLevel.Warning, @@ -720,11 +768,11 @@ public static async void BeginWssAuthentication(Action> BeginWssAuthentication() { var callbackConfirmation = openCallbacks.New(); @@ -744,7 +792,7 @@ public static async Task> GetGameTags() Result result; TagCategory[] tags = new TagCategory[0]; - if(IsInitialized(out result) && !ResponseCache.GetTagsFromCache(out tags)) + if (IsInitialized(out result) && !ResponseCache.GetTagsFromCache(out tags)) { var config = API.Requests.GetGameTags.Request(); @@ -752,7 +800,7 @@ public static async Task> GetGameTags() WebRequestManager.Request(config)); result = task.result; - if(result.Succeeded()) + if (result.Succeeded()) { tags = ResponseTranslator.ConvertGameTagOptionsObjectToTagCategories(task.value.data); ResponseCache.AddTagsToCache(tags); @@ -767,7 +815,7 @@ public static async Task> GetGameTags() public static async void GetGameTags(Action> callback) { // Early out - if(callback == null) + if (callback == null) { Logger.Log( LogLevel.Warning, @@ -789,8 +837,8 @@ public static async Task> GetMods(SearchFilter filter) string unpaginatedURL = API.Requests.GetMods.UnpaginatedURL(filter); var offset = filter.pageIndex * filter.pageSize; - if(IsInitialized(out result) && IsSearchFilterValid(filter, out result) - && !ResponseCache.GetModsFromCache(unpaginatedURL, offset, filter.pageSize, out page)) + if (IsInitialized(out result) && IsSearchFilterValid(filter, out result) + && !ResponseCache.GetModsFromCache(unpaginatedURL, offset, filter.pageSize, out page)) { var config = API.Requests.GetMods.RequestPaginated(filter); @@ -799,12 +847,12 @@ public static async Task> GetMods(SearchFilter filter) result = task.result; - if(result.Succeeded()) + if (result.Succeeded()) { page = ResponseTranslator.ConvertResponseSchemaToModPage(task.value, filter); // Return the exact number of mods that were requested (not more) - if(page.modProfiles.Length > filter.pageSize) + if (page.modProfiles.Length > filter.pageSize) { Array.Copy(page.modProfiles, page.modProfiles, filter.pageSize); } @@ -819,7 +867,7 @@ public static async Task> GetMods(SearchFilter filter) public static async void GetMods(SearchFilter filter, Action> callback) { // Early out - if(callback == null) + if (callback == null) { Logger.Log( LogLevel.Warning, @@ -838,15 +886,15 @@ public static async Task> GetModComments(ModId modId, Sea CommentPage page = new CommentPage(); var config = API.Requests.GetModComments.RequestPaginated(modId, filter); - if(IsInitialized(out Result result) && IsSearchFilterValid(filter, out result) - && !ResponseCache.GetModCommentsFromCache(config.Url, out page)) + if (IsInitialized(out Result result) && IsSearchFilterValid(filter, out result) + && !ResponseCache.GetModCommentsFromCache(config.Url, out page)) { var task = await openCallbacks.Run(callbackConfirmation, WebRequestManager.Request(config)); result = task.result; - if(result.Succeeded()) + if (result.Succeeded()) { page = ResponseTranslator.ConvertModCommentObjectsToCommentPage(task.value); @@ -854,7 +902,7 @@ public static async Task> GetModComments(ModId modId, Sea ResponseCache.AddModCommentsToCache(config.Url, page); // Return the exact number of comments that were requested (not more) - if(page.CommentObjects.Length > filter.pageSize) + if (page.CommentObjects.Length > filter.pageSize) { Array.Copy(page.CommentObjects, page.CommentObjects, filter.pageSize); } @@ -869,7 +917,7 @@ public static async Task> GetModComments(ModId modId, Sea public static async void GetModComments(ModId modId, SearchFilter filter, Action> callback) { // Early out - if(callback == null) + if (callback == null) { Logger.Log( LogLevel.Warning, @@ -881,45 +929,86 @@ public static async void GetModComments(ModId modId, SearchFilter filter, Action callback?.Invoke(result); } + public static async Task GetMod(long id, Action> callback) + { + if (callback == null) + Logger.Log(LogLevel.Warning, "No callback was given to the GetMod method, any response returned from the server wont be used. This operation has been cancelled."); + else + callback(await GetMod(id)); + } public static async Task> GetMod(long id) { - var callbackConfirmation = openCallbacks.New(); - - Result result; ModProfile profile = default; - if(IsInitialized(out result) && !ResponseCache.GetModFromCache((ModId)id, out profile)) - { - var config = API.Requests.GetMod.Request((ModId)id); - var task = await openCallbacks.Run(callbackConfirmation, WebRequestManager.Request(config)); + if (!IsInitialized(out Result result) || ResponseCache.GetModFromCache((ModId)id, out profile)) + return ResultAnd.Create(result, profile); - result = task.result; + ResultAnd resultModObject = await GetModObject(id); - if(result.Succeeded()) - { - profile = ResponseTranslator.ConvertModObjectToModProfile(task.value); - ResponseCache.AddModToCache(profile); - } - } + return ResultAnd.Create( + resultModObject.result, + resultModObject.result.Succeeded() && ResponseCache.GetModFromCache((ModId)id, out profile) + ? profile + : default + ); + } + + public static async Task> GetGameProfile() + { + TaskCompletionSource callbackConfirmation = openCallbacks.New(); + WebRequestConfig config = API.Requests.GetGame.Request(); + + ResultAnd task = await openCallbacks.Run(callbackConfirmation, WebRequestManager.Request(config)); openCallbacks.Complete(callbackConfirmation); - return ResultAnd.Create(result, profile); + + return ResultAnd.Create( + task.result, + task.value + ); } - public static async Task GetMod(long id, Action> callback) + internal static async Task> GetModSkipCache(long id, Action> callback = null) { - // Early out - if(callback == null) - { - Logger.Log( - LogLevel.Warning, - "No callback was given to the GetMod method, any response " - + "returned from the server wont be used. This operation has been cancelled."); - return; - } - ResultAnd result = await GetMod(id); + ModId modId = new ModId(id); + + ResponseCache.ClearModFromCache(modId); + ResultAnd resultModObject = await GetModObject(id); + + if (!resultModObject.result.Succeeded()) + return ResultAnd.Create(resultModObject.result, (ModProfile)default); + + if (ModCollectionManager.HasModCollectionEntry(modId)) + ModCollectionManager.UpdateModCollectionEntry(modId, resultModObject.value); + + ResultAnd result = ResultAnd.Create( + resultModObject.result, + resultModObject.result.Succeeded() && ResponseCache.GetModFromCache(modId, out ModProfile profile) + ? profile + : default + ); + callback?.Invoke(result); + + return result; + } + + static async Task> GetModObject(long id) + { + TaskCompletionSource callbackConfirmation = openCallbacks.New(); + WebRequestConfig config = API.Requests.GetMod.Request(id); + + ResultAnd task = await openCallbacks.Run(callbackConfirmation, WebRequestManager.Request(config)); + + openCallbacks.Complete(callbackConfirmation); + + if (task.result.Succeeded()) + ResponseCache.AddModToCache( + ResponseTranslator.ConvertModObjectToModProfile(task.value) + ); + + return task; } public static async Task> GetModDependencies(ModId modId) @@ -929,14 +1018,14 @@ public static async Task> GetModDependencies(ModId Result result; ModDependencies[] modDependencies = default; - if(IsInitialized(out result) && !ResponseCache.GetModDependenciesCache(modId, out modDependencies)) + if (IsInitialized(out result) && !ResponseCache.GetModDependenciesCache(modId, out modDependencies)) { var config = API.Requests.GetModDependencies.Request(modId); var task = await openCallbacks.Run(callbackConfirmation, WebRequestManager.Request(config)); result = task.result; - if(result.Succeeded()) + if (result.Succeeded()) { modDependencies = ResponseTranslator.ConvertModDependenciesObjectToModDependencies(task.value.data); ResponseCache.AddModDependenciesToCache(modId, modDependencies); @@ -950,7 +1039,7 @@ public static async Task> GetModDependencies(ModId public static async void GetModDependencies(ModId modId, Action> callback) { // Check for callback - if(callback == null) + if (callback == null) { Logger.Log( LogLevel.Warning, @@ -970,8 +1059,8 @@ public static async Task> GetCurrentUserRatings() Result result = default; Rating[] ratings = default; - if(IsInitialized(out result) && IsAuthenticatedSessionValid(out result) - && !ResponseCache.GetCurrentUserRatingsCache(out ratings)) + if (IsInitialized(out result) && IsAuthenticatedSessionValid(out result) + && !ResponseCache.GetCurrentUserRatingsCache(out ratings)) { var config = API.Requests.GetCurrentUserRatings.Request(); var task = ModCollectionManager.TryRequestAllResults(config.Url, API.Requests.GetCurrentUserRatings.Request); @@ -979,7 +1068,7 @@ public static async Task> GetCurrentUserRatings() result = response.result; - if(result.Succeeded()) + if (result.Succeeded()) { ratings = ResponseTranslator.ConvertModRatingsObjectToRatings(response.value); @@ -995,7 +1084,7 @@ public static async Task> GetCurrentUserRatings() public static async void GetCurrentUserRatings(Action> callback) { // Check for callback - if(callback == null) + if (callback == null) { Logger.Log( LogLevel.Warning, @@ -1017,16 +1106,16 @@ public static async Task> GetCurrentUserRatingFor(ModId mod ModRating rating = default; //------------------------------------------------------------------------------------- - if(IsInitialized(out result) && IsAuthenticatedSessionValid(out result)) + if (IsInitialized(out result) && IsAuthenticatedSessionValid(out result)) { // If the ratings haven't been cached this session, we can do so here - if(!ResponseCache.HaveRatingsBeenCachedThisSession()) + if (!ResponseCache.HaveRatingsBeenCachedThisSession()) { // If there is no rating, make sure we've cached the ratings Task> task = GetCurrentUserRatings(); ResultAnd response = await openCallbacks.Run(callbackConfirmation, task); - if(!response.result.Succeeded()) + if (!response.result.Succeeded()) { result = response.result; goto End; @@ -1034,13 +1123,13 @@ public static async Task> GetCurrentUserRatingFor(ModId mod } // Try to get a single rating from the cache - if(ResponseCache.GetCurrentUserRatingFromCache(modId, out rating)) + if (ResponseCache.GetCurrentUserRatingFromCache(modId, out rating)) { result = ResultBuilder.Success; } } - End: + End: // FINAL SUCCESS / FAILURE depending on callback params set previously callbackConfirmation.SetResult(true); @@ -1052,7 +1141,7 @@ public static async Task> GetCurrentUserRatingFor(ModId mod public static async void GetCurrentUserRatingFor(ModId modId, Action> callback) { // Check for callback - if(callback == null) + if (callback == null) { Logger.Log( LogLevel.Warning, @@ -1064,14 +1153,15 @@ public static async void GetCurrentUserRatingFor(ModId modId, Action FetchUpdates() { var callbackConfirmation = openCallbacks.New(); - if(IsInitialized(out Result result) && IsAuthenticatedSessionValid(out result)) + if (IsInitialized(out Result result) && IsAuthenticatedSessionValid(out result)) { result = await openCallbacks.Run(callbackConfirmation, ModCollectionManager.FetchUpdates()); - if(result.Succeeded()) + if (result.Succeeded()) { ModManagement.WakeUp(); } @@ -1113,7 +1203,7 @@ public static async Task FetchUpdates() public static async Task FetchUpdates(Action callback) { - if(callback == null) + if (callback == null) { Logger.Log(LogLevel.Warning, "No callback was given for the FetchUpdates" @@ -1133,7 +1223,7 @@ public static bool IsModManagementBusy() public static Result ForceUninstallMod(ModId modId) { - if(IsInitialized(out Result result) && IsAuthenticatedSessionValid(out result)) + if (IsInitialized(out Result result) && IsAuthenticatedSessionValid(out result)) { result = ModCollectionManager.MarkModForUninstallIfNotSubscribedToCurrentSession(modId); @@ -1150,7 +1240,7 @@ public static ProgressHandle GetCurrentModManagementOperation() public static bool EnableMod(ModId modId) { - if(!IsInitialized(out Result _)) + if (!IsInitialized(out Result _)) { return false; } @@ -1160,7 +1250,7 @@ public static bool EnableMod(ModId modId) public static bool DisableMod(ModId modId) { - if(!IsInitialized(out Result _)) + if (!IsInitialized(out Result _)) { return false; } @@ -1170,7 +1260,7 @@ public static bool DisableMod(ModId modId) public static async void AddDependenciesToMod(ModId modId, ICollection dependencies, Action callback) { - if(callback == null) + if (callback == null) { Logger.Log( LogLevel.Warning, @@ -1189,7 +1279,7 @@ public static async Task AddDependenciesToMod(ModId modId, ICollection 5) + if (dependencies.Count > 5) { result = ResultBuilder.Create(ResultCode.InvalidParameter_TooMany); Logger.Log( @@ -1198,12 +1288,12 @@ public static async Task AddDependenciesToMod(ModId modId, ICollection AddDependenciesToMod(ModId modId, ICollection dependencies, Action callback) { - if(callback == null) + if (callback == null) { Logger.Log( LogLevel.Warning, @@ -1235,7 +1325,7 @@ public static async Task RemoveDependenciesFromMod(ModId modId, ICollect Result result; - if(dependencies.Count > 5) + if (dependencies.Count > 5) { result = ResultBuilder.Create(ResultCode.InvalidParameter_TooMany); Logger.Log( @@ -1244,12 +1334,12 @@ public static async Task RemoveDependenciesFromMod(ModId modId, ICollect + " If you need to remove more than 5 dependencies consider doing it over " + "multiple requests instead."); } - else if(IsInitialized(out result) && IsAuthenticatedSessionValid(out result)) + else if (IsInitialized(out result) && IsAuthenticatedSessionValid(out result)) { var config = API.Requests.DeleteDependency.Request(modId, dependencies); result = await openCallbacks.Run(callbackConfirmation, WebRequestManager.Request(config)); - if(result.Succeeded()) + if (result.Succeeded()) { // TODO update cache for this mod's dependencies } @@ -1259,9 +1349,10 @@ public static async Task RemoveDependenciesFromMod(ModId modId, ICollect return result; } -#endregion // Mod Management -#region User Management + #endregion // Mod Management + + #region User Management public static async Task AddModRating(ModId modId, ModRating modRating) { @@ -1269,7 +1360,7 @@ public static async Task AddModRating(ModId modId, ModRating modRating) Result result; - if(IsInitialized(out result) && IsAuthenticatedSessionValid(out result)) + if (IsInitialized(out result) && IsAuthenticatedSessionValid(out result)) { var config = API.Requests.AddModRating.Request(modId, modRating); @@ -1285,8 +1376,8 @@ public static async Task AddModRating(ModId modId, ModRating modRating) }; ResponseCache.AddCurrentUserRating(modId, rating); - if(result.code_api == ResultCode.RESTAPI_ModRatingAlreadyExists - || result.code_api == ResultCode.RESTAPI_ModRatingNotFound) + if (result.code_api == ResultCode.RESTAPI_ModRatingAlreadyExists + || result.code_api == ResultCode.RESTAPI_ModRatingNotFound) { // SUCCEEDED result = ResultBuilder.Success; @@ -1302,7 +1393,7 @@ public static async void AddModRating(ModId modId, ModRating rating, Action callback) { // Callback warning - if(callback == null) + if (callback == null) { Logger.Log( LogLevel.Warning, @@ -1322,15 +1413,15 @@ public static async Task> GetCurrentUser() Result result; UserProfile userProfile = default; - if(IsInitialized(out result) && IsAuthenticatedSessionValid(out result) - && !ResponseCache.GetUserProfileFromCache(out userProfile)) + if (IsInitialized(out result) && IsAuthenticatedSessionValid(out result) + && !ResponseCache.GetUserProfileFromCache(out userProfile)) { var config = API.Requests.GetAuthenticatedUser.Request(); var task = await openCallbacks.Run(callbackConfirmation, WebRequestManager.Request(config)); result = task.result; - if(result.Succeeded()) + if (result.Succeeded()) { UserData.instance.SetUserObject(task.value); userProfile = ResponseTranslator.ConvertUserObjectToUserProfile(task.value); @@ -1349,7 +1440,7 @@ public static async Task> GetCurrentUser() public static async Task GetCurrentUser(Action> callback) { // Early out - if(callback == null) + if (callback == null) { Logger.Log( LogLevel.Warning, @@ -1368,25 +1459,25 @@ public static async Task UnsubscribeFrom(ModId modId) Result result; - if(IsInitialized(out result) && IsAuthenticatedSessionValid(out result)) + if (IsInitialized(out result) && IsAuthenticatedSessionValid(out result)) { var config = API.Requests.UnsubscribeFromMod.Request(modId); var task = await openCallbacks.Run(callbackConfirmation, WebRequestManager.Request(config)); result = task.result; var success = result.Succeeded() - || result.code_api == ResultCode.RESTAPI_ModSubscriptionNotFound; + || result.code_api == ResultCode.RESTAPI_ModSubscriptionNotFound; - if(success) + if (success) { result = ResultBuilder.Success; ModCollectionManager.RemoveModFromUserSubscriptions(modId, false); - if(ShouldAbortDueToDownloading(modId)) + if (ShouldAbortDueToDownloading(modId)) { ModManagement.AbortCurrentDownloadJob(); } - else if(ShouldAbortDueToInstalling(modId)) + else if (ShouldAbortDueToInstalling(modId)) { ModManagement.AbortCurrentInstallJob(); } @@ -1403,21 +1494,21 @@ public static async Task UnsubscribeFrom(ModId modId) static bool ShouldAbortDueToDownloading(ModId modId) { return ModManagement.currentJob != null - && ModManagement.currentJob.mod.modObject.id == modId + && ModManagement.currentJob.modEntry.modObject.id == modId && ModManagement.currentJob.type == ModManagementOperationType.Download; } static bool ShouldAbortDueToInstalling(ModId modId) { return ModManagement.currentJob != null - && ModManagement.currentJob.mod.modObject.id == modId - && ModManagement.currentJob.type == ModManagementOperationType.Install - && ModManagement.currentJob.zipOperation != null; + && ModManagement.currentJob.modEntry.modObject.id == modId + && ModManagement.currentJob.type == ModManagementOperationType.Install + && ModManagement.currentJob.zipOperation != null; } public static async void UnsubscribeFrom(ModId modId, Action callback) { - if(callback == null) + if (callback == null) { Logger.Log( LogLevel.Warning, @@ -1436,20 +1527,20 @@ public static async Task SubscribeTo(ModId modId) Result result; - if(IsInitialized(out result) && IsAuthenticatedSessionValid(out result)) + if (IsInitialized(out result) && IsAuthenticatedSessionValid(out result)) { var config = API.Requests.SubscribeToMod.Request(modId); var taskResult = await openCallbacks.Run(callbackConfirmation, WebRequestManager.Request(config)); result = taskResult.result; - if(result.Succeeded()) + if (result.Succeeded()) { ModCollectionManager.UpdateModCollectionEntry(modId, taskResult.value); ModCollectionManager.AddModToUserSubscriptions(modId); ModManagement.WakeUp(); } - else if(result.code_api == ResultCode.RESTAPI_ModSubscriptionAlreadyExists) + else if (result.code_api == ResultCode.RESTAPI_ModSubscriptionAlreadyExists) { // Hack implementation: // If sub exists, then we don't receive the Mod Object @@ -1462,7 +1553,7 @@ public static async Task SubscribeTo(ModId modId) var getModConfig = API.Requests.GetMod.Request(modId); var getModConfigResult = await openCallbacks.Run(callbackConfirmation, WebRequestManager.Request(getModConfig)); - if(getModConfigResult.result.Succeeded()) + if (getModConfigResult.result.Succeeded()) { ModCollectionManager.UpdateModCollectionEntry(modId, getModConfigResult.value); ModManagement.WakeUp(); @@ -1479,7 +1570,7 @@ public static async Task SubscribeTo(ModId modId) public static async void SubscribeTo(ModId modId, Action callback) { - if(callback == null) + if (callback == null) { Logger.Log( LogLevel.Warning, @@ -1500,8 +1591,8 @@ public static async Task> GetUserSubscriptions(SearchFilter f Result result; ModPage page = new ModPage(); - if(IsInitialized(out result) && IsSearchFilterValid(filter, out result) - && IsAuthenticatedSessionValid(out result)) + if (IsInitialized(out result) && IsSearchFilterValid(filter, out result) + && IsAuthenticatedSessionValid(out result)) { var config = API.Requests.GetUserSubscriptions.Request(filter); var task = await openCallbacks.Run(callbackConfirmation, @@ -1509,7 +1600,7 @@ public static async Task> GetUserSubscriptions(SearchFilter f result = task.result; - if(result.Succeeded()) + if (result.Succeeded()) { page = ResponseTranslator.ConvertResponseSchemaToModPage(task.value, filter); } @@ -1519,9 +1610,19 @@ public static async Task> GetUserSubscriptions(SearchFilter f return ResultAnd.Create(result, page); } + public static ModProfile[] GetPurchasedMods(out Result result) + { + if (IsInitialized(out result) && IsAuthenticatedSessionValid(out result)) + { + return ModCollectionManager.GetPurchasedMods(out result); + } + + return null; + } + public static SubscribedMod[] GetSubscribedMods(out Result result) { - if(IsInitialized(out result) && IsAuthenticatedSessionValid(out result)) + if (IsInitialized(out result) && IsAuthenticatedSessionValid(out result)) { SubscribedMod[] mods = ModCollectionManager.GetSubscribedModsForUser(out result); return mods; @@ -1532,7 +1633,7 @@ public static SubscribedMod[] GetSubscribedMods(out Result result) public static InstalledMod[] GetInstalledMods(out Result result) { - if(IsInitialized(out result)/* && AreCredentialsValid(false, out result)*/) + if (IsInitialized(out result) /* && AreCredentialsValid(false, out result)*/) { InstalledMod[] mods = ModCollectionManager.GetInstalledMods(out result, true); return mods; @@ -1544,7 +1645,7 @@ public static InstalledMod[] GetInstalledMods(out Result result) public static UserInstalledMod[] GetInstalledModsForUser(out Result result, bool includeDisabledMods) { //Filter for user - if(IsInitialized(out result) && IsAuthenticatedSessionValid(out result)) + if (IsInitialized(out result) && IsAuthenticatedSessionValid(out result)) { var mods = ModCollectionManager.GetInstalledMods(out result, false); return FilterInstalledModsIntoUserInstalledMods(UserData.instance.userObject.id, includeDisabledMods, mods); @@ -1555,9 +1656,9 @@ public static UserInstalledMod[] GetInstalledModsForUser(out Result result, bool internal static UserInstalledMod[] FilterInstalledModsIntoUserInstalledMods(long userId, bool includeDisabledMods, params InstalledMod[] mods) => mods.Select(x => x.AsInstalledModsUser(userId)) - .Where(x => !x.Equals(default(UserInstalledMod))) - .Where(x => x.enabled || includeDisabledMods) - .ToArray(); + .Where(x => !x.Equals(default(UserInstalledMod))) + .Where(x => x.enabled || includeDisabledMods) + .ToArray(); public static Result RemoveUserData() { @@ -1580,15 +1681,26 @@ public static Result RemoveUserData() bool userExists = ModCollectionManager.DoesUserExist(); Result result = userExists - ? ResultBuilder.Create(ResultCode.User_NotRemoved) - : ResultBuilder.Success; + ? ResultBuilder.Create(ResultCode.User_NotRemoved) + : ResultBuilder.Success; return result; } + public static async Task DownloadNow(ModId modId) + { + return await ModManagement.DownloadNow(modId); + } + + public static async void DownloadNow(ModId modId, Action callback) + { + Result result = await DownloadNow(modId); + callback?.Invoke(result); + } + public static async void MuteUser(long userId, Action callback) { - if(callback == null) + if (callback == null) { Logger.Log( LogLevel.Warning, @@ -1601,9 +1713,10 @@ public static async void MuteUser(long userId, Action callback) callback?.Invoke(result); } + public static async void UnmuteUser(long userId, Action callback) { - if(callback == null) + if (callback == null) { Logger.Log( LogLevel.Warning, @@ -1616,12 +1729,27 @@ public static async void UnmuteUser(long userId, Action callback) callback?.Invoke(result); } + public static async void GetMutedUsers(Action> callback) + { + if (callback == null) + { + Logger.Log( + LogLevel.Warning, + "No callback was given to the GetMutedUsers method. It is " + + "possible that this operation will not resolve successfully and should be " + + "checked with a proper callback."); + } + + ResultAnd result = await GetMutedUsers(); + callback?.Invoke(result); + } + public static async Task MuteUser(long userId) { var callbackConfirmation = openCallbacks.New(); Result result; - if(IsInitialized(out result) && IsAuthenticatedSessionValid(out result)) + if (IsInitialized(out result) && IsAuthenticatedSessionValid(out result)) { var config = API.Requests.UserMute.Request(userId); var task = await openCallbacks.Run(callbackConfirmation, WebRequestManager.Request(config)); @@ -1637,7 +1765,7 @@ public static async Task UnmuteUser(long userId) var callbackConfirmation = openCallbacks.New(); Result result; - if(IsInitialized(out result) && IsAuthenticatedSessionValid(out result)) + if (IsInitialized(out result) && IsAuthenticatedSessionValid(out result)) { var config = API.Requests.UserUnmute.Request(userId); var task = await openCallbacks.Run(callbackConfirmation, WebRequestManager.Request(config)); @@ -1648,9 +1776,29 @@ public static async Task UnmuteUser(long userId) return result; } -#endregion // User Management + public static async Task> GetMutedUsers() + { + var callbackConfirmation = openCallbacks.New(); + ResultAnd response = new ResultAnd(); + + if (IsInitialized(out response.result) && IsAuthenticatedSessionValid(out response.result)) + { + ResultAnd getMutedUsers = await openCallbacks.Run(callbackConfirmation, ModCollectionManager.TryRequestAllResults(API.Requests.GetMutedUsers.Url, API.Requests.GetMutedUsers.Request)); + response.result = getMutedUsers.result; + + if (getMutedUsers.result.Succeeded()) + { + response.value = getMutedUsers.value.Select(ResponseTranslator.ConvertUserObjectToUserProfile).ToArray(); + } + } + + openCallbacks.Complete(callbackConfirmation); + return response; + } + + #endregion // User Management -#region Mod Media + #region Mod Media #if UNITY_2019_4_OR_NEWER public static async Task> DownloadTexture(DownloadReference downloadReference) @@ -1663,7 +1811,7 @@ public static async Task> DownloadTexture(DownloadReference ResultAnd resultAnd = await GetImage(downloadReference); result = resultAnd.result; - if(result.Succeeded()) + if (result.Succeeded()) { IOUtil.TryParseImageData(resultAnd.value, out texture, out result); } @@ -1687,7 +1835,7 @@ public static async Task> GetImage(DownloadReference downloadR + "DownloadReference has an existing URL before using this method."); return ResultAnd.Create(ResultCode.InvalidParameter_DownloadReferenceIsntValid, null); } - if(onGoingImageDownloads.ContainsKey(downloadReference.url)) + if (onGoingImageDownloads.ContainsKey(downloadReference.url)) { Logger.Log(LogLevel.Verbose, $"The image ({downloadReference.filename}) " + $"is already being download. Waiting for duplicate request's result."); @@ -1711,78 +1859,78 @@ static async Task> DownloadImage(DownloadReference downloadRef byte[] image = null; //------------------------------------------------------------------------------------- - if(IsInitialized(out result)) - { - // Check cache asynchronously for texture in temp folder - Task> cacheTask = - ResponseCache.GetImageFromCache(downloadReference); + if (IsInitialized(out result)) + { + // Check cache asynchronously for texture in temp folder + Task> cacheTask = + ResponseCache.GetImageFromCache(downloadReference); - openCallbacks_dictionary[callbackConfirmation] = cacheTask; - ResultAnd cacheResponse = await cacheTask; - openCallbacks_dictionary[callbackConfirmation] = null; + openCallbacks_dictionary[callbackConfirmation] = cacheTask; + ResultAnd cacheResponse = await cacheTask; + openCallbacks_dictionary[callbackConfirmation] = null; + result = cacheResponse.result; + + if (result.Succeeded()) + { + // CACHE SUCCEEDED result = cacheResponse.result; + image = cacheResponse.value; + } + else + { + // GET FILE STREAM TO DOWNLOAD THE IMAGE FILE TO + // This stream is a direct write to the file location we will cache the + // image to so we dont need to add the image to cache once we're done so to speak + ResultAnd openWriteStream = DataStorage.GetImageFileWriteStream(downloadReference.url); + result = openWriteStream.result; - if(result.Succeeded()) - { - // CACHE SUCCEEDED - result = cacheResponse.result; - image = cacheResponse.value; - } - else + if (result.Succeeded()) { - // GET FILE STREAM TO DOWNLOAD THE IMAGE FILE TO - // This stream is a direct write to the file location we will cache the - // image to so we dont need to add the image to cache once we're done so to speak - ResultAnd openWriteStream = DataStorage.GetImageFileWriteStream(downloadReference.url); - result = openWriteStream.result; + using (openWriteStream.value) + { + // DOWNLOAD THE IMAGE + var handle = WebRequestManager.Download(downloadReference.url, openWriteStream.value, null); + result = await handle.task; + } - if(result.Succeeded()) + if (result.Succeeded()) { - using(openWriteStream.value) - { - // DOWNLOAD THE IMAGE - var handle = WebRequestManager.Download(downloadReference.url, openWriteStream.value, null); - result = await handle.task; - } + // We need to re-open the stream because some platforms only allow a Read or Write stream, not both + ResultAnd openReadStream = DataStorage.GetImageFileReadStream(downloadReference.url); + result = openReadStream.result; - if(result.Succeeded()) + if (result.Succeeded()) { - // We need to re-open the stream because some platforms only allow a Read or Write stream, not both - ResultAnd openReadStream = DataStorage.GetImageFileReadStream(downloadReference.url); - result = openReadStream.result; - - if(result.Succeeded()) + using (openReadStream.value) { - using (openReadStream.value) + var readAllBytes = await openReadStream.value.ReadAllBytesAsync(); + result = readAllBytes.result; + + if (result.Succeeded()) { - var readAllBytes = await openReadStream.value.ReadAllBytesAsync(); - result = readAllBytes.result; - - if(result.Succeeded()) - { - // CACHE SUCCEEDED - image = readAllBytes.value; - } + // CACHE SUCCEEDED + image = readAllBytes.value; } } } + } - // FAILED DOWNLOAD - ERASE THE FILE SO WE DONT CREATE A CORRUPT CACHED IMAGE - if(!result.Succeeded()) + // FAILED DOWNLOAD - ERASE THE FILE SO WE DONT CREATE A CORRUPT CACHED IMAGE + if (!result.Succeeded()) + { + Result cleanupResult = DataStorage.DeleteStoredImage(downloadReference.url); + if (!cleanupResult.Succeeded()) { - Result cleanupResult = DataStorage.DeleteStoredImage(downloadReference.url); - if(!cleanupResult.Succeeded()) - { - Logger.Log(LogLevel.Error, - $"[Internal] Failed to cleanup downloaded image." - + $" This may result in a corrupt or invalid image being" - + $" loaded for modId {downloadReference.modId}"); - } + Logger.Log(LogLevel.Error, + $"[Internal] Failed to cleanup downloaded image." + + $" This may result in a corrupt or invalid image being" + + $" loaded for modId {downloadReference.modId}"); } } } - // continue to invoke at the end of this method } + // continue to invoke at the end of this method + } callbackConfirmation.SetResult(true); @@ -1796,14 +1944,14 @@ public static async void DownloadTexture(DownloadReference downloadReference, Action> callback) { // Early out - if(callback == null) + if (callback == null) { Logger.Log( LogLevel.Warning, "No callback was given to the DownloadTexture method. This operation has been cancelled."); return; } - if(!IsInitialized(out Result initResult)) + if (!IsInitialized(out Result initResult)) { var r = ResultAnd.Create(initResult, null); callback?.Invoke(r); @@ -1815,17 +1963,17 @@ public static async void DownloadTexture(DownloadReference downloadReference, } #endif public static async void DownloadImage(DownloadReference downloadReference, - Action> callback) + Action> callback) { // Early out - if(callback == null) + if (callback == null) { Logger.Log( LogLevel.Warning, "No callback was given to the DownloadImage method. This operation has been cancelled."); return; } - if(!IsInitialized(out Result initResult)) + if (!IsInitialized(out Result initResult)) { var r = ResultAnd.Create(initResult, null); callback?.Invoke(r); @@ -1845,7 +1993,7 @@ public static async Task Report(Report report) var callbackConfirmation = openCallbacks.New(); Result result = ResultBuilder.Unknown; - if(report == null || !report.CanSend()) + if (report == null || !report.CanSend()) { Logger.Log(LogLevel.Error, "The Report instance provided to the Reporting method is not setup correctly" @@ -1855,7 +2003,7 @@ public static async Task Report(Report report) ? ResultBuilder.Create(ResultCode.InvalidParameter_CantBeNull) : ResultBuilder.Create(ResultCode.InvalidParameter_ReportNotReady); } - else if(IsInitialized(out result)) + else if (IsInitialized(out result)) { var config = API.Requests.Report.Request(report); var task = await openCallbacks.Run(callbackConfirmation, WebRequestManager.Request(config)); @@ -1872,7 +2020,7 @@ public static async void Report(Report report, Action callback) // TODO @Steve implement reporting for users // This has to be done before GDK and XDK implementation is publicly supported - if(callback == null) + if (callback == null) { Logger.Log( LogLevel.Warning, @@ -1884,9 +2032,11 @@ public static async void Report(Report report, Action callback) Result result = await Report(report); callback?.Invoke(result); } -#endregion // Reporting -#region Mod Uploading + #endregion // Reporting + + #region Mod Uploading + public static CreationToken GenerateCreationToken() { return ModManagement.GenerateNewCreationToken(); @@ -1896,7 +2046,7 @@ public static CreationToken GenerateCreationToken() public static async Task> CreateModProfile(CreationToken token, ModProfileDetails modDetails) { // - Early Outs - - if(Settings.server.disableUploads) + if (Settings.server.disableUploads) { Logger.Log(LogLevel.Error, "The current plugin configuration has uploading disabled."); @@ -1909,8 +2059,7 @@ public static async Task> CreateModProfile(CreationToken token, Result result; ModId modId = (ModId)0; - // Check valid token - if(!ModManagement.IsCreationTokenValid(token)) + if (!ModManagement.IsCreationTokenValid(token)) { Logger.Log( LogLevel.Error, @@ -1921,20 +2070,22 @@ public static async Task> CreateModProfile(CreationToken token, } else { - if(IsInitialized(out result) && IsAuthenticatedSessionValid(out result) - && IsModProfileDetailsValid(modDetails, out result)) + if (IsInitialized(out result) && IsAuthenticatedSessionValid(out result) + && IsModProfileDetailsValid(modDetails, out result)) { - //make call var config = API.Requests.AddMod.Request(modDetails); var response = await openCallbacks.Run(callbackConfirmation, WebRequestManager.Request(config)); result = response.result; - if(result.Succeeded()) + if (result.Succeeded()) { modId = (ModId)response.value.id; ModManagement.InvalidateCreationToken(token); ResponseCache.ClearCache(); + + modDetails.modId = (ModId)response.value.id; + result = await ValidateModProfileMarketplaceTeam(modDetails); } } } @@ -1948,7 +2099,7 @@ public static async void CreateModProfile(CreationToken token, ModProfileDetails { // - Early Outs - // Check callback - if(callback == null) + if (callback == null) { Logger.Log( LogLevel.Error, @@ -1966,7 +2117,7 @@ public static async Task EditModProfile(ModProfileDetails modDetails) { // - Early Outs - // Check disableUploads - if(Settings.server.disableUploads) + if (Settings.server.disableUploads) { Logger.Log(LogLevel.Error, "The current plugin configuration has uploading disabled."); @@ -1978,14 +2129,14 @@ public static async Task EditModProfile(ModProfileDetails modDetails) Result result; // Check for modId - if(modDetails == null) + if (modDetails == null) { Logger.Log(LogLevel.Error, "The ModProfileDetails provided is null. You cannot update a mod " + "without providing a valid ModProfileDetails object."); result = ResultBuilder.Create(ResultCode.InvalidParameter_CantBeNull); } - else if(modDetails.modId == null) + else if (modDetails.modId == null) { Logger.Log(LogLevel.Error, "The provided ModProfileDetails has not been assigned a ModId. Ensure" @@ -1993,11 +2144,11 @@ public static async Task EditModProfile(ModProfileDetails modDetails) + " field."); result = ResultBuilder.Create(ResultCode.InvalidParameter_ModProfileRequiredFieldsNotSet); } - else if(IsInitialized(out result) && IsAuthenticatedSessionValid(out result) - && IsModProfileDetailsValidForEdit(modDetails, out result)) + else if (IsInitialized(out result) && IsAuthenticatedSessionValid(out result) + && IsModProfileDetailsValidForEdit(modDetails, out result)) { // TODO remove this warning if the EditMod endpoint adds tag editing feature - if(modDetails.tags != null && modDetails.tags.Length > 0) + if (modDetails.tags != null && modDetails.tags.Length > 0) { Logger.Log(LogLevel.Warning, "The EditMod method cannot be used to change a ModProfile's tags." @@ -2005,13 +2156,15 @@ public static async Task EditModProfile(ModProfileDetails modDetails) + " The 'tags' array in the ModProfileDetails will be ignored."); } + result = await ValidateModProfileMarketplaceTeam(modDetails); + var config = modDetails.logo != null ? API.Requests.EditMod.RequestPOST(modDetails) : API.Requests.EditMod.RequestPUT(modDetails); result = await openCallbacks.Run(callbackConfirmation, WebRequestManager.Request(config)); - if(result.Succeeded()) + if (result.Succeeded()) { // TODO This request returns the new ModObject, we should cache this new mod profile when we succeed } @@ -2027,7 +2180,7 @@ public static async void EditModProfile(ModProfileDetails modDetails, Action callback) { // Check callback - if(callback == null) + if (callback == null) { Logger.Log( LogLevel.Warning, @@ -2040,11 +2193,55 @@ public static async void EditModProfile(ModProfileDetails modDetails, callback?.Invoke(result); } + /// + /// If a user attempts to create or edit a mod's monetization options to 'Live', + /// this method will ensure the monetization team and revenue split is set correctly + /// by setting the existing user's revenue share to 100%. + /// + /// + /// This first attempts to GET the monetization team before setting it. The reason we dont + /// just force it to always be the existing user with 100% revenue share is because the + /// revenue split can be edited and set with multiple users elsewhere. + /// (It's rare but possible, and we dont want to override an existing team) + /// + /// + /// + static async Task ValidateModProfileMarketplaceTeam(ModProfileDetails modDetails) + { + // If not setting monetization to live, we don't need to validate that a marketplace team has been setup + if (modDetails.monetizationOptions.HasValue && modDetails.monetizationOptions.Value.HasFlag(MonetizationOption.Live)) + { + return ResultBuilder.Success; + } + + Result result = ResultBuilder.Unknown; + + if (modDetails.modId == null) + { + return result; + } + + var getResponse = await GetModMonetizationTeam(modDetails.modId.Value); + + if (getResponse.result.Succeeded()) + { + return ResultBuilder.Success; + } + + List team = new List + { + new ModMonetizationTeamDetails(UserData.instance.userObject.id, 100) + }; + result = await AddModMonetizationTeam(modDetails.modId.Value, team); + + return result; + } + public static async void DeleteTags(ModId modId, string[] tags, - Action callback) + Action callback) { // Check callback - if(callback == null) + if (callback == null) { Logger.Log( LogLevel.Warning, @@ -2061,7 +2258,7 @@ public static async Task DeleteTags(ModId modId, string[] tags) { // - Early Outs - // Check disableUploads - if(Settings.server.disableUploads) + if (Settings.server.disableUploads) { Logger.Log(LogLevel.Error, "The current plugin configuration has uploading disabled."); @@ -2072,17 +2269,17 @@ public static async Task DeleteTags(ModId modId, string[] tags) var callbackConfirmation = openCallbacks.New(); Result result; - if(modId == 0) + if (modId == 0) { Logger.Log(LogLevel.Error, "You must provide a valid mod id to delete tags."); result = ResultBuilder.Create(ResultCode.InvalidParameter_MissingModId); } - else if(tags == null || tags.Length == 0) + else if (tags == null || tags.Length == 0) { Logger.Log(LogLevel.Error, "You must provide tags to be deleted from the mod"); result = ResultBuilder.Create(ResultCode.InvalidParameter_CantBeNull); } - else if(IsInitialized(out result) && IsAuthenticatedSessionValid(out result)) + else if (IsInitialized(out result) && IsAuthenticatedSessionValid(out result)) { var config = API.Requests.DeleteModTags.Request(modId, tags); var taskResult = await openCallbacks.Run(callbackConfirmation, WebRequestManager.Request(config)); @@ -2099,7 +2296,7 @@ public static async Task> AddModComment(ModId modId, Comme var callbackConfirmation = openCallbacks.New(); ModComment comment = default; - if(IsInitialized(out Result result) && IsAuthenticatedSessionValid(out result)) + if (IsInitialized(out Result result) && IsAuthenticatedSessionValid(out result)) { var config = API.Requests.AddModComment.Request(modId, commentDetails); var taskResult = await openCallbacks.Run(callbackConfirmation, WebRequestManager.Request(config)); @@ -2115,7 +2312,7 @@ public static async Task> AddModComment(ModId modId, Comme public static async void AddModComment(ModId modId, CommentDetails commentDetails, Action> callback) { // Early out - if(callback == null) + if (callback == null) { Logger.Log( LogLevel.Warning, @@ -2132,7 +2329,7 @@ public static async Task> UpdateModComment(ModId modId, st var callbackConfirmation = openCallbacks.New(); ModComment comment = default; - if(IsInitialized(out Result result) && IsAuthenticatedSessionValid(out result)) + if (IsInitialized(out Result result) && IsAuthenticatedSessionValid(out result)) { var config = API.Requests.UpdateModComment.Request(modId, content, commentId); var taskResult = await openCallbacks.Run(callbackConfirmation, WebRequestManager.Request(config)); @@ -2148,7 +2345,7 @@ public static async Task> UpdateModComment(ModId modId, st public static async void UpdateModComment(ModId modId, string content, long commentId, Action> callback) { // Early out - if(callback == null) + if (callback == null) { Logger.Log( LogLevel.Warning, @@ -2163,12 +2360,12 @@ public static async void UpdateModComment(ModId modId, string content, long comm public static async Task DeleteModComment(ModId modId, long commentId) { var callbackConfirmation = openCallbacks.New(); - if(IsInitialized(out Result result) && IsAuthenticatedSessionValid(out result)) + if (IsInitialized(out Result result) && IsAuthenticatedSessionValid(out result)) { var config = API.Requests.DeleteModComment.Request(modId, commentId); var taskResult = await openCallbacks.Run(callbackConfirmation, WebRequestManager.Request(config)); result = taskResult.result; - if(result.Succeeded()) + if (result.Succeeded()) { ResponseCache.RemoveModCommentFromCache(commentId); } @@ -2181,7 +2378,7 @@ public static async Task DeleteModComment(ModId modId, long commentId) public static async void DeleteModComment(ModId modId, long commentId, Action callback) { // Early out - if(callback == null) + if (callback == null) { Logger.Log( LogLevel.Warning, @@ -2194,10 +2391,10 @@ public static async void DeleteModComment(ModId modId, long commentId, Action callback) + Action callback) { // Check callback - if(callback == null) + if (callback == null) { Logger.Log( LogLevel.Warning, @@ -2214,7 +2411,7 @@ public static async Task AddTags(ModId modId, string[] tags) { // - Early Outs - // Check disableUploads - if(Settings.server.disableUploads) + if (Settings.server.disableUploads) { Logger.Log(LogLevel.Error, "The current plugin configuration has uploading disabled."); return ResultBuilder.Create(ResultCode.Settings_UploadsDisabled); @@ -2224,17 +2421,17 @@ public static async Task AddTags(ModId modId, string[] tags) Result result; // Check for modId - if(modId == 0) + if (modId == 0) { Logger.Log(LogLevel.Error, "You must provide a valid mod id to add tags."); result = ResultBuilder.Create(ResultCode.InvalidParameter_MissingModId); } - else if(tags == null || tags.Length == 0) + else if (tags == null || tags.Length == 0) { Logger.Log(LogLevel.Error, "You must provide tags to be added to the mod"); result = ResultBuilder.Create(ResultCode.InvalidParameter_CantBeNull); } - else if(IsInitialized(out result) && IsAuthenticatedSessionValid(out result)) + else if (IsInitialized(out result) && IsAuthenticatedSessionValid(out result)) { var config = API.Requests.AddModTags.Request(modId, tags); var taskResult = await openCallbacks.Run(callbackConfirmation, WebRequestManager.Request(config)); @@ -2254,24 +2451,24 @@ public static async Task UploadModMedia(ModProfileDetails modProfileDeta { // - Early outs - // Check Modfile - if(modProfileDetails == null) + if (modProfileDetails == null) { Logger.Log(LogLevel.Error, "ModfileDetails parameter cannot be null."); return ResultBuilder.Create(ResultCode.InvalidParameter_CantBeNull); } // Check mod id - if(modProfileDetails.modId == null) + if (modProfileDetails.modId == null) { Logger.Log(LogLevel.Error, "The provided ModfileDetails has not been assigned a ModId. Ensure" - + " you assign the Id of the mod you intend to edit to the ModProfileDetails.modId" - + " field."); + + " you assign the Id of the mod you intend to edit to the ModProfileDetails.modId" + + " field."); return ResultBuilder.Create(ResultCode.InvalidParameter_MissingModId); } // Check disableUploads - if(Settings.server.disableUploads) + if (Settings.server.disableUploads) { Logger.Log(LogLevel.Error, "The current plugin configuration has uploading disabled."); return ResultBuilder.Create(ResultCode.Settings_UploadsDisabled); @@ -2281,25 +2478,23 @@ public static async Task UploadModMedia(ModProfileDetails modProfileDeta Result result; - if(IsInitialized(out result) && IsAuthenticatedSessionValid(out result) - && IsModProfileDetailsValidForEdit(modProfileDetails, out result)) + if (IsInitialized(out result) && IsAuthenticatedSessionValid(out result) + && IsModProfileDetailsValidForEdit(modProfileDetails, out result)) { // This will compress the images (if they exist) and add them to the request // TODO Add progress handle to the compress method var addModMediaResult = await AddModMedia.Request(modProfileDetails); result = addModMediaResult.result; - if(result.Succeeded()) + if (result.Succeeded()) { WebRequestConfig config = addModMediaResult.value; var task = WebRequestManager.Request(config); var resultAnd = await openCallbacks.Run(callbackConfirmation, task); result = resultAnd.result; - if(!result.Succeeded()) - { + if (!result.Succeeded() && currentUploadHandle != null) currentUploadHandle.Failed = true; - } } } @@ -2308,11 +2503,72 @@ public static async Task UploadModMedia(ModProfileDetails modProfileDeta return result; } - public static async Task UploadModfile(ModfileDetails modfile) + public static Task> ReorderModMedia(ModId modId, string[] orderedFilenames, Action> callback = null) + => EditModMedia( + modId, + API.Requests.ReorderModMedia.Request(modId, orderedFilenames), + "You must provide a valid mod id to reorder media.", + "You must provide all ordered filenames for the mod.", + callback + ); + + public static Task> DeleteModMedia(ModId modId, string[] filenames, Action> callback = null) => + EditModMedia( + modId, + API.Requests.DeleteModMedia.Request(modId, filenames), + "You must provide a valid mod id to delete media.", + "You must provide filenames to be deleted from the mod.", + callback + ); + + static async Task> EditModMedia(ModId modId, WebRequestConfig config, string invalidIdError, string invalidFilenamesError, Action> callback) + { + if (Settings.server.disableUploads) + { + Logger.Log(LogLevel.Error, "The current plugin configuration has uploading disabled."); + + return ResultAnd.Create(ResultBuilder.Create(ResultCode.Settings_UploadsDisabled), (ModProfile)default); + } + + Result result; + + if (modId == 0) + { + Logger.Log(LogLevel.Error, invalidIdError); + result = ResultBuilder.Create(ResultCode.InvalidParameter_MissingModId); + } + else if (!config.HasStringData) + { + Logger.Log(LogLevel.Error, invalidFilenamesError); + result = ResultBuilder.Create(ResultCode.InvalidParameter_CantBeNull); + } + else if (IsInitialized(out result) && IsAuthenticatedSessionValid(out result)) + { + TaskCompletionSource callbackConfirmation = openCallbacks.New(); + + ResultAnd taskResult = await openCallbacks.Run(callbackConfirmation, WebRequestManager.Request(config)); + + openCallbacks.Complete(callbackConfirmation); + + result = taskResult.result; + } + + ResultAnd modProfile = result.Succeeded() + ? await GetModSkipCache(modId) + : ResultAnd.Create(result, (ModProfile)default); + + callback?.Invoke(modProfile); + + return modProfile; + } + + private static SemaphoreSlim addModfileSemaphore = new SemaphoreSlim(1, 1); + + public static async Task AddModfile(ModfileDetails modfile) { // - Early outs - // Check Modfile - if(modfile == null) + if (modfile == null) { Logger.Log(LogLevel.Error, "ModfileDetails parameter cannot be null."); @@ -2320,7 +2576,7 @@ public static async Task UploadModfile(ModfileDetails modfile) } // Check mod id - if(modfile.modId == null) + if (modfile.modId == null) { Logger.Log( LogLevel.Error, @@ -2332,7 +2588,7 @@ public static async Task UploadModfile(ModfileDetails modfile) } // Check disableUploads - if(Settings.server.disableUploads) + if (Settings.server.disableUploads) { Logger.Log(LogLevel.Error, "The current plugin configuration has uploading disabled."); @@ -2340,96 +2596,212 @@ public static async Task UploadModfile(ModfileDetails modfile) return ResultBuilder.Create(ResultCode.Settings_UploadsDisabled); } - ProgressHandle progressHandle = new ProgressHandle(); - currentUploadHandle = progressHandle; - currentUploadHandle.OperationType = ModManagementOperationType.Upload; - - var callbackConfirmation = openCallbacks.New(); + await addModfileSemaphore.WaitAsync(); - //------------------------------[ Setup callback param ]------------------------------- Result result; - //------------------------------------------------------------------------------------- - if(IsInitialized(out result) && IsAuthenticatedSessionValid(out result) - && IsModfileDetailsValid(modfile, out result)) + var callbackConfirmation = openCallbacks.New(); + try { - CompressOperationDirectory compressOperation = new CompressOperationDirectory(modfile.directory); - - Task> compressTask = compressOperation.Compress(); + ProgressHandle progressHandle = new ProgressHandle(); + currentUploadHandle = progressHandle; + currentUploadHandle.OperationType = ModManagementOperationType.Upload; - var compressionTaskResult = await openCallbacks.Run(callbackConfirmation, compressTask); - result = compressionTaskResult.result; + //------------------------------[ Setup callback param ]------------------------------- - if(!result.Succeeded()) + if (IsInitialized(out result) && IsAuthenticatedSessionValid(out result) + && IsModfileDetailsValid(modfile, out result)) { - // Compression FAILED - currentUploadHandle.Failed = true; - Logger.Log(LogLevel.Error, "Failed to compress the files at the " - + $"given directory ({modfile.directory})."); - } - else - { - Logger.Log(LogLevel.Verbose, $"Compressed file ({modfile.directory})" - + $"\nstream length: {compressionTaskResult.value.Length}"); + Stream stream = null; + if (modfile.directory != null) + { + var zipPath = DataStorage.GetUploadFilePath(modfile.modId.Value.id); + stream = DataStorage.temp.OpenWriteStream(zipPath, out result); + CompressOperationDirectory compressOperation = new CompressOperationDirectory(modfile.directory); - callbackConfirmation = openCallbacks.New(); - var requestConfig = await API.Requests.AddModFile.Request(modfile, compressionTaskResult.value); - Task> task = WebRequestManager.Request(requestConfig, currentUploadHandle); - ResultAnd uploadResult = await openCallbacks.Run(callbackConfirmation, task); - result = uploadResult.result; + Task compressTask = compressOperation.Compress(stream); - if(!result.Succeeded()) - { - currentUploadHandle.Failed = true; + Result compressionTaskResult = await openCallbacks.Run(callbackConfirmation, compressTask); + result = compressionTaskResult; + + if (result.Succeeded()) + { + Logger.Log(LogLevel.Verbose, $"Compressed file ({modfile.directory})" + + $"\nstream length: {stream?.Length}"); + } + else + { + // Compression FAILED + currentUploadHandle.Failed = true; + Logger.Log(LogLevel.Error, "Failed to compress the files at the " + + $"given directory ({modfile.directory})."); + } } - else + + if (result.Succeeded()) { - // TODO only remove the mod of the ID that we uploaded modfile.modId - add the modfile object we got back from the server to the cache - ResponseCache.ClearCache(); + const long MIBS_100 = 104857600; + if (stream == null || stream.Length < MIBS_100) + { + callbackConfirmation = openCallbacks.New(); + var requestConfig = await API.Requests.AddModFile.Request(modfile, stream); + + Task> task = WebRequestManager.Request(requestConfig, currentUploadHandle); + ResultAnd uploadResult = await openCallbacks.Run(callbackConfirmation, task); + result = uploadResult.result; + + if (!result.Succeeded()) + { + currentUploadHandle.Failed = true; + } + else + { + // TODO only remove the mod of the ID that we uploaded modfile.modId - add the modfile object we got back from the server to the cache + ResponseCache.ClearCache(); - Logger.Log(LogLevel.Verbose, $"UPLOAD SUCCEEDED [{modfile.modId}_{uploadResult.value.id}]"); + Logger.Log(LogLevel.Verbose, $"UPLOAD SUCCEEDED [{modfile.modId}_{uploadResult.value.id}]"); + } + } + else + { + var nonce = $"{modfile.modId.Value.id}_{stream.Length}_{DateTime.UtcNow.Ticks}"; + + var response = await openCallbacks.Run(callbackConfirmation, CreateMultipartUploadSession((ModId)modfile.modId, "upload.zip", nonce)); + result = response.result; + string uploadId = response.value.upload_id; + + PaginatedResponse partsObject = default; + if (result.Succeeded()) + { + SearchFilter filter = new SearchFilter(); + filter.SetPageIndex(0); + filter.SetPageSize(10000); + var r = await openCallbacks.Run(callbackConfirmation, GetMultipartUploadParts((ModId)modfile.modId, uploadId, filter)); + partsObject = r.value; + result = r.result; + } + + if (result.Succeeded()) + { + int partOffset = 0; + if (partsObject?.data != null) + partOffset = partsObject.data.Length; + result = await openCallbacks.Run(callbackConfirmation, AddAllMultipartUploadParts((ModId)modfile.modId, response.value.upload_id, stream, partOffset)); + } + + if (result.Succeeded()) + { + result = await openCallbacks.Run(callbackConfirmation, CompleteMultipartUploadSession((ModId)modfile.modId, response.value.upload_id)); + } + + if (result.Succeeded()) + { + var m = new ModfileDetails { modId = (ModId)modfile.modId, uploadId = response.value.upload_id }; + var requestConfig = await API.Requests.AddModFile.Request(m, null); + + Task> task = WebRequestManager.Request(requestConfig, currentUploadHandle); + ResultAnd uploadResult = await openCallbacks.Run(callbackConfirmation, task); + result = uploadResult.result; + } + } } + stream?.Close(); } } + catch (Exception ex) + { + result = ResultBuilder.Create(ResultCode.FILEUPLOAD_Error); + addModfileSemaphore.Release(); + throw ex; + } + finally + { + addModfileSemaphore.Release(); + } - currentUploadHandle.Completed = true; - currentUploadHandle = null; + if (currentUploadHandle != null) + { + currentUploadHandle.Completed = true; + currentUploadHandle = null; + } openCallbacks.Complete(callbackConfirmation); return result; } - public static async void UploadModMedia(ModProfileDetails modProfileDetails, Action callback) + private static async Task AddAllMultipartUploadParts(ModId modId, string uploadId, Stream stream, int partOffset = 0) { - // Check for callback - if(callback == null) + Result result = ResultBuilder.Unknown; + int chunkSize = 52428800; // 50MiB + var endByte = chunkSize - 1; //last byte of a chunk + var startByte = partOffset * chunkSize; + + if (stream.CanSeek) + stream.Position = 0; + + byte[] buffer = new byte[chunkSize]; + while (stream.Read(buffer, 0, chunkSize) > 0) { - Logger.Log( - LogLevel.Warning, - "No callback was given to the UploadModMedia method. You will not " + byte[] data; + + if (endByte >= stream.Length) + { + endByte = (int)stream.Length - 1; //adjust end byte to match the last byte of the zip file + } + + //shrink byte array if last part + if (endByte - startByte < chunkSize) + { + data = new byte[endByte + 1 - startByte]; + Array.Copy(buffer, data, endByte + 1 - startByte); + } + else + { + data = buffer; + } + + result = await AddMultipartUploadParts(modId, uploadId, $"bytes {startByte}-{endByte}/{stream.Length}", null, data); + if (!result.Succeeded()) + return result; + + startByte = endByte + 1; + endByte = startByte + chunkSize - 1; + } + + return result; + } + + public static async void AddModfile(ModfileDetails modfile, Action callback) + { + // Check for callback + if (callback == null) + { + Logger.Log( + LogLevel.Warning, + "No callback was given to the UploadModfile method. You will not " + "be informed of the result for this action. It is highly recommended to " + "provide a valid callback."); } - Result result = await UploadModMedia(modProfileDetails); + Result result = await AddModfile(modfile); callback?.Invoke(result); } - public static async void UploadModfile(ModfileDetails modfile, Action callback) + public static async void UploadModMedia(ModProfileDetails modProfileDetails, Action callback) { // Check for callback - if(callback == null) + if (callback == null) { Logger.Log( LogLevel.Warning, - "No callback was given to the UploadModfile method. You will not " + "No callback was given to the UploadModMedia method. You will not " + "be informed of the result for this action. It is highly recommended to " + "provide a valid callback."); } - Result result = await UploadModfile(modfile); + Result result = await UploadModMedia(modProfileDetails); callback?.Invoke(result); } @@ -2439,7 +2811,7 @@ public static async Task ArchiveModProfile(ModId modId) Result result; - if(IsInitialized(out result) && IsAuthenticatedSessionValid(out result)) + if (IsInitialized(out result) && IsAuthenticatedSessionValid(out result)) { var config = API.Requests.DeleteMod.Request(modId); result = await openCallbacks.Run(callbackConfirmation, WebRequestManager.Request(config)); @@ -2452,7 +2824,7 @@ public static async Task ArchiveModProfile(ModId modId) public static async void ArchiveModProfile(ModId modId, Action callback) { - if(callback == null) + if (callback == null) { Logger.Log( LogLevel.Warning, @@ -2468,8 +2840,8 @@ public static async void ArchiveModProfile(ModId modId, Action callback) static bool IsModfileDetailsValid(ModfileDetails modfile, out Result result) { // Check directory exists - if(!DataStorage.TryGetModfileDetailsDirectory(modfile.directory, - out string notbeingusedhere)) + if (modfile.uploadId == null && !DataStorage.TryGetModfileDetailsDirectory(modfile.directory, + out string _)) { Logger.Log(LogLevel.Error, "The provided directory in ModfileDetails could not be found or" @@ -2479,7 +2851,7 @@ static bool IsModfileDetailsValid(ModfileDetails modfile, out Result result) } // check metadata isn't too large - if(modfile.metadata?.Length > 50000) + if (modfile.metadata?.Length > 50000) { Logger.Log(LogLevel.Error, "The provided metadata in ModProfileDetails exceeds 50,000 characters" @@ -2492,8 +2864,8 @@ static bool IsModfileDetailsValid(ModfileDetails modfile, out Result result) if (modfile.changelog?.Length > 50000) { Logger.Log(LogLevel.Error, - "The provided changelog in ModProfileDetails exceeds 50,000 characters" - + $"(Was given {modfile.changelog})"); + "The provided changelog in ModProfileDetails exceeds 50,000 characters" + + $"(Was given {modfile.changelog})"); result = ResultBuilder.Create(ResultCode.InvalidParameter_ChangeLogTooLarge); return false; } @@ -2504,8 +2876,8 @@ static bool IsModfileDetailsValid(ModfileDetails modfile, out Result result) static bool IsModProfileDetailsValid(ModProfileDetails modDetails, out Result result) { - if(modDetails.logo == null || string.IsNullOrWhiteSpace(modDetails.summary) - || string.IsNullOrWhiteSpace(modDetails.name)) + if (modDetails.logo == null || string.IsNullOrWhiteSpace(modDetails.summary) + || string.IsNullOrWhiteSpace(modDetails.name)) { Logger.Log( LogLevel.Error, @@ -2522,7 +2894,7 @@ static bool IsModProfileDetailsValid(ModProfileDetails modDetails, out Result re static bool IsModProfileDetailsValidForEdit(ModProfileDetails modDetails, out Result result) { - if(modDetails.summary?.Length > 250) + if (modDetails.summary?.Length > 250) { Logger.Log(LogLevel.Error, "The provided summary in ModProfileDetails exceeds 250 characters"); @@ -2530,22 +2902,22 @@ static bool IsModProfileDetailsValidForEdit(ModProfileDetails modDetails, out Re return false; } - if(modDetails.logo != null) + if (modDetails.logo != null) { - if(modDetails.logo.EncodeToPNG().Length > 8388608) + if (modDetails.logo.EncodeToPNG().Length > 8388608) { Logger.Log(LogLevel.Error, - "The provided logo in ModProfileDetails exceeds 8 megabytes"); + "The provided logo in ModProfileDetails exceeds 8 megabytes"); result = ResultBuilder.Create(ResultCode.InvalidParameter_ModLogoTooLarge); return false; } } - if(modDetails.metadata?.Length > 50000) + if (modDetails.metadata?.Length > 50000) { Logger.Log(LogLevel.Error, - "The provided metadata in ModProfileDetails exceeds 50,000 characters" - + $"(Was given {modDetails.metadata.Length})"); + "The provided metadata in ModProfileDetails exceeds 50,000 characters" + + $"(Was given {modDetails.metadata.Length})"); result = ResultBuilder.Create(ResultCode.InvalidParameter_ModMetadataTooLarge); return false; } @@ -2553,8 +2925,8 @@ static bool IsModProfileDetailsValidForEdit(ModProfileDetails modDetails, out Re if (modDetails.description?.Length > 50000) { Logger.Log(LogLevel.Error, - "The provided description in ModProfileDetails exceeds 50,000 characters" - + $"(Was given {modDetails.description.Length})"); + "The provided description in ModProfileDetails exceeds 50,000 characters" + + $"(Was given {modDetails.description.Length})"); result = ResultBuilder.Create(ResultCode.InvalidParameter_DescriptionTooLarge); return false; @@ -2574,23 +2946,22 @@ public static async Task> GetCurrentUserCreations(SearchFilte var config = API.Requests.GetCurrentUserCreations.Request(filter); int offset = filter.pageIndex * filter.pageSize; - if(IsInitialized(out result) && IsSearchFilterValid(filter, out result) - && IsAuthenticatedSessionValid(out result) - && !ResponseCache.GetModsFromCache(config.Url, offset, filter.pageSize, out page)) + if (IsInitialized(out result) && IsSearchFilterValid(filter, out result) + && IsAuthenticatedSessionValid(out result) + && !ResponseCache.GetModsFromCache(config.Url, offset, filter.pageSize, out page)) { - var task = await openCallbacks.Run(callbackConfirmation, WebRequestManager. - Request(config)); + var task = await openCallbacks.Run(callbackConfirmation, WebRequestManager.Request(config)); result = task.result; - if(result.Succeeded()) + if (result.Succeeded()) { page = ResponseTranslator.ConvertResponseSchemaToModPage(task.value, filter); ResponseCache.AddModsToCache(config.Url, offset, page); - if(page.modProfiles.Length > filter.pageSize) + if (page.modProfiles.Length > filter.pageSize) { Array.Copy(page.modProfiles, page.modProfiles, filter.pageSize); } @@ -2605,7 +2976,7 @@ public static async Task> GetCurrentUserCreations(SearchFilte public static async void GetCurrentUserCreations(SearchFilter filter, Action> callback) { // Check for callback - if(callback == null) + if (callback == null) { Logger.Log( LogLevel.Warning, @@ -2617,6 +2988,521 @@ public static async void GetCurrentUserCreations(SearchFilter filter, Action result = await GetCurrentUserCreations(filter); callback?.Invoke(result); } -#endregion // Mod Uploading + + #endregion // Mod Uploading + + #region Multipart + + public static async Task>> GetMultipartUploadParts(ModId modId, string uploadId, SearchFilter filter) + { + var callbackConfirmation = openCallbacks.New(); + ResultAnd> response = ResultAnd.Create(ResultCode.Unknown, new PaginatedResponse()); + + if (IsInitialized(out response.result) && IsAuthenticatedSessionValid(out response.result)) + { + var config = API.Requests.GetMultipartUploadParts.Request(modId, uploadId, filter); + response = await openCallbacks.Run(callbackConfirmation, + WebRequestManager.Request>(config)); + } + + openCallbacks.Complete(callbackConfirmation); + return response; + } + + public static async void GetMultipartUploadParts(ModId modId, string uploadId, SearchFilter filter, Action>> callback) + { + // Callback warning + if (callback == null) + { + Logger.Log( + LogLevel.Warning, + "No callback was given to the GetMultipartUploadParts method. It is " + + "possible that this operation will not resolve successfully and should be " + + "checked with a proper callback."); + } + + ResultAnd> result = await GetMultipartUploadParts(modId, uploadId, filter); + callback?.Invoke(result); + } + + public static async Task>> GetMultipartUploadSessions(ModId modId, SearchFilter filter) + { + var callbackConfirmation = openCallbacks.New(); + ResultAnd> resultAnd = ResultAnd.Create(ResultCode.Unknown, new PaginatedResponse()); + + if (IsInitialized(out resultAnd.result) && IsAuthenticatedSessionValid(out resultAnd.result)) + { + var config = API.Requests.GetMultipartUploadSession.Request(modId, filter); + var response = await openCallbacks.Run(callbackConfirmation, WebRequestManager.Request>(config)); + resultAnd = response; + } + + openCallbacks.Complete(callbackConfirmation); + return resultAnd; + } + + public static async void GetMultipartUploadSessions(ModId modId, SearchFilter filter, Action>> callback) + { + // Callback warning + if (callback == null) + { + Logger.Log( + LogLevel.Warning, + "No callback was given to the GetMultipartSessions method. It is " + + "possible that this operation will not resolve successfully and should be " + + "checked with a proper callback."); + } + + ResultAnd> result = await GetMultipartUploadSessions(modId, filter); + callback?.Invoke(result); + } + + public static async Task AddMultipartUploadParts(ModId modId, string uploadId, string contentRange, string digest, byte[] rawBytes) + { + var callbackConfirmation = openCallbacks.New(); + + if (IsInitialized(out Result result) && IsAuthenticatedSessionValid(out result)) + { + var config = API.Requests.AddMultipartUploadParts.Request(modId, uploadId, contentRange, digest, rawBytes); + var response = await openCallbacks.Run(callbackConfirmation, WebRequestManager.Request(config)); + result = response.result; + } + + openCallbacks.Complete(callbackConfirmation); + return result; + } + + public static async void AddMultipartUploadParts(ModId modId, string uploadId, string contentRange, string digest, byte[] rawBytes, Action callback) + { + // Callback warning + if (callback == null) + { + Logger.Log( + LogLevel.Warning, + "No callback was given to the AddMultipartUploadParts method. It is " + + "possible that this operation will not resolve successfully and should be " + + "checked with a proper callback."); + } + + Result result = await AddMultipartUploadParts(modId, uploadId, contentRange, digest, rawBytes); + callback?.Invoke(result); + } + + public static async Task> CreateMultipartUploadSession(ModId modId, string filename, string nonce = null) + { + var callbackConfirmation = openCallbacks.New(); + var resultAnd = ResultAnd.Create(ResultCode.Unknown, new MultipartUpload()); + if (IsInitialized(out resultAnd.result) && IsAuthenticatedSessionValid(out resultAnd.result)) + { + var config = API.Requests.CreateMultipartUploadSession.Request(modId, filename, nonce); + resultAnd = await openCallbacks.Run(callbackConfirmation, WebRequestManager.Request(config)); + } + + openCallbacks.Complete(callbackConfirmation); + return resultAnd; + } + + public static async void CreateMultipartUploadSession(ModId modId, string filename, string nonce, Action> callback) + { + // Callback warning + if (callback == null) + { + Logger.Log( + LogLevel.Warning, + "No callback was given to the CreateMultipartUploadSession method. It is " + + "possible that this operation will not resolve successfully and should be " + + "checked with a proper callback."); + } + + ResultAnd result = await CreateMultipartUploadSession(modId, filename, nonce); + callback?.Invoke(result); + } + + public static async Task DeleteMultipartUploadSession(ModId modId, string uploadId) + { + var callbackConfirmation = openCallbacks.New(); + + if (IsInitialized(out Result result) && IsAuthenticatedSessionValid(out result)) + { + var config = API.Requests.DeleteMultipartUploadSession.Request(modId, uploadId); + var response = await openCallbacks.Run(callbackConfirmation, WebRequestManager.Request(config)); + result = response; + } + + openCallbacks.Complete(callbackConfirmation); + return result; + } + + public static async void DeleteMultipartUploadSession(ModId modId, string uploadId, Action callback) + { + // Callback warning + if (callback == null) + { + Logger.Log( + LogLevel.Warning, + "No callback was given to the DeleteMultipartUploadSession method. It is " + + "possible that this operation will not resolve successfully and should be " + + "checked with a proper callback."); + } + + Result result = await DeleteMultipartUploadSession(modId, uploadId); + callback?.Invoke(result); + } + + public static async Task CompleteMultipartUploadSession(ModId modId, string uploadId) + { + var callbackConfirmation = openCallbacks.New(); + + if (IsInitialized(out Result result) && IsAuthenticatedSessionValid(out result)) + { + var config = API.Requests.CompleteMultipartUploadSession.Request(modId, uploadId); + var response = await openCallbacks.Run(callbackConfirmation, WebRequestManager.Request(config)); + result = response; + } + + openCallbacks.Complete(callbackConfirmation); + return result; + } + + public static async void CompleteMultipartUploadSession(ModId modId, string uploadId, Action callback) + { + // Callback warning + if (callback == null) + { + Logger.Log( + LogLevel.Warning, + "No callback was given to the CompleteMultipartUploadSession method. It is " + + "possible that this operation will not resolve successfully and should be " + + "checked with a proper callback."); + } + + Result result = await CompleteMultipartUploadSession(modId, uploadId); + callback?.Invoke(result); + } + + #endregion + + #region Monetization + + public static async Task> GetTokenPacks(Action> callback = null) + { + var callbackConfirmation = openCallbacks.New(); + + TokenPack[] tokenPacks = Array.Empty(); + + if (IsInitialized(out Result result) && !ResponseCache.GetTokenPacksFromCache(out tokenPacks)) + { + var config = API.Requests.GetTokenPacks.Request(); + var task = await openCallbacks.Run(callbackConfirmation, WebRequestManager.Request(config)); + + result = task.result; + if (result.Succeeded()) + { + tokenPacks = ResponseTranslator.ConvertTokenPackObjectsToTokenPacks(task.value.data); + ResponseCache.AddTokenPacksToCache(tokenPacks); + } + } + + openCallbacks.Complete(callbackConfirmation); + + var resultAnd = ResultAnd.Create(result, tokenPacks); + + callback?.Invoke(resultAnd); + + return resultAnd; + } + + public static async Task> SyncEntitlements() + { + Task> requestTask = null; + Entitlement[] entitlements = null; + WebRequestConfig config = null; + +#if UNITY_GAMECORE && !UNITY_EDITOR + var token = await GamecoreHelper.GetToken(); + config = API.Requests.SyncEntitlements.XboxRequest(token); + requestTask = WebRequestManager.Request(config); +#elif UNITY_PS4 && !UNITY_EDITOR + var token = await PS4Helper.GetAuthCodeForEntitlements(); + if(Settings.build is PlaystationBuildSettings psb) + { + config = API.Requests.SyncEntitlements.PsnRequest(token.code, token.environment, psb.serviceLabel); + requestTask = WebRequestManager.Request(config); + } +#elif UNITY_PS5 && !UNITY_EDITOR + var token = await PS5Helper.GetAuthCodeForEntitlements(); + if(Settings.build is PlaystationBuildSettings psb) + { + config = API.Requests.SyncEntitlements.PsnRequest(token.code, token.environment, psb.serviceLabel); + requestTask = WebRequestManager.Request(config); + } +#elif UNITY_STANDALONE + config = API.Requests.SyncEntitlements.SteamRequest(); + requestTask = WebRequestManager.Request(config); +#else + return ResultAnd.Create(ResultBuilder.Create(ResultCode.User_NotAuthenticated), null); +#endif + + var callbackConfirmation = openCallbacks.New(); + + if (IsInitialized(out Result result) && IsAuthenticatedSessionValid(out result)) + { + result = await IsMarketplaceEnabled(); + if (result.Succeeded()) + { + try + { + var task = await openCallbacks.Run(callbackConfirmation, requestTask); + + result = task.result; + + if (result.Succeeded()) + { + entitlements = ResponseTranslator.ConvertEntitlementObjectsToEntitlements(task.value.data); + ResponseCache.ReplaceEntitlements(entitlements); + } + } + catch (Exception e) + { + Logger.Log(LogLevel.Error, $"FAILED: {e.Message}"); + return ResultAnd.Create(result, null); + } + } + } + + callbackConfirmation.SetResult(true); + openCallbacks_dictionary.Remove(callbackConfirmation); + + return ResultAnd.Create(result, entitlements); + } + + public static async void SyncEntitlements(Action> callback) + { + // Early out + if (callback == null) + { + Logger.Log( + LogLevel.Warning, + "No callback was given to the SyncSteamEntitlements method, any response " + + "returned from the server wont be used. This operation has been cancelled."); + return; + } + + var result = await SyncEntitlements(); + callback(result); + } + + public static async Task> PurchaseMod(ModId modId, int displayAmount, string idempotent) + { + if (Regex.IsMatch(idempotent, "^[a-zA-Z0-9-]+$")) + { + Logger.Log(LogLevel.Warning, "ModIOUnityImplementation.PurchaseMod: Idempotent should be alphanumeric, should not contain unique characters except for -."); + } + + var callbackConfirmation = openCallbacks.New(); + + ResultAnd checkoutProcess = ResultAnd.Create(ResultCode.Unknown, default); + + if (IsInitialized(out checkoutProcess.result) && IsAuthenticatedSessionValid(out checkoutProcess.result)) + { + checkoutProcess.result = await IsMarketplaceEnabled(); + if (checkoutProcess.result.Succeeded()) + { + var config = API.Requests.PurchaseMod.Request(modId, displayAmount, idempotent); + var resultAnd = await openCallbacks.Run(callbackConfirmation, WebRequestManager.Request(config)); + + if (resultAnd.result.Succeeded()) + { + checkoutProcess = ResultAnd.Create(resultAnd.result, ResponseTranslator.ConvertCheckoutProcessObjectToCheckoutProcess(resultAnd.value)); + ResponseCache.UpdateWallet(resultAnd.value.balance); + ModCollectionManager.UpdateModCollectionEntry(modId, resultAnd.value.mod); + ModCollectionManager.AddModToUserPurchases(modId); + ModManagement.WakeUp(); + } + } + } + + openCallbacks.Complete(callbackConfirmation); + + return checkoutProcess; + } + + public static async void PurchaseMod(ModId modId, int displayAmount, string idempotent, Action> callback) + { + // Check for callback + if (callback == null) + { + Logger.Log( + LogLevel.Warning, + "No callback was given to the CompleteAMarketplacePurchase method. You will not " + + "be informed of the result for this action. It is highly recommended to " + + "provide a valid callback."); + } + + ResultAnd result = await PurchaseMod(modId, displayAmount, idempotent); + callback?.Invoke(result); + } + + public static async Task> GetUserPurchases(SearchFilter filter) + { + TaskCompletionSource callbackConfirmation = openCallbacks.New(); + + ModPage page = new ModPage(); + + string unpaginatedURL = API.Requests.GetUserPurchases.UnpaginatedURL(filter); + var offset = filter.pageIndex * filter.pageSize; + + if (IsInitialized(out Result result) && IsSearchFilterValid(filter, out result) + && !ResponseCache.GetModsFromCache(unpaginatedURL, offset, filter.pageSize, out page)) + { + var config = API.Requests.GetUserPurchases.Request(filter); + + var task = await openCallbacks.Run(callbackConfirmation, + WebRequestManager.Request(config)); + + result = task.result; + + if (result.Succeeded()) + { + page = ResponseTranslator.ConvertResponseSchemaToModPage(task.value, filter); + + // Return the exact number of mods that were requested (not more) + if (page.modProfiles.Length > filter.pageSize) + { + Array.Copy(page.modProfiles, page.modProfiles, filter.pageSize); + } + } + } + + openCallbacks.Complete(callbackConfirmation); + + return ResultAnd.Create(result, page); + } + + public static async void GetUserPurchases(SearchFilter filter, Action> callback) + { + // Early out + if (callback == null) + { + Logger.Log( + LogLevel.Warning, + "No callback was given to the GetUserPurchases method, any response " + + "returned from the server wont be used. This operation has been cancelled."); + return; + } + ResultAnd result = await GetUserPurchases(filter); + callback?.Invoke(result); + } + + public static async Task> GetUserWalletBalance() + { + var callbackConfirmation = openCallbacks.New(); + + ResultAnd resultAnd = ResultAnd.Create(ResultCode.Success, default); + Wallet wallet = default; + if (IsInitialized(out resultAnd.result) && IsAuthenticatedSessionValid(out resultAnd.result) + && !ResponseCache.GetWalletFromCache(out wallet)) + { + resultAnd.result = await IsMarketplaceEnabled(); + if (resultAnd.result.Succeeded()) + { + var config = API.Requests.GetUserWalletBalance.Request(); + resultAnd = await openCallbacks.Run(callbackConfirmation, + WebRequestManager.Request(config)); + if (resultAnd.result.Succeeded()) + { + wallet = ResponseTranslator.ConvertWalletObjectToWallet(resultAnd.value); + ResponseCache.UpdateWallet(resultAnd.value); + } + } + } + + openCallbacks.Complete(callbackConfirmation); + + return ResultAnd.Create(resultAnd.result, wallet); + } + + public static async void GetUserWalletBalance(Action> callback) + { + // Early out + if (callback == null) + { + Logger.Log( + LogLevel.Warning, + "No callback was given to the GetUserPurchases method, any response " + + "returned from the server wont be used. This operation has been cancelled."); + return; + } + ResultAnd result = await GetUserWalletBalance(); + callback?.Invoke(result); + } + + public static async Task> GetModMonetizationTeam(ModId modId) + { + var callbackConfirmation = openCallbacks.New(); + + + Result result; + MonetizationTeamAccount[] teamAccounts = default; + + if (IsInitialized(out result) && IsAuthenticatedSessionValid(out result) + && !ResponseCache.GetModMonetizationTeamCache(modId, out teamAccounts)) + { + var task = await API.Requests.GetModMonetizationTeam.Request(modId).RunViaWebRequestManager(); + + result = task.result; + if (task.result.Succeeded()) + { + teamAccounts = ResponseTranslator.ConvertGameMonetizationTeamObjectsToGameMonetizationTeams(task.value.data); + + ResponseCache.AddModMonetizationTeamToCache(modId, teamAccounts); + } + } + + openCallbacks.Complete(callbackConfirmation); + + return ResultAnd.Create(result, teamAccounts); + } + + public static async void GetModMonetizationTeam(Action> callback, ModId modId) + { + // Early out + if (callback == null) + { + Logger.Log( + LogLevel.Warning, + "No callback was given to the GetModMonetizationTeam method, any response " + + "returned from the server wont be used. This operation has been cancelled."); + return; + } + ResultAnd result = await GetModMonetizationTeam(modId); + callback?.Invoke(result); + } + + public static async Task AddModMonetizationTeam(ModId modId, ICollection team) + { + var callbackConfirmation = openCallbacks.New(); + + if (IsInitialized(out Result result) && IsAuthenticatedSessionValid(out result)) + { + var config = API.Requests.AddModMonetizationTeam.Request(modId, team); + result = await openCallbacks.Run(callbackConfirmation, + WebRequestManager.Request(config)); + + ResponseCache.ClearModMonetizationTeamFromCache(modId); + } + + openCallbacks.Complete(callbackConfirmation); + + return result; + } + + public static async void AddModMonetizationTeam(Action callback, ModId modId, ICollection team) + { + Result result = await AddModMonetizationTeam(modId, team); + callback?.Invoke(result); + } + + #endregion //Monetization } } diff --git a/Runtime/ModIO.Implementation/Classes/ModIOVersion.cs b/Runtime/ModIO.Implementation/Classes/ModIOVersion.cs index 34588a3..683d39c 100644 --- a/Runtime/ModIO.Implementation/Classes/ModIOVersion.cs +++ b/Runtime/ModIO.Implementation/Classes/ModIOVersion.cs @@ -5,12 +5,12 @@ internal struct ModIOVersion : System.IComparable { // ---------[ Singleton ]--------- /// Singleton instance for current version. - public static readonly ModIOVersion Current = new ModIOVersion(2023, 7, 1, "beta"); + public static readonly ModIOVersion Current = new ModIOVersion(2024, 3, 1, "beta"); // ---------[ Fields ]--------- /// Main Version number. public int year; - + // ---------[ Fields ]--------- /// Major version number. /// Represents the major version number. Increases when there is a breaking change @@ -55,7 +55,7 @@ public ModIOVersion(int year, int month, int patch, string suffix = null) public int CompareTo(ModIOVersion other) { int result = year.CompareTo(other.year); - + if(result == 0) { result = month.CompareTo(other.month); @@ -98,7 +98,7 @@ public int CompareTo(ModIOVersion other) /// Creates the request header representation of the version. public string ToHeaderString() => $"modio-{year.ToString()}.{month.ToString()}.{patch.ToString()}-{suffix}"; - + #endregion // Utility } diff --git a/Runtime/ModIO.Implementation/Classes/ModManagement.cs b/Runtime/ModIO.Implementation/Classes/ModManagement.cs index 06a8b1d..d6974c3 100644 --- a/Runtime/ModIO.Implementation/Classes/ModManagement.cs +++ b/Runtime/ModIO.Implementation/Classes/ModManagement.cs @@ -147,8 +147,8 @@ public static async void WakeUp() public static void AbortCurrentInstallJob() { Logger.Log(LogLevel.Message, - $"Aborting installation of Mod[{currentJob.mod.modObject.id}_" + - $"{currentJob.mod.modObject.modfile.id}]"); + $"Aborting installation of Mod[{currentJob.modEntry.modObject.id}_" + + $"{currentJob.modEntry.modObject.modfile.id}]"); ModManagement.currentJob.zipOperation.Cancel(); //I'm guessing this might put it into the tainted mods? @@ -158,10 +158,10 @@ public static void AbortCurrentInstallJob() public static void AbortCurrentDownloadJob() { Logger.Log(LogLevel.Message, - $"Aborting download of Mod[{currentJob.mod.modObject.id}_" + - $"{currentJob.mod.modObject.modfile.id}]"); + $"Aborting download of Mod[{currentJob.modEntry.modObject.id}_" + + $"{currentJob.modEntry.modObject.modfile.id}]"); currentJob.downloadWebRequest?.cancel?.Invoke(); - abortingDownloadsModObjectIds.Add(currentJob.mod.modObject.id); + abortingDownloadsModObjectIds.Add(currentJob.modEntry.modObject.id); } static bool DownloadIsAborting(long id) @@ -172,7 +172,7 @@ static bool DownloadIsAborting(long id) static async Task PerformJobs() { // Look for a job to be performed - currentJob = GetNextModManagementJob(); + currentJob = await GetNextModManagementJob(); while(currentJob != null && isModManagementEnabled) { @@ -181,27 +181,29 @@ static async Task PerformJobs() //need to allow this job to fail if it was aborted. if(!result.Succeeded()) { - if(DownloadIsAborting(currentJob.mod.modObject.id)) + if(DownloadIsAborting(currentJob.modEntry.modObject.id)) { //clean this up, we shouldn't get here again - abortingDownloadsModObjectIds.Remove(currentJob.mod.modObject.id); + abortingDownloadsModObjectIds.Remove(currentJob.modEntry.modObject.id); + if(previousJobs.ContainsKey(currentJob.modEntry.modObject.id)) + previousJobs.Remove(currentJob.modEntry.modObject.id); } else { Logger.Log(LogLevel.Error, "ModManagement Failed to complete an operation." - + $" the Mod[{currentJob.mod.modObject.id}_{currentJob.mod.modObject.modfile.id}]" + + $" the Mod[{currentJob.modEntry.modObject.id}_{currentJob.modEntry.modObject.modfile.id}]" + " will be ignored by ModManagement for the duration" + " of the session. If it failed due to insufficient storage" + " space it will re-attempt after a mod deletion has occurred."); - taintedMods.Add((ModId)currentJob.mod.modObject.id); + taintedMods.Add((ModId)currentJob.modEntry.modObject.id); } } ModCollectionManager.SaveRegistry(); - currentJob = isModManagementEnabled ? GetNextModManagementJob() : null; + currentJob = isModManagementEnabled ? await GetNextModManagementJob() : null; } currentJob = null; } @@ -216,9 +218,9 @@ public static async Task PerformJob(ModManagementJob job) return ResultBuilder.Create(ResultCode.Internal_ModManagementOperationFailed); } - long modId = job.mod.modObject.id; - long fileId = job.mod.modObject.modfile.id; - long currentFileId = job.mod.currentModfile.id; + long modId = job.modEntry.modObject.id; + long fileId = job.modEntry.modObject.modfile.id; + long currentFileId = job.modEntry.currentModfile.id; // Check for unwanted behaviour, possible infinite loop if(previousJobs.ContainsKey(modId)) @@ -227,7 +229,7 @@ public static async Task PerformJob(ModManagementJob job) { Logger.Log(LogLevel.Error, $"Mod Management [{modId}_{job.type.ToString()}" - + $"_{currentJob.mod.modObject.modfile.id}]" + + $"_{currentJob.modEntry.modObject.modfile.id}]" + $" has received an identical job that should " + $"already be complete. To avoid getting into an " + $"infinite loop the ModId[{modId}] has been " @@ -371,7 +373,7 @@ public static async Task PerformJob(ModManagementJob job) job.progressHandle.OperationType = ModManagementOperationType.Uninstall; - result = await PerformOperation_Delete(modId, job.mod.currentModfile.id); + result = await PerformOperation_Delete(modId, job.modEntry.currentModfile.id); // We dont really track this process as it's nearly instantaneous job.progressHandle.Progress = 1f; @@ -388,7 +390,7 @@ public static async Task PerformJob(ModManagementJob job) { // Also remove the temp archive file if we know we ran into storage issues // We do not need to check the result - DataStorage.TryDeleteModfileArchive(modId, job.mod.currentModfile.id, out Result _); + DataStorage.TryDeleteModfileArchive(modId, job.modEntry.currentModfile.id, out Result _); // the reason we dont always delete the archive is because a user may // accidentally hit unsubscribe or change their mind a few seconds later // and if it is a large mod it would take a long time to re-download it. @@ -429,11 +431,11 @@ public static async Task PerformJob(ModManagementJob job) // PerformJob will determine the type of job and use the following methods accordingly. static async Task PerformOperation_Download(ModManagementJob job) { - long modId = job.mod.modObject.id; - long fileId = job.mod.modObject.modfile.id; + long modId = job.modEntry.modObject.id; + long fileId = job.modEntry.modObject.modfile.id; // Check for enough storage space - if(!await DataStorage.temp.IsThereEnoughDiskSpaceFor(job.mod.modObject.modfile.filesize)) + if(!await DataStorage.temp.IsThereEnoughDiskSpaceFor(job.modEntry.modObject.modfile.filesize)) { Logger.Log(LogLevel.Error, $"INSUFFICIENT STORAGE FOR DOWNLOAD [{modId}_{fileId}]"); notEnoughStorageMods.Add((ModId)modId); @@ -461,10 +463,10 @@ static async Task PerformOperation_Download(ModManagementJob job) } else { - job.mod.modObject = modResponse.value; + job.modEntry.modObject = modResponse.value; //Re-cache file id in case of an update/patch to the mod - fileId = job.mod.modObject.modfile.id; + fileId = job.modEntry.modObject.modfile.id; // Update the registry for this mod as it's now the newest instance of this mod we have ModCollectionManager.UpdateModCollectionEntry((ModId)modResponse.value.id, modResponse.value); @@ -477,10 +479,10 @@ static async Task PerformOperation_Download(ModManagementJob job) } // Get Modfile url from ModObject - string fileURL = job.mod.modObject.modfile.download.binary_url; + string fileURL = job.modEntry.modObject.modfile.download.binary_url; // Get correctMD5 and download location - string md5 = job.mod.modObject.modfile.filehash.md5; + string md5 = job.modEntry.modObject.modfile.filehash.md5; string downloadFilepath = DataStorage.GenerateModfileArchiveFilePath(modId, fileId); Result downloadResult = ResultBuilder.Unknown; @@ -531,7 +533,7 @@ static async Task PerformOperation_Download(ModManagementJob job) } // Make sure the downloaded file MD5 matches the given MD5 - if(ValidateDownload_md5(md5, downloadFilepath)) + if(await ValidateDownload_md5(md5, downloadFilepath)) { if(!ShouldModManagementBeRunning()) { @@ -567,13 +569,13 @@ static Result DownloadCleanup(Result result, long modId, long fileId) static async Task PerformOperation_Install(ModManagementJob job) { - long modId = job.mod.modObject.id; - long fileId = job.mod.modObject.modfile.id; + long modId = job.modEntry.modObject.id; + long fileId = job.modEntry.modObject.modfile.id; // Check for enough storage space // TODO update this later when we can confirm actual extracted file size // For now we are just making sure we have double the available space of the archive size as the estimate for the extracted file - if(!await DataStorage.persistent.IsThereEnoughDiskSpaceFor(job.mod.modObject.modfile.filesize * 2L)) + if(!await DataStorage.persistent.IsThereEnoughDiskSpaceFor(job.modEntry.modObject.modfile.filesize * 2L)) { Logger.Log(LogLevel.Error, $"INSUFFICIENT STORAGE FOR INSTALLATION [{modId}_{fileId}]"); notEnoughStorageMods.Add((ModId)modId); @@ -599,9 +601,9 @@ static async Task PerformOperation_Install(ModManagementJob job) if(result.Succeeded()) { // try to cleanup any existing outdated modfile - if(fileId != job.mod.currentModfile.id) + if(fileId != job.modEntry.currentModfile.id) { - long currentFileId = job.mod.currentModfile.id; + long currentFileId = job.modEntry.currentModfile.id; if(DataStorage.TryGetInstallationDirectory(modId, currentFileId, out string _)) { @@ -617,8 +619,8 @@ static async Task PerformOperation_Install(ModManagementJob job) } // Set currentModfile to the existing modfile (because we succeeded to install) - job.mod.currentModfile = job.mod.modObject.modfile; - ModCollectionManager.UpdateModCollectionEntryFromModObject(job.mod.modObject); + job.modEntry.currentModfile = job.modEntry.modObject.modfile; + ModCollectionManager.UpdateModCollectionEntryFromModObject(job.modEntry.modObject); Logger.Log(LogLevel.Verbose, $"INSTALLED MOD [{modId}_{fileId}]"); } else @@ -686,7 +688,7 @@ public static ProgressHandle GetCurrentOperationProgress() return null; } - currentJob.progressHandle.modId = (ModId)currentJob.mod.modObject.id; + currentJob.progressHandle.modId = (ModId)currentJob.modEntry.modObject.id; return currentJob.progressHandle; } @@ -698,6 +700,32 @@ public static void InvokeModManagementDelegate(ModId modId, modManagementEventDelegate?.Invoke(eventType, modId, eventResult); } + public static async Task DownloadNow(ModId modId) + { + if(currentJob.modEntry.modObject.id == modId && currentJob.type == ModManagementOperationType.Download) + return ResultBuilder.Success; + + var modResponse = await WebRequestManager.Request(API.Requests.GetMod.Request(modId)); + var result = modResponse.result; + if(!modResponse.result.Succeeded()) + { + Logger.Log(LogLevel.Warning, $"Failed to get mod[{modId}]"); + } + else + { + ModCollectionManager.UpdateModCollectionEntry(modId, modResponse.value, -1); + } + + if (currentJob != null && currentJob.progressHandle.OperationType == ModManagementOperationType.Download) + { + AbortCurrentDownloadJob(); + } + + WakeUp(); + return result; + } + + public static SubscribedModStatus GetModCollectionEntrysSubscribedModStatus( ModCollectionEntry mod) { @@ -739,7 +767,7 @@ public static SubscribedModStatus GetModCollectionEntrysSubscribedModStatus( return SubscribedModStatus.Installed; } - static ModManagementJob GetNextModManagementJob() + static async Task GetNextModManagementJob() { // Early out if(!ShouldModManagementBeRunning()) @@ -769,7 +797,7 @@ static ModManagementJob GetNextModManagementJob() while(enumerator.MoveNext()) { //keep scanning for install jobs - ModCollectionEntry mod = enumerator.Current.Value; + ModCollectionEntry modEntry = enumerator.Current.Value; // Check if we should still be running if(!ShouldModManagementBeRunning()) @@ -778,26 +806,23 @@ static ModManagementJob GetNextModManagementJob() } // Check if this mod is part of the current game id. We dont want to manage mods for a different game - if(mod.modObject.game_id != Settings.server.gameId) + if(modEntry.modObject.game_id != Settings.server.gameId) { continue; } - ModManagementOperationType jobType = - GetNextJobTypeForModCollectionEntry(mod); + ModManagementOperationType jobType = await GetNextJobTypeForModCollectionEntry(modEntry); if(jobType != ModManagementOperationType.None_AlreadyInstalled && jobType != ModManagementOperationType.None_ErrorOcurred) { if(jobType == ModManagementOperationType.Install) { - job = new ModManagementJob { mod = mod, type = jobType }; + job = new ModManagementJob { modEntry = modEntry, type = jobType }; break; } else - { - job = FilterJob(job, mod, jobType); - } + job = FilterJob(job, modEntry, jobType); } } } @@ -815,18 +840,18 @@ static ModManagementJob FilterJob(ModManagementJob job, ModCollectionEntry mod, { if(job == null) { - job = new ModManagementJob { mod = mod, type = jobType }; + job = new ModManagementJob { modEntry = mod, type = jobType }; } - if(jobType < job.type) + if(mod.priority < job.modEntry.priority) { - job = new ModManagementJob { mod = mod, type = jobType }; + job = new ModManagementJob { modEntry = mod, type = jobType }; } return job; } - static ModManagementOperationType GetNextJobTypeForModCollectionEntry( + static async Task GetNextJobTypeForModCollectionEntry( ModCollectionEntry mod) { ModId modId = (ModId)mod.modObject.id; @@ -841,7 +866,7 @@ static ModManagementOperationType GetNextJobTypeForModCollectionEntry( bool delete = ShouldThisModBeUninstalled(modId); - if(delete) + if(delete ) { if(DataStorage.TryGetInstallationDirectory(modId, currentFileId, out string _)) @@ -865,7 +890,7 @@ static ModManagementOperationType GetNextJobTypeForModCollectionEntry( { // Make sure the installed modfile has the correct md5 //DataStorage.TryGetModFileArchive(mod, out var downloadFilepath); - if(!ValidateDownload_md5(mod.modObject.modfile.filehash.md5, downloadFilepath)) + if(!(await ValidateDownload_md5(mod.modObject.modfile.filehash.md5, downloadFilepath))) { // if the md5 is incorrect re-download the file // (it may have been interrupted from a previous session) @@ -891,7 +916,8 @@ static bool ShouldThisModBeUninstalled(ModId modId) // Get all users that are subscribed to this mod while(enumerator.MoveNext()) { - if(enumerator.Current.Value.subscribedMods.Contains(modId)) + if(enumerator.Current.Value.subscribedMods.Contains(modId) || + enumerator.Current.Value.purchasedMods.Contains(modId)) { users.Add(enumerator.Current.Key); } @@ -929,10 +955,10 @@ static bool ShouldThisModBeUninstalled(ModId modId) return false; } - public static bool ValidateDownload_md5(string correctMD5, + public static async Task ValidateDownload_md5(string correctMD5, string zippedFilepath) { - string md5 = IOUtil.GenerateArchiveMD5(zippedFilepath); + string md5 = await IOUtil.GenerateArchiveMD5(zippedFilepath); bool isCorrect = correctMD5.Equals(md5); if(!isCorrect) diff --git a/Runtime/ModIO.Implementation/Classes/ModManagementJob.cs b/Runtime/ModIO.Implementation/Classes/ModManagementJob.cs index 391f1da..847275f 100644 --- a/Runtime/ModIO.Implementation/Classes/ModManagementJob.cs +++ b/Runtime/ModIO.Implementation/Classes/ModManagementJob.cs @@ -9,7 +9,7 @@ internal class ModManagementJob ///
public ProgressHandle progressHandle; - public ModCollectionEntry mod; + public ModCollectionEntry modEntry; public ModManagementOperationType type; public RequestHandle downloadWebRequest; diff --git a/Runtime/ModIO.Implementation/Classes/ResultCode.cs b/Runtime/ModIO.Implementation/Classes/ResultCode.cs index ff1103a..fff9840 100644 --- a/Runtime/ModIO.Implementation/Classes/ResultCode.cs +++ b/Runtime/ModIO.Implementation/Classes/ResultCode.cs @@ -1,6 +1,6 @@ -using System.Collections.Generic; +using ModIO.Implementation.API.Objects; +using System.Collections.Generic; using System.Linq; -using ModIO.Implementation.API.Objects; namespace ModIO.Implementation { @@ -9,7 +9,7 @@ internal static class ResultCode { // When adding a new value make sure it's also added to the errorCodesClearText dictionary. -#region Value Constants + #region Value Constants // - success - public const uint Success = 0; @@ -29,6 +29,8 @@ internal static class ResultCode public const uint Settings_InvalidGameKey = 20052; public const uint Settings_InvalidLanguageCode = 20053; public const uint Settings_UploadsDisabled = 20054; + public const uint Settings_MarketplaceNotEnabled = 20055; + public const uint Settings_UnableToRetrieveGameProfile = 20056; // - auth errors - public const uint User_NotAuthenticated = 20100; @@ -51,7 +53,7 @@ internal static class ResultCode public const uint InvalidParameter_CantBeNull = 20213; public const uint InvalidParameter_MissingModId = 20214; public const uint InvalidParameter_TooMany = 20215; - + public const uint InvalidParameter_DownloadReferenceIsntValid = 20220; // - API handling errors - @@ -89,7 +91,7 @@ internal static class ResultCode public const uint Internal_FileHashMismatch = 20505; public const uint Internal_OperationCancelled = 20506; public const uint Internal_InvalidParameter = 20507; - + // - WSS handling errors - public const uint WSS_NotConnected = 20600; public const uint WSS_FailedToSend = 20601; @@ -133,8 +135,11 @@ internal static class ResultCode // 11007 Authenticated user account has been banned by mod.io admins. public const uint RESTAPI_UserAccountBanned = 11007; - // 11008 You have been ratelimited for making too many requests. See Rate Limiting. - public const uint RESTAPI_RateLimitExceeded = 11008; + // 11008 You have been rate limited globally for making too many requests. See Rate Limiting. + public const uint RESTAPI_RateLimitExceededGlobal = 11008; + + // 11009 You have been rate limited from calling this endpoint again, for making too many requests. See Rate Limiting. + public const uint RESTAPI_RateLimitExceededEndpoint = 11009; // 11012 Invalid security code. public const uint RESTAPI_11012 = 11012; @@ -142,6 +147,9 @@ internal static class ResultCode // 11014 security code has expired. Please request a new code public const uint RESTAPI_11014 = 11014; + // 11069 error.monetization_iap_connected_portal_account_not_found + public const uint RESTAPI_PortalAccountNotFound = 11069; + // 13001 The submitted binary file is corrupted. public const uint RESTAPI_SubmittedBinaryCorrupt = 13001; @@ -304,7 +312,8 @@ internal static class ResultCode // 11043 mod.io was unable to get account data from the Discord servers. public const uint RESTAPI_DiscordUnableToGetAccountData = 11043; -#endregion + public const uint FILEUPLOAD_Error = 30033; + #endregion private static HashSet cacheClearingErrorCodes = new HashSet() { RESTAPI_OAuthTokenExpired, @@ -423,8 +432,10 @@ internal static class ResultCode { RESTAPI_UserAccountDeleted, "Authenticated user account has been deleted." }, { RESTAPI_UserAccountBanned, "Authenticated user account has been banned by mod.io admins." }, - { RESTAPI_RateLimitExceeded, - "You have been ratelimited for making too many requests. See Rate Limiting." }, + { RESTAPI_RateLimitExceededGlobal, + "You have been rate limited globally for making too many requests. See Rate Limiting." }, + { RESTAPI_RateLimitExceededEndpoint, + "You have been rate limited from calling this endpoint again, for making too many requests. See Rate Limiting." }, { RESTAPI_11012, "Invalid security code." }, { RESTAPI_11014, "Security code has expired. Please request a new code." }, { RESTAPI_SubmittedBinaryCorrupt, "The submitted binary file is corrupted." }, @@ -511,7 +522,7 @@ public static bool IsInvalidSession(ErrorObject errorObject) public static string GetErrorCodeMeaning(uint code) { - if(errorCodesClearText.TryGetValue(code, out var meaning)) + if (errorCodesClearText.TryGetValue(code, out var meaning)) { return meaning; } diff --git a/Runtime/ModIO.Implementation/Classes/SettingsAsset.cs b/Runtime/ModIO.Implementation/Classes/SettingsAsset.cs index b67c77c..be38dba 100644 --- a/Runtime/ModIO.Implementation/Classes/SettingsAsset.cs +++ b/Runtime/ModIO.Implementation/Classes/SettingsAsset.cs @@ -1,11 +1,36 @@ #if UNITY_2019_4_OR_NEWER +using System; using UnityEngine; namespace ModIO.Implementation { +#region Placeholder Build Settings + //Placeholders which are filled out when adding the corresponding package. + [Serializable] public partial class SwitchBuildSettings : BuildSettings {} + [Serializable] public partial class GameCoreBuildSettings : BuildSettings {} + [Serializable] public partial class PlaystationBuildSettings : BuildSettings {} +#endregion + /// Asset representation of a collection of build-settings. - internal partial class SettingsAsset : ScriptableObject + internal class SettingsAsset : ScriptableObject { + private void Awake() + { + editorConfiguration.logLevel = editorLogLevel; + iosConfiguration.userPortal = UserPortal.Apple; + iosConfiguration.logLevel = playerLogLevel; + standaloneConfiguration.userPortal = UserPortal.None; + standaloneConfiguration.logLevel = playerLogLevel; + androidConfiguration.userPortal = UserPortal.Google; + androidConfiguration.logLevel = playerLogLevel; + switchConfiguration.userPortal = UserPortal.Nintendo; + switchConfiguration.logLevel = playerLogLevel; + playstationConfiguration.userPortal = UserPortal.PlayStationNetwork; + playstationConfiguration.logLevel = playerLogLevel; + gameCoreConfiguration.userPortal = UserPortal.XboxLive; + gameCoreConfiguration.logLevel = playerLogLevel; + } + #region Asset Management /// Data path for the asset. @@ -60,22 +85,48 @@ public static Result TryLoad(out bool autoInitializePlugin) // that is exposed without protection and an implementation of GetBuildSettings() // protected by a platform pre-processor. - /// Configuration for the editor. - public BuildSettings editorConfiguration; - //Initializes the ModIO plugin, with default settings, the first time it is used - public bool autoInitializePlugin = true; - -#if UNITY_EDITOR + [SerializeField] private bool autoInitializePlugin = true; + + /// Level to log at. + [SerializeField] private LogLevel playerLogLevel; + /// Level to log at. + [SerializeField] private LogLevel editorLogLevel; + /// Configuration for iOS. + [SerializeField] private BuildSettings iosConfiguration; + /// Configuration for Windows. + [SerializeField] private BuildSettings standaloneConfiguration; + /// Configuration for Android. + [SerializeField] private BuildSettings androidConfiguration; + /// Configuration for Switch. + [SerializeField] private SwitchBuildSettings switchConfiguration; + /// Configuration for Gamecore. + [SerializeField] private GameCoreBuildSettings gameCoreConfiguration; + /// Configuration for Playstation. + [SerializeField] private PlaystationBuildSettings playstationConfiguration; + /// Configuration for the editor. + [SerializeField] private BuildSettings editorConfiguration; - /// Gets the configuration for the editor. - public BuildSettings GetBuildSettings() + private BuildSettings GetBuildSettings() { + #if (UNITY_PS4 || UNITY_PS5) + return playstationConfiguration; + #elif UNITY_SWITCH + return switchConfiguration; + #elif UNITY_GAMECORE + return gameCoreConfiguration; + #elif UNITY_IOS + return this.iosConfiguration; + #elif (UNITY_STANDALONE || UNITY_WSA) + return this.standaloneConfiguration; + #elif UNITY_ANDROID + return this.androidConfiguration; + #elif UNITY_EDITOR return this.editorConfiguration; + #endif } -#endif // UNITY_EDITOR #endregion // Data } } -#endif +#endif//UNITY_2019_4_OR_NEWER diff --git a/Runtime/ModIO.Implementation/Classes/UserData.cs b/Runtime/ModIO.Implementation/Classes/UserData.cs index 815e70f..dee3cc8 100644 --- a/Runtime/ModIO.Implementation/Classes/UserData.cs +++ b/Runtime/ModIO.Implementation/Classes/UserData.cs @@ -19,6 +19,8 @@ internal class UserData /// OAuthToken assigned to the user. public string oAuthToken; + public AuthenticationServiceProvider currentServiceProvider = AuthenticationServiceProvider.None; + public long oAuthExpiryDate; /// Has the token been rejected. @@ -58,8 +60,10 @@ public void ClearUser() } /// Convenience wrapper that sets OAuthToken and clears rejected flag. - public void SetOAuthToken(AccessTokenObject newToken) + public void SetOAuthToken(AccessTokenObject newToken, AuthenticationServiceProvider serviceProvider) { + ResponseCache.ClearCache(); + currentServiceProvider = serviceProvider; oAuthToken = newToken.access_token; oAuthExpiryDate = newToken.date_expires; oAuthTokenWasRejected = false; diff --git a/Runtime/ModIO.Implementation/Classes/UserModCollectionData.cs b/Runtime/ModIO.Implementation/Classes/UserModCollectionData.cs index 5a556aa..512793d 100644 --- a/Runtime/ModIO.Implementation/Classes/UserModCollectionData.cs +++ b/Runtime/ModIO.Implementation/Classes/UserModCollectionData.cs @@ -8,6 +8,7 @@ internal class UserModCollectionData public long userId; public HashSet subscribedMods = new HashSet(); public HashSet disabledMods = new HashSet(); + public HashSet purchasedMods = new HashSet(); public List unsubscribeQueue = new List(); } } diff --git a/Runtime/ModIO.Implementation/Implementation.API/Classes/ResponseCache.cs b/Runtime/ModIO.Implementation/Implementation.API/Classes/ResponseCache.cs index 1bdbf43..3486feb 100644 --- a/Runtime/ModIO.Implementation/Implementation.API/Classes/ResponseCache.cs +++ b/Runtime/ModIO.Implementation/Implementation.API/Classes/ResponseCache.cs @@ -41,6 +41,8 @@ public static bool // milliseconds (60,000 being 60 seconds) const int modLifetimeInCache = 60000; + static double lastWalletUpdateTime = 0; + /// /// stores md5 hashes generated after retrieving Terms of Use from the RESTAPI /// @@ -67,7 +69,10 @@ public static bool static Dictionary commentObjectsCache = new Dictionary(); static Dictionary modsDependencies = new Dictionary(); static Dictionary currentUserRatings = new Dictionary(); + static Dictionary entitlementsCache = new Dictionary(); + static Dictionary modsMonetizationTeams = new Dictionary(); static bool currentRatingsCached = false; + static WalletObject walletObject; /// /// the terms of use, cached for the entire session. @@ -79,6 +84,9 @@ public static bool /// static TagCategory[] gameTags; + /// The token packs, cached for the entire session. + static TokenPack[] tokenPacks; + /// /// The authenticated user profile, cached for the entire session or until fetch updates. /// @@ -194,6 +202,7 @@ public static void AddModToCache(ModProfile mod) public static void AddUserToCache(UserProfile profile) { currentUser = profile; + lastWalletUpdateTime = DateTime.UtcNow.TimeOfDay.TotalMilliseconds; } public static void AddTagsToCache(TagCategory[] tags) @@ -201,6 +210,8 @@ public static void AddTagsToCache(TagCategory[] tags) gameTags = tags; } + public static void AddTokenPacksToCache(TokenPack[] tokenPacks) => ResponseCache.tokenPacks = tokenPacks; + /// /// This caches the terms of use for the entire session. We only cache the ToS for one /// platform at a time. It is cached as a KeyValuePair to ensure we dont return the @@ -222,6 +233,10 @@ public static void AddModDependenciesToCache(ModId modId, ModDependencies[] modD else modsDependencies.Add(modId, modDependencies); } + public static void AddModMonetizationTeamToCache(ModId modId, MonetizationTeamAccount[] modMonetizationTeamAccounts) + { + modsMonetizationTeams[modId] = modMonetizationTeamAccounts; + } public static void AddCurrentUserRating(long modId, Rating rating) { @@ -233,14 +248,23 @@ public static void AddCurrentUserRating(long modId, Rating rating) currentUserRatings.Add(modId, rating); } - public static void ReplaceCurrentUserRatings(Rating[] ratings) + private static void AddEntitlement(string transactionId, Entitlement entitlement) { - currentRatingsCached = true; - currentUserRatings.Clear(); - foreach(var rating in ratings) - { - AddCurrentUserRating(rating.modId, rating); - } + if(entitlementsCache.ContainsKey(transactionId)) + entitlementsCache[transactionId] = entitlement; + else + entitlementsCache.Add(transactionId, entitlement); + } + + public static void UpdateWallet(WalletObject wo) + { + walletObject = wo; + } + + public static void UpdateWallet(int balance) + { + if (walletObject != null) + walletObject.balance = balance; } #endregion // Adding entries to Cache @@ -358,6 +382,21 @@ public static bool GetTagsFromCache(out TagCategory[] tags) return false; } + public static bool GetTokenPacksFromCache(out TokenPack[] tokenPacks) + { + if (ResponseCache.tokenPacks != null) + { + if(logCacheMessages) + Logger.Log(LogLevel.Verbose, "[CACHE] retrieved token packs from cache"); + + tokenPacks = ResponseCache.tokenPacks; + return true; + } + + tokenPacks = null; + return false; + } + public static bool GetModCommentsFromCache(string url, out CommentPage commentObjs) { if(commentObjectsCache.ContainsKey(url)) @@ -470,9 +509,54 @@ public static bool GetCurrentUserRatingFromCache(ModId modId, out ModRating modR public static bool HaveRatingsBeenCachedThisSession() => currentRatingsCached; - #endregion // Getting entries from Cache + public static bool GetWalletFromCache(out Wallet wo) + { + if(walletObject != null && DateTime.UtcNow.TimeOfDay.TotalMilliseconds - lastWalletUpdateTime >= modLifetimeInCache) + { + wo = ResponseTranslator.ConvertWalletObjectToWallet(walletObject); + return true; + } + + wo = default; + return false; + } + public static bool GetModMonetizationTeamCache(ModId modId, out MonetizationTeamAccount[] teamAccounts) + { + if(modsMonetizationTeams.TryGetValue(modId, out teamAccounts)) + { + if(logCacheMessages) + { + Logger.Log(LogLevel.Verbose, "[CACHE] retrieved mod monetization team from cache"); + } + return true; + } + + return false; + } + +#endregion // Getting entries from Cache #region Clearing Cache entries + public static void ReplaceCurrentUserRatings(Rating[] ratings) + { + currentRatingsCached = true; + currentUserRatings.Clear(); + foreach(var rating in ratings) + { + AddCurrentUserRating(rating.modId, rating); + } + } + + public static void ReplaceEntitlements(Entitlement[] entitlements) + { + entitlementsCache.Clear(); + foreach(var e in entitlements) + { + AddEntitlement(e.transactionId, e); + } + } + + internal static void ClearModFromCache(ModId modId) => mods.Remove(modId); static async void ClearModFromCacheAfterDelay(ModId modId) { @@ -490,7 +574,6 @@ static async void ClearModFromCacheAfterDelay(ModId modId) } } - static async void ClearModsFromCacheAfterDelay(List modIds) { // Use this list to mark modIds that need to be cleared @@ -547,6 +630,11 @@ public static void ClearUserFromCache() currentUser = null; } + public static void ClearModMonetizationTeamFromCache(ModId modId) + { + modsMonetizationTeams.Remove(modId); + } + /// /// Clears the entire cache, used when performing a shutdown operation. /// @@ -559,8 +647,10 @@ public static void ClearCache() gameTags = null; commentObjectsCache.Clear(); modsDependencies?.Clear(); + modsMonetizationTeams.Clear(); currentUserRatings?.Clear(); currentRatingsCached = false; + walletObject = null; ClearUserFromCache(); } #endregion // Clearing Cache entries diff --git a/Runtime/ModIO.Implementation/Implementation.API/Classes/ResponseTranslator.cs b/Runtime/ModIO.Implementation/Implementation.API/Classes/ResponseTranslator.cs index 4b00532..2eb17c4 100644 --- a/Runtime/ModIO.Implementation/Implementation.API/Classes/ResponseTranslator.cs +++ b/Runtime/ModIO.Implementation/Implementation.API/Classes/ResponseTranslator.cs @@ -1,8 +1,9 @@ -using System; -using System.Collections.Generic; -using ModIO.Implementation.API; -using ModIO.Implementation.API.Requests; +using ModIO.Implementation.API; using ModIO.Implementation.API.Objects; +using ModIO.Implementation.API.Requests; +using System; +using System.Collections.Generic; +using System.Linq; namespace ModIO.Implementation { @@ -17,41 +18,45 @@ internal static class ResponseTranslator static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc); - public static TermsOfUse ConvertTermsObjectToTermsOfUse(TermsObject termsObject) - { - TermsOfUse terms = new TermsOfUse(); - - // Terms text - terms.termsOfUse = termsObject.plaintext; - - // Links - terms.links = new TermsOfUseLink[4]; - - terms.links[0] = new TermsOfUseLink(); - terms.links[0].name = termsObject.links.website.text; - terms.links[0].url = termsObject.links.website.url; - terms.links[0].required = termsObject.links.website.required; - - terms.links[1] = new TermsOfUseLink(); - terms.links[1].name = termsObject.links.terms.text; - terms.links[1].url = termsObject.links.terms.url; - terms.links[1].required = termsObject.links.terms.required; + public static TokenPack[] ConvertTokenPackObjectsToTokenPacks(IEnumerable tokenPackObjects) => tokenPackObjects.GroupBy(tokenPackObject => tokenPackObject.token_pack_id).Select(tokenPack => new TokenPack(tokenPack)).ToArray(); - terms.links[2] = new TermsOfUseLink(); - terms.links[2].name = termsObject.links.privacy.text; - terms.links[2].url = termsObject.links.privacy.url; - terms.links[2].required = termsObject.links.privacy.required; + public static Wallet ConvertWalletObjectToWallet(WalletObject walletObject) + { + if (walletObject == null) return default; - terms.links[3] = new TermsOfUseLink(); - terms.links[3].name = termsObject.links.manage.text; - terms.links[3].url = termsObject.links.manage.url; - terms.links[3].required = termsObject.links.manage.required; + return new Wallet + { + currency = walletObject.currency, + balance = walletObject.balance, + type = walletObject.type + }; + } - // File hash - TermsHash hash = new TermsHash(); - hash.md5hash = IOUtil.GenerateMD5(terms.termsOfUse); + public static TermsOfUse ConvertTermsObjectToTermsOfUse(TermsObject termsObject) + { + TermsOfUse terms = new TermsOfUse + { + termsOfUse = termsObject.plaintext, + agreeText = termsObject.buttons.agree.text, + disagreeText = termsObject.buttons.disagree.text, + links = GetLinks(termsObject.links.website, termsObject.links.terms, termsObject.links.privacy, termsObject.links.manage), + hash = new TermsHash + { + md5hash = IOUtil.GenerateMD5(termsObject.plaintext), + }, + }; return terms; + + TermsOfUseLink[] GetLinks(params TermsLinkObject[] links) + { + return links.Select(link => new TermsOfUseLink + { + name = link.text, + url = link.url, + required = link.required, + }).ToArray(); + } } public static TagCategory[] ConvertGameTagOptionsObjectToTagCategories( @@ -59,12 +64,12 @@ public static TagCategory[] ConvertGameTagOptionsObjectToTagCategories( { TagCategory[] categories = new TagCategory[gameTags.Length]; - for(int i = 0; i < categories.Length; i++) + for (int i = 0; i < categories.Length; i++) { categories[i] = new TagCategory(); categories[i].name = gameTags[i].name ?? ""; Tag[] tags = new Tag[gameTags[i].tags.Length]; - for(int ii = 0; ii < tags.Length; ii++) + for (int ii = 0; ii < tags.Length; ii++) { int total; gameTags[i].tag_count_map.TryGetValue(gameTags[i].tags[ii], out total); @@ -83,7 +88,7 @@ public static TagCategory[] ConvertGameTagOptionsObjectToTagCategories( public static ModPage ConvertResponseSchemaToModPage(API.Requests.GetMods.ResponseSchema schema, SearchFilter filter) { ModPage page = new ModPage(); - if(schema == null) + if (schema == null) { return page; } @@ -94,14 +99,14 @@ public static ModPage ConvertResponseSchemaToModPage(API.Requests.GetMods.Respon int offset = filter.pageSize * filter.pageIndex; // Only return the range of mods the user asked for (because we always take a minimum // of 100 mods per request, but they may have only asked for 10. We cache the other 90) - for(int i = 0; i < filter.pageSize && i < schema.data.Length; i++) + for (int i = 0; i < filter.pageSize && i < schema.data.Length; i++) { mods.Add(ConvertModObjectToModProfile(schema.data[i])); } ModProfile[] profiles = schema.data == null ? Array.Empty() - : ConvertModObjectsToModProfile(schema.data); + : ConvertModObjectsToModProfiles(schema.data); page.modProfiles = mods.ToArray(); @@ -118,7 +123,7 @@ public static ModPage ConvertResponseSchemaToModPage(API.Requests.GetMods.Respon public static ModPage ConvertResponseSchemaToModPage(PaginatedResponse schema, SearchFilter filter) { ModPage page = new ModPage(); - if(schema == null) + if (schema == null) { return page; } @@ -129,7 +134,7 @@ public static ModPage ConvertResponseSchemaToModPage(PaginatedResponse entitlements = new List(); + + foreach (var eo in entitlementObjects) + { + entitlements.Add(ConvertEntitlementObjectToEntitlement(eo)); + } + + return entitlements.ToArray(); + } + + public static CheckoutProcess ConvertCheckoutProcessObjectToCheckoutProcess(CheckoutProcessObject checkoutProcessObject) + { + return new CheckoutProcess() + { + transactionId = checkoutProcessObject.transaction_id, + grossAmount = checkoutProcessObject.gross_amount, + platformFee = checkoutProcessObject.platform_fee, + tax = checkoutProcessObject.tax, + purchaseDate = checkoutProcessObject.purchase_date, + netAmount = checkoutProcessObject.net_amount, + gatewayFee = checkoutProcessObject.gateway_fee, + transactionType = checkoutProcessObject.transaction_type, + meta = checkoutProcessObject.meta, + walletType = checkoutProcessObject.wallet_type, + balance = checkoutProcessObject.balance, + deficit = checkoutProcessObject.deficit, + paymentMethodId = checkoutProcessObject.payment_method_id, + modProfile = ConvertModObjectToModProfile(checkoutProcessObject.mod), + }; + } + + static Entitlement ConvertEntitlementObjectToEntitlement(EntitlementObject entitlementObject) + { + return new Entitlement() + { + transactionId = entitlementObject.transaction_id, + transactionState = entitlementObject.transaction_state, + entitlementConsumed = entitlementObject.entitlement_consumed, + skuId = entitlementObject.sku_id + }; + } + public static ModProfile ConvertModObjectToModProfile(ModObject modObject) { - if(modObject.id == 0) + if (modObject.id == 0) { // This is not a valid mod object Logger.Log(LogLevel.Error, "The method ConvertModObjectToModProfile(ModObject)" @@ -237,117 +287,133 @@ public static ModProfile ConvertModObjectToModProfile(ModObject modObject) return default; } - ModProfile profile = new ModProfile(); - - profile.id = new ModId(modObject.id); - profile.name = modObject.name ?? ""; - profile.summary = modObject.summary ?? ""; - profile.homePageUrl = modObject.homepage_url; - profile.profilePageUrl = modObject.profile_url; - profile.status = (ModStatus)modObject.status; - profile.visible = modObject.visible == 1; - profile.contentWarnings = (ContentWarnings)modObject.maturity_option; - profile.description = modObject.description_plaintext ?? ""; - profile.creator = ConvertUserObjectToUserProfile(modObject.submitted_by); - profile.metadata = modObject.metadata_blob; - profile.archiveFileSize = modObject.modfile.id == ModProfileNullId ? - ModProfileUnsetFilesize : modObject.modfile.filesize; - - // mod file details - profile.latestChangelog = modObject.modfile.changelog; - profile.latestVersion = modObject.modfile.version; - profile.latestDateFileAdded = GetUTCDateTime(modObject.modfile.date_added); - - // set time dates - profile.dateLive = GetUTCDateTime(modObject.date_live); - profile.dateAdded = GetUTCDateTime(modObject.date_added); - profile.dateUpdated = GetUTCDateTime(modObject.date_updated); - - // set tags - List tags = new List(); - if (modObject.tags != null) - { - foreach(ModTagObject tag in modObject.tags) - { - tags.Add(tag.name); - } - } - profile.tags = tags.ToArray(); + ModId modId = new ModId(modObject.id); - // set metadata kvps - if(modObject.metadata_kvp != null) + int galleryImagesCount = modObject.media.images?.Length ?? 0; + DownloadReference[] galleryImages_320x180 = new DownloadReference[galleryImagesCount]; + DownloadReference[] galleryImages_640x360 = new DownloadReference[galleryImagesCount]; + DownloadReference[] galleryImages_Original = new DownloadReference[galleryImagesCount]; + for (int i = 0; i < galleryImagesCount; i++) { - profile.metadataKeyValuePairs = new KeyValuePair[modObject.metadata_kvp.Length]; - for(int i = 0; i < modObject.metadata_kvp.Length; i++) - { - profile.metadataKeyValuePairs[i] = new KeyValuePair( - modObject.metadata_kvp[i].metakey, - modObject.metadata_kvp[i].metavalue); - } + galleryImages_320x180[i] = CreateDownloadReference( + modObject.media.images[i].filename, modObject.media.images[i].thumb_320x180, + modId); + galleryImages_640x360[i] = CreateDownloadReference( + modObject.media.images[i].filename, modObject.media.images[i].thumb_320x180.Replace("320x180", "640x360"), + modId); + galleryImages_Original[i] = + CreateDownloadReference(modObject.media.images[i].filename, + modObject.media.images[i].original, modId); } - // Create DownloadReferences - // Gallery - if(modObject.media.images != null) + KeyValuePair[] metaDataKvp = modObject.metadata_kvp == null + ? null + : modObject.metadata_kvp + .Where(x => x.metakey != null) + .Select(kvp => new KeyValuePair(kvp.metakey, kvp.metavalue)).ToArray(); + + ModProfile profile = new ModProfile( + modId, + tags: modObject.tags == null ? Array.Empty() : modObject.tags.Select(tag => tag.name).ToArray(), + status: (ModStatus)modObject.status, + visible: modObject.visible == 1, + name: modObject.name ?? "", + summary: modObject.summary ?? "", + description: modObject.description_plaintext ?? "", + homePageUrl: modObject.homepage_url, + profilePageUrl: modObject.profile_url, + maturityOptions: (MaturityOptions)modObject.maturity_option, + dateAdded: GetUTCDateTime(modObject.date_added), + dateUpdated: GetUTCDateTime(modObject.date_updated), + dateLive: GetUTCDateTime(modObject.date_live), + galleryImagesOriginal: galleryImages_Original, + galleryImages_320x180: galleryImages_320x180, + galleryImages_640x360: galleryImages_640x360, + logoImage_320x180: CreateDownloadReference(modObject.logo.filename, modObject.logo.thumb_320x180, modId), + logoImage_640x360: CreateDownloadReference(modObject.logo.filename, modObject.logo.thumb_640x360, modId), + logoImage_1280x720: CreateDownloadReference(modObject.logo.filename, modObject.logo.thumb_1280x720, modId), + logoImageOriginal: CreateDownloadReference(modObject.logo.filename, modObject.logo.original, modId), + creator: ConvertUserObjectToUserProfile(modObject.submitted_by), + creatorAvatar_50x50: CreateDownloadReference(modObject.submitted_by.avatar.filename, modObject.submitted_by.avatar.thumb_50x50, modId), + creatorAvatar_100x100: CreateDownloadReference(modObject.submitted_by.avatar.filename, modObject.submitted_by.avatar.thumb_100x100, modId), + creatorAvatarOriginal: CreateDownloadReference(modObject.submitted_by.avatar.filename, modObject.submitted_by.avatar.original, modId), + metadata: modObject.metadata_blob, + latestVersion: modObject.modfile.version, + latestChangelog: modObject.modfile.changelog, + latestDateFileAdded: GetUTCDateTime(modObject.modfile.date_added), + metadataKeyValuePairs: metaDataKvp, + stats: ConvertModStatsObjectToModStats(modObject.stats), + archiveFileSize: modObject.modfile.id == ModProfileNullId ? ModProfileUnsetFilesize : modObject.modfile.filesize, + platformStatus: modObject.platform_status, + platforms: ConvertModPlatformsObjectsToModPlatforms(modObject.platforms), + revenueType: modObject.revenue_type, + price: modObject.price, + tax: modObject.tax, + monetizationOption: (MonetizationOption)modObject.monetisation_options, + stock: modObject.stock, + gameId: modObject.game_id, + communityOptions: modObject.community_options, + nameId:modObject.name_id, + modfile: ConvertModfileObjectToModfile(modObject.modfile) + ); + + return profile; + } + + private static ModPlatform[] ConvertModPlatformsObjectsToModPlatforms(ModPlatformsObject[] modPlatformsObjects) + { + ModPlatform[] modPlatforms = new ModPlatform[modPlatformsObjects.Length]; + for (int i = 0; i < modPlatformsObjects.Length; i++) { - profile.galleryImages_320x180 = - new DownloadReference[modObject.media.images.Length]; - profile.galleryImages_640x360 = - new DownloadReference[modObject.media.images.Length]; - profile.galleryImages_Original = - new DownloadReference[modObject.media.images.Length]; - for(int i = 0; i < modObject.media.images.Length; i++) + modPlatforms[i] = new ModPlatform() { - profile.galleryImages_320x180[i] = CreateDownloadReference( - modObject.media.images[i].filename, modObject.media.images[i].thumb_320x180, - profile.id); - profile.galleryImages_640x360[i] = CreateDownloadReference( - modObject.media.images[i].filename, modObject.media.images[i].thumb_320x180.Replace("320x180", "640x360"), - profile.id); - profile.galleryImages_Original[i] = - CreateDownloadReference(modObject.media.images[i].filename, - modObject.media.images[i].original, profile.id); - } + platform = modPlatformsObjects[i].platform, + modfileLive = modPlatformsObjects[i].modfile_live + }; } + return modPlatforms; + } - // Logo - profile.logoImage_320x180 = CreateDownloadReference( - modObject.logo.filename, modObject.logo.thumb_320x180, profile.id); - profile.logoImage_640x360 = CreateDownloadReference( - modObject.logo.filename, modObject.logo.thumb_640x360, profile.id); - profile.logoImage_1280x720 = CreateDownloadReference( - modObject.logo.filename, modObject.logo.thumb_1280x720, profile.id); - profile.logoImage_Original = CreateDownloadReference( - modObject.logo.filename, modObject.logo.original, profile.id); - - // Avatar - profile.creatorAvatar_100x100 = - CreateDownloadReference(modObject.submitted_by.avatar.filename, - modObject.submitted_by.avatar.thumb_100x100, profile.id); - profile.creatorAvatar_50x50 = - CreateDownloadReference(modObject.submitted_by.avatar.filename, - modObject.submitted_by.avatar.thumb_50x50, profile.id); - profile.creatorAvatar_Original = - CreateDownloadReference(modObject.submitted_by.avatar.filename, - modObject.submitted_by.avatar.original, profile.id); - - // Mod Stats - profile.stats = new ModStats() { - modId = new ModId(modObject.stats.mod_id), - downloadsToday = modObject.stats.downloads_today, - downloadsTotal = modObject.stats.downloads_total, - ratingsTotal = modObject.stats.ratings_total, - ratingsNegative = modObject.stats.ratings_negative, - ratingsPositive = modObject.stats.ratings_positive, - ratingsDisplayText = modObject.stats.ratings_display_text, - ratingsPercentagePositive = modObject.stats.ratings_percentage_positive, - ratingsWeightedAggregate = modObject.stats.ratings_weighted_aggregate, - popularityRankPosition = modObject.stats.popularity_rank_position, - popularityRankTotalMods = modObject.stats.popularity_rank_total_mods, - subscriberTotal = modObject.stats.subscribers_total + private static Modfile ConvertModfileObjectToModfile(ModfileObject modfileObject) + { + return new Modfile() + { + id = modfileObject.id, + modId = modfileObject.mod_id, + dateAdded = modfileObject.date_added, + dateScanned = modfileObject.date_scanned, + virusStatus = modfileObject.virus_status, + virusPositive = modfileObject.virus_positive, + virustotalHash = modfileObject.virustotal_hash, + filesize = modfileObject.filesize, + filehashMd5 = modfileObject.filehash.md5, + filename = modfileObject.filename, + version = modfileObject.version, + changelog = modfileObject.changelog, + metadataBlob = modfileObject.metadata_blob, + downloadBinaryUrl = modfileObject.download.binary_url, + downloadDateExpires = modfileObject.download.date_expires, }; + } - return profile; + private static ModStats ConvertModStatsObjectToModStats(ModStatsObject modStatsObject) + { + return new ModStats() + { + modId = modStatsObject.mod_id, + popularityRankPosition = modStatsObject.popularity_rank_position, + popularityRankTotalMods = modStatsObject.popularity_rank_total_mods, + downloadsToday = modStatsObject.downloads_today, + downloadsTotal = modStatsObject.downloads_total, + subscriberTotal = modStatsObject.subscribers_total, + ratingsTotal = modStatsObject.ratings_total, + ratingsPositive = modStatsObject.ratings_positive, + ratingsNegative = modStatsObject.ratings_negative, + ratingsPercentagePositive = modStatsObject.ratings_percentage_positive, + ratingsWeightedAggregate = modStatsObject.ratings_weighted_aggregate, + ratingsDisplayText = modStatsObject.ratings_display_text, + dateExpires = modStatsObject.date_expires + }; } static DownloadReference CreateDownloadReference(string filename, string url, ModId modId) @@ -361,27 +427,54 @@ static DownloadReference CreateDownloadReference(string filename, string url, Mo public static UserProfile ConvertUserObjectToUserProfile(UserObject userObject) { - UserProfile user = new UserProfile(); - user.avatar_original = CreateDownloadReference(userObject.avatar.filename, - userObject.avatar.original, (ModId)0); - user.avatar_50x50 = CreateDownloadReference(userObject.avatar.filename, - userObject.avatar.thumb_50x50, (ModId)0); - user.avatar_100x100 = CreateDownloadReference( - userObject.avatar.filename, userObject.avatar.thumb_100x100, (ModId)0); - user.username = userObject.username; - user.userId = userObject.id; - user.portal_username = userObject.display_name_portal; - user.language = userObject.language; - user.timezone = userObject.timezone; + UserProfile user = new UserProfile + { + avatar_original = CreateDownloadReference(userObject.avatar.filename, + userObject.avatar.original, (ModId)0), + avatar_50x50 = CreateDownloadReference(userObject.avatar.filename, + userObject.avatar.thumb_50x50, (ModId)0), + avatar_100x100 = CreateDownloadReference( + userObject.avatar.filename, userObject.avatar.thumb_100x100, (ModId)0), + username = userObject.username, + userId = userObject.id, + portal_username = userObject.display_name_portal, + language = userObject.language, + timezone = userObject.timezone, + }; return user; } -#region Utility + public static MonetizationTeamAccount[] ConvertGameMonetizationTeamObjectsToGameMonetizationTeams(MonetizationTeamAccountsObject[] monetizationTeamAccountsObjects) + { + MonetizationTeamAccount[] entitlements = new MonetizationTeamAccount[monetizationTeamAccountsObjects.Length]; + + for (var i = 0; i < monetizationTeamAccountsObjects.Length; i++) + { + entitlements[i] = ConvertGameMonetizationTeamObjectToGameMonetizationTeam(monetizationTeamAccountsObjects[i]); + } + return entitlements; + } + + public static MonetizationTeamAccount ConvertGameMonetizationTeamObjectToGameMonetizationTeam(MonetizationTeamAccountsObject team) + { + return new MonetizationTeamAccount + { + Id = team.id, + NameId = team.name_id, + Username = team.username, + MonetizationStatus = team.monetization_status, + MonetizationOptions = team.monetization_options, + SplitPercentage = team.split, + }; + } + + #region Utility + public static DateTime GetUTCDateTime(long serverTimeStamp) { DateTime dateTime = UnixEpoch.AddSeconds(serverTimeStamp); return dateTime; } -#endregion // Utility + #endregion // Utility } } diff --git a/Runtime/ModIO.Implementation/Implementation.API/Classes/WebRequestConfig.cs b/Runtime/ModIO.Implementation/Implementation.API/Classes/WebRequestConfig.cs index b7f5438..1dc7f1d 100644 --- a/Runtime/ModIO.Implementation/Implementation.API/Classes/WebRequestConfig.cs +++ b/Runtime/ModIO.Implementation/Implementation.API/Classes/WebRequestConfig.cs @@ -1,8 +1,17 @@ using System.Collections.Generic; using System.IO; +using System.Threading.Tasks; namespace ModIO.Implementation.API { + internal class WebRequestConfig : WebRequestConfig + { + public async Task> RunViaWebRequestManager() + { + return await WebRequestManager.Request(this); + } + } + internal class WebRequestConfig { public string Url; @@ -23,10 +32,14 @@ internal class WebRequestConfig public List BinaryData = new List(); public Dictionary HeaderData = new Dictionary(); - public bool HasBinaryData => BinaryData.Count > 0; + public bool HasBinaryData => BinaryData.Count > 0 || RawBinaryData?.Length > 0; public bool HasStringData => StringKvpData.Count > 0; - public bool IsUpload => HasBinaryData; + public bool IsUpload => ForceIsUpload || HasBinaryData; + + public byte[] RawBinaryData { get; set; } + + public bool ForceIsUpload = false; public void AddField(string key, TInput data) { diff --git a/Runtime/ModIO.Implementation/Implementation.API/Classes/WebRequestManager.cs b/Runtime/ModIO.Implementation/Implementation.API/Classes/WebRequestManager.cs index d7bfcbb..7a79a74 100644 --- a/Runtime/ModIO.Implementation/Implementation.API/Classes/WebRequestManager.cs +++ b/Runtime/ModIO.Implementation/Implementation.API/Classes/WebRequestManager.cs @@ -12,7 +12,7 @@ namespace ModIO.Implementation.API /// static class WebRequestManager { - static Dictionary liveTasks = new Dictionary(); + static Queue> liveTasks = new Queue>(); static HashSet onGoingRequests = new HashSet(); internal static event Action ShutdownEvent = () => { }; @@ -23,7 +23,7 @@ public static async Task Shutdown() ShutdownEvent.Invoke(); await Task.WhenAll(onGoingRequests); - + ShutdownEvent = null; ShutdownEvent = () => { }; } @@ -44,32 +44,22 @@ static async void RemoveTaskFromListWhenComplete(Task task) onGoingRequests.Remove(task); } } - + public static async Task> Request(WebRequestConfig config, ProgressHandle progressHandle = null) { - Task> task = null; - - if(!PreexistingGetRequest(config, out task)) + if(!PreexistingGetRequest(config, out Task> task)) { task = NewRequest(config, progressHandle); onGoingRequests.Add(task); } - if (config.RequestMethodType != "GET") - { - liveTasks.Add(config.Url, task); - await task; - liveTasks.Remove(config.Url); - } - else - { - await task; - } + await task; + if(onGoingRequests.Contains(task)) { onGoingRequests.Remove(task); } - + return task.Result; } @@ -89,15 +79,20 @@ static Task> NewRequest(WebRequestConfig config, Pro static bool PreexistingGetRequest(WebRequestConfig config, out Task> task) { task = null; - if(config.RequestMethodType == "GET") + if(config.RequestMethodType != "GET") { return false; } - if(liveTasks.TryGetValue(config.Url, out var activeTask)) + + foreach(var t in liveTasks) { - task = (Task>)activeTask; - return true; + if(t.Item1 == config.Url) + { + task = (Task>)t.Item2; + return true; + } } + return false; } } diff --git a/Runtime/ModIO.Implementation/Implementation.API/Classes/WebRequestRunner.cs b/Runtime/ModIO.Implementation/Implementation.API/Classes/WebRequestRunner.cs index a903760..de5078f 100644 --- a/Runtime/ModIO.Implementation/Implementation.API/Classes/WebRequestRunner.cs +++ b/Runtime/ModIO.Implementation/Implementation.API/Classes/WebRequestRunner.cs @@ -13,6 +13,9 @@ namespace ModIO.Implementation.API { internal static class WebRequestRunner { + private static Queue> liveTasks = new Queue>(); + private static object queueLock = new object(); + private static bool isRunning = false; #region Main Request Handling public static RequestHandle Download(string url, Stream downloadTo, ProgressHandle progressHandle) @@ -111,7 +114,8 @@ public static RequestHandle> Upload(WebRequestConfig config, Pro return handle; } - public static async Task> Execute(WebRequestConfig config, RequestHandle> handle, ProgressHandle progressHandle) + public static async Task> Execute(WebRequestConfig config, + RequestHandle> handle, ProgressHandle progressHandle) { ResultAnd result = default; WebResponse response = null; @@ -135,14 +139,20 @@ public static async Task> Execute(WebRequestConfig c handle.cancel = request.Abort; } - request.LogRequestBeingSent(config); - - response = config.IsUpload - ? await request.GetUploadResponse(config, progressHandle) - : await request.GetResponseAsync(); + if(config.IsUpload) + { + response = await request.GetUploadResponse(config, progressHandle); + } + else + { + request.LogRequestBeingSent(config); + response = await request.GetResponseAsync(); + } } catch(Exception e) { + Logger.Log(LogLevel.Error, e.Message); + if(request != null) { // this event is added in BuildWebRequest(), we remove it here @@ -160,6 +170,7 @@ public static async Task> Execute(WebRequestConfig c } else { + Logger.Log(LogLevel.Error, e.Message); response = default; } } @@ -304,68 +315,134 @@ static async Task> ProcessResponse(WebRequest reques static async Task GetDownloadResponse(this WebRequest request, Stream downloadStream, ProgressHandle progressHandle) { - // Send request WebResponse response = await request.GetResponseAsync(); + long bytesTotal = response.ContentLength; - // Read response - using(Stream responseStream = response.GetResponseStream()) - { - // Get the total size of the file to download - long totalSize = response.ContentLength; + using Stream responseStream = response.GetResponseStream(); + if (responseStream == null) + return response; - // Create a buffer to read the response stream in chunks - byte[] buffer = new byte[4096]; + byte[] buffer = new byte[1024 * 1024]; // 1MB + int bytesRead; + long bytesDownloadedTotal = 0; + long bytesDownloadedSample = 0; - // Initialize progress tracking - long bytesDownloaded = 0; - long bytesDownloadedForThisSample = 0; - int bytesRead = 0; - Stopwatch progressMeasure = new Stopwatch(); - Stopwatch yieldMeasure = new Stopwatch(); - progressMeasure.Start(); - yieldMeasure.Start(); + Stopwatch stopwatchYield = Stopwatch.StartNew(); + Stopwatch stopwatchSample = Stopwatch.StartNew(); - // Read the response stream in chunks and write to file - while((bytesRead = responseStream.Read(buffer, 0, buffer.Length)) > 0) + while ((bytesRead = await responseStream.ReadAsync(buffer, 0, buffer.Length)) > 0) + { + if (stopwatchYield.ElapsedMilliseconds >= 15) { - downloadStream.Write(buffer, 0, bytesRead); - bytesDownloaded += bytesRead; + await Task.Yield(); + stopwatchYield.Restart(); + } - if(progressHandle != null) - { - bytesDownloadedForThisSample += bytesRead; - if(progressMeasure.ElapsedMilliseconds >= 1000) - { - progressHandle.Progress = (float)((decimal)bytesDownloaded / totalSize); - progressHandle.BytesPerSecond = (long)(bytesDownloadedForThisSample * (progressMeasure.ElapsedMilliseconds / 1000f)); + await downloadStream.WriteAsync(buffer, 0, bytesRead); - bytesDownloadedForThisSample = 0; - progressMeasure.Restart(); - } - if(yieldMeasure.ElapsedMilliseconds >= 16) - { - await Task.Yield(); - yieldMeasure.Restart(); - } - } + if (stopwatchYield.ElapsedMilliseconds >= 15) + { + await Task.Yield(); + stopwatchYield.Restart(); } - progressMeasure.Stop(); - yieldMeasure.Stop(); + bytesDownloadedTotal += bytesRead; + bytesDownloadedSample += bytesRead; + + if (progressHandle == null) + continue; + + progressHandle.Progress = (float)bytesDownloadedTotal / bytesTotal; + + if (stopwatchSample.ElapsedMilliseconds < 1000) + continue; + + progressHandle.BytesPerSecond = (long)(bytesDownloadedSample * (stopwatchSample.ElapsedMilliseconds / 1000f)); + bytesDownloadedSample = 0; + stopwatchSample.Restart(); } + + if (progressHandle is { BytesPerSecond: 0 }) + progressHandle.BytesPerSecond = bytesTotal; + + stopwatchYield.Stop(); + stopwatchSample.Stop(); + return response; } - static async Task GetUploadResponse(this WebRequest request, WebRequestConfig config, ProgressHandle progressHandle) + static async Task GetUploadResponse(this WebRequest request, WebRequestConfig config, + ProgressHandle progressHandle) { - // Send request - await request.SetupMultipartRequest(config, progressHandle); + if(config.RawBinaryData != null) + { + Task TaskFunc() + { + request.LogRequestBeingSent(config); + return request.SetupOctetRequest(config, progressHandle); + } + + await EnqueueTask(TaskFunc); + } + else + { + Task TaskFunc() + { + request.LogRequestBeingSent(config); + return request.SetupMultipartRequest(config, progressHandle); + } + + await EnqueueTask(TaskFunc); + } WebResponse response = await request.GetResponseAsync(); return response; } + static Task EnqueueTask(Func taskFunc) + { + TaskCompletionSource taskCompletionSource = new TaskCompletionSource(); + + lock (queueLock) + { + liveTasks.Enqueue(async () => + { + await taskFunc(); + taskCompletionSource.SetResult(true); + }); + + if (!isRunning) + { + isRunning = true; + RunTasks(); + } + } + + return taskCompletionSource.Task; + } + + static async void RunTasks() + { + while (true) + { + Func taskFunc; + + lock (queueLock) + { + if (liveTasks.Count == 0) + { + isRunning = false; + break; + } + + taskFunc = liveTasks.Dequeue(); + } + + await taskFunc(); + } + } + static async Task BuildWebRequest(WebRequestConfig config, ProgressHandle progressHandle) { // Add API key or Access token @@ -417,6 +494,16 @@ static WebRequest BuildWebRequestForUpload(WebRequestConfig config, ProgressHand // Add request to shutdown method WebRequestManager.ShutdownEvent += request.Abort; + if(config.RawBinaryData == null) + { + // Default form data content type + request.ContentType = "multipart/form-data"; + } + else + { + request.ContentType = "application/octet-stream"; + } + return request; } @@ -532,6 +619,45 @@ static async Task SetupMultipartRequest(this WebRequest request, WebRequestConfi } } } + + static async Task SetupOctetRequest(this WebRequest request, WebRequestConfig config, ProgressHandle progressHandle) + { + string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x"); + request.ContentType = "application/octet-stream; boundary=" + boundary; + request.ContentLength = config.RawBinaryData.Length; + using(Stream requestStream = request.GetRequestStream()) + { + int totalBytes = 0; + int chunkSize = 1048576; + long bytesUploadedForThisSample = 0; + Stopwatch stopwatch = new Stopwatch(); + stopwatch.Start(); + + while(totalBytes < config.RawBinaryData.Length) + { + if(totalBytes + chunkSize > config.RawBinaryData.Length) + chunkSize = config.RawBinaryData.Length - totalBytes; + + await requestStream.WriteAsync(config.RawBinaryData, totalBytes, chunkSize); + totalBytes += chunkSize; + //UnityEngine.Debug.LogWarning("PROGRESS = " + (float)(totalBytes / (config.RawBinaryData.Length * (decimal)1.01f))); + if(progressHandle != null) + { + // We make the length 1% longer so it doesnt get to 100% while we wait for the server response + progressHandle.Progress = (float)(totalBytes / (config.RawBinaryData.Length * (decimal)1.01f)); + + bytesUploadedForThisSample += totalBytes; + if(stopwatch.ElapsedMilliseconds >= 1000) + { + progressHandle.BytesPerSecond = bytesUploadedForThisSample; + bytesUploadedForThisSample = 0; + stopwatch.Restart(); + } + } + } + stopwatch.Stop(); + } + } #endregion #region Processing Response Body @@ -572,11 +698,13 @@ public async static Task> FormatResult(Stream response) static T Deserialize(Stream content) { - var serializer = new JsonSerializer(); - using (StreamReader sr = new StreamReader(content)) - using(var jsonTextReader = new JsonTextReader(sr)) + using(StreamReader sr = new StreamReader(content)) { - return serializer.Deserialize(jsonTextReader); + string json = sr.ReadToEnd(); +#if UNITY_EDITOR + Logger.Log(LogLevel.Verbose, $"Attempting to deserialize web response:\n\"{json}\""); +#endif + return JsonConvert.DeserializeObject(json); } } @@ -643,7 +771,17 @@ static string GenerateLogForWebRequestConfig(WebRequestConfig config) { log += "--No String Data\n"; } - if(config.BinaryData.Count > 0) + + if((config.BinaryData == null || config.BinaryData.Count > 0) && (config.RawBinaryData == null || config.RawBinaryData.Length > 0)) + { + log += "--No Binary Data\n"; + } + else + { + log += "Binary files\n"; + } + + if(config.BinaryData != null && config.BinaryData.Count > 0) { log += "Binary files\n"; foreach(var binData in config.BinaryData) @@ -651,10 +789,13 @@ static string GenerateLogForWebRequestConfig(WebRequestConfig config) log += $"{binData.key}: {binData.data.Length} bytes\n"; } } - else + + if(config.RawBinaryData != null && config.RawBinaryData.Length > 0) { - log += "--No Binary Data\n"; + log += $"Raw Binary data: {config.RawBinaryData.Length}\n"; } + + return log; } diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/AotTypeEnforcer.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/AotTypeEnforcer.cs index cb76618..174946a 100644 --- a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/AotTypeEnforcer.cs +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/AotTypeEnforcer.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using ModIO.Implementation.API.Objects; +using ModIO.Implementation.API.Requests; using ModIO.Implementation.Wss.Messages; using ModIO.Implementation.Wss.Messages.Objects; using Newtonsoft.Json.Utilities; @@ -49,11 +50,20 @@ public void Awake() AotHelper.EnsureList(); AotHelper.EnsureList(); AotHelper.EnsureList(); - + AotHelper.EnsureList(); + AotHelper.EnsureList(); + + // Marketplace and IAP + AotHelper.EnsureList(); + AotHelper.EnsureList(); + AotHelper.EnsureList(); + AotHelper.EnsureList(); + AotHelper.EnsureList(); + // Wss messages AotHelper.EnsureList(); AotHelper.EnsureList(); - + // Wss objects AotHelper.EnsureList(); AotHelper.EnsureList(); diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/AvatarObject.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/AvatarObject.cs index 5076d6e..9c1e675 100644 --- a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/AvatarObject.cs +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/AvatarObject.cs @@ -1,4 +1,4 @@ -namespace ModIO +namespace ModIO.Implementation.API.Objects { [System.Serializable] internal struct AvatarObject diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/CheckoutProcess.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/CheckoutProcess.cs new file mode 100644 index 0000000..9c7f1ed --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/CheckoutProcess.cs @@ -0,0 +1,20 @@ +namespace ModIO.Implementation.API.Objects +{ + public struct CheckoutProcess + { + public int transactionId; + public string grossAmount; + public string platformFee; + public string tax; + public long purchaseDate; + public int netAmount; + public int gatewayFee; + public string transactionType; + public object meta; + public string walletType; + public int balance; + public int deficit; + public string paymentMethodId; + public ModProfile modProfile; + } +} diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/CheckoutProcess.cs.meta b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/CheckoutProcess.cs.meta new file mode 100644 index 0000000..e3ab948 --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/CheckoutProcess.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 625f62107dca44888b2ee98a558a6434 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/CheckoutProcessObject.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/CheckoutProcessObject.cs new file mode 100644 index 0000000..d3e56d9 --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/CheckoutProcessObject.cs @@ -0,0 +1,21 @@ +namespace ModIO.Implementation.API.Objects +{ + [System.Serializable] + internal struct CheckoutProcessObject + { + public int transaction_id; + public string gross_amount; + public string platform_fee; + public string tax; + public long purchase_date; + public int net_amount; + public int gateway_fee; + public string transaction_type; + public object meta; + public string wallet_type; + public int balance; + public int deficit; + public string payment_method_id; + public ModObject mod; + } +} diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/CheckoutProcessObject.cs.meta b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/CheckoutProcessObject.cs.meta new file mode 100644 index 0000000..a838b6e --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/CheckoutProcessObject.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 71b4c7fb90cbf4e1b8daa387e9c9164d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/DownloadObject.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/DownloadObject.cs index 8c81b22..15edf3e 100644 --- a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/DownloadObject.cs +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/DownloadObject.cs @@ -1,5 +1,4 @@ - -namespace ModIO.Implementation.API.Objects +namespace ModIO.Implementation.API.Objects { [System.Serializable] internal struct DownloadObject diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/EntitlementDetailsObject.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/EntitlementDetailsObject.cs new file mode 100644 index 0000000..0fb854e --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/EntitlementDetailsObject.cs @@ -0,0 +1,8 @@ +namespace ModIO.Implementation.API.Objects +{ + [System.Serializable] + public struct EntitlementDetailsObject + { + public long tokens_allocated; + } +} diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/EntitlementDetailsObject.cs.meta b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/EntitlementDetailsObject.cs.meta new file mode 100644 index 0000000..0cd2792 --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/EntitlementDetailsObject.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 06cb20bece3da994f9e259b280683b38 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/EntitlementObject.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/EntitlementObject.cs new file mode 100644 index 0000000..ad18f9c --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/EntitlementObject.cs @@ -0,0 +1,13 @@ +namespace ModIO.Implementation.API.Objects +{ + [System.Serializable] + internal struct EntitlementObject + { + public string transaction_id; + public int transaction_state; + public string sku_id; + public bool entitlement_consumed; + public int entitlement_type; + public EntitlementDetailsObject details; + } +} diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/EntitlementObject.cs.meta b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/EntitlementObject.cs.meta new file mode 100644 index 0000000..7f31a18 --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/EntitlementObject.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 37708c34fcc07b841b6d0e99e465ce98 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/EntitlementWalletObject.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/EntitlementWalletObject.cs new file mode 100644 index 0000000..b10c916 --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/EntitlementWalletObject.cs @@ -0,0 +1,8 @@ +namespace ModIO.Implementation.API.Objects +{ + [System.Serializable] + public struct EntitlementWalletObject + { + public long balance; + } +} diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/EntitlementWalletObject.cs.meta b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/EntitlementWalletObject.cs.meta new file mode 100644 index 0000000..ead65a0 --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/EntitlementWalletObject.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dfa3405b1d6e79941a4a8b6e4c2c8832 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/FilehashObject.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/FilehashObject.cs index 3e7a055..699db64 100644 --- a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/FilehashObject.cs +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/FilehashObject.cs @@ -1,5 +1,4 @@ - -namespace ModIO.Implementation.API.Objects +namespace ModIO.Implementation.API.Objects { [System.Serializable] internal struct FilehashObject diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/GameMonetizationTeamObject.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/GameMonetizationTeamObject.cs new file mode 100644 index 0000000..0c3ce10 --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/GameMonetizationTeamObject.cs @@ -0,0 +1,8 @@ +namespace ModIO.Implementation.API.Objects +{ + [System.Serializable] + internal struct GameMonetizationTeamObject + { + public long team_id; + } +} diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/GameMonetizationTeamObject.cs.meta b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/GameMonetizationTeamObject.cs.meta new file mode 100644 index 0000000..27a9fb3 --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/GameMonetizationTeamObject.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f072315aa8954e8eaea4803d8d7ce209 +timeCreated: 1704949947 \ No newline at end of file diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/GameObject.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/GameObject.cs new file mode 100644 index 0000000..cb196f8 --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/GameObject.cs @@ -0,0 +1,13 @@ +namespace ModIO.Implementation.API.Objects +{ + [System.Serializable] + internal struct GameObject + { + // NOTE STEVE: There are many more fields that can be serialized but for now I'm just adding the somewhat relevant ones + public string name; + public string ugc_name; + public GameStatsObject stats; + public string token_name; + public GameMonetizationOptions monetization_options; + } +} diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/GameObject.cs.meta b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/GameObject.cs.meta new file mode 100644 index 0000000..85f1c69 --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/GameObject.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 02d9a0a7e9343ec44978091ee3232b4f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/GameStatsObject.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/GameStatsObject.cs new file mode 100644 index 0000000..ecef255 --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/GameStatsObject.cs @@ -0,0 +1,12 @@ +namespace ModIO.Implementation.API.Objects +{ + [System.Serializable] + internal struct GameStatsObject + { + public int mods_count_total; + public int mods_downloads_today; + public int mods_downloads_total; + public int mods_downloads_daily_average; + public int mods_subscribers_total; + } +} diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/GameStatsObject.cs.meta b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/GameStatsObject.cs.meta new file mode 100644 index 0000000..82f8af4 --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/GameStatsObject.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ba5712f1bd1e4b67a8037fdd4f1a17cb +timeCreated: 1710999708 \ No newline at end of file diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/ImageObject.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/ImageObject.cs index 2341b30..4eaeea7 100644 --- a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/ImageObject.cs +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/ImageObject.cs @@ -1,4 +1,4 @@ -namespace ModIO +namespace ModIO.Implementation.API.Objects { [System.Serializable] internal struct ImageObject diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/MessageObject.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/MessageObject.cs index b43de0e..3527716 100644 --- a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/MessageObject.cs +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/MessageObject.cs @@ -1,5 +1,4 @@ - -namespace ModIO.Implementation.API.Objects +namespace ModIO.Implementation.API.Objects { internal struct MessageObject { diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/ModCommentObject.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/ModCommentObject.cs index 8cebd7c..814739a 100644 --- a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/ModCommentObject.cs +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/ModCommentObject.cs @@ -15,4 +15,19 @@ internal struct ModCommentObject public long karma; public string content; } + + internal struct ModComment + { + public long id; + public long gameId; + public UserObject user; + public long modId; + public long resourceId; + public long submittedBy; + public long dateAdded; + public long replyId; + public string threadPosition; + public long karma; + public string content; + } } diff --git a/Runtime/Structs/ModDependenciesObject.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/ModDependenciesObject.cs similarity index 100% rename from Runtime/Structs/ModDependenciesObject.cs rename to Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/ModDependenciesObject.cs diff --git a/Runtime/Structs/ModDependenciesObject.cs.meta b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/ModDependenciesObject.cs.meta similarity index 100% rename from Runtime/Structs/ModDependenciesObject.cs.meta rename to Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/ModDependenciesObject.cs.meta diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/ModObject.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/ModObject.cs index 1285a09..993b722 100644 --- a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/ModObject.cs +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/ModObject.cs @@ -1,5 +1,4 @@ - -namespace ModIO.Implementation.API.Objects +namespace ModIO.Implementation.API.Objects { [System.Serializable] internal struct ModObject @@ -13,19 +12,27 @@ internal struct ModObject public long date_updated; public long date_live; public int maturity_option; + public int stock; + public int community_options; + public int monetisation_options; + public int price; + public int tax; public LogoObject logo; public string homepage_url; public string name; public string name_id; + public ModfileObject modfile; + public string metadata_blob; + public MetadataKVPObject[] metadata_kvp; + public ModTagObject[] tags; + public string platform_status; + public RevenueType revenue_type; public string summary; public string description; public string description_plaintext; - public string metadata_blob; + public ModStatsObject stats; public string profile_url; public ModMediaObject media; - public ModfileObject modfile; - public ModStatsObject stats; - public MetadataKVPObject[] metadata_kvp; - public ModTagObject[] tags; + public ModPlatformsObject[] platforms; } } diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/ModPlatformsObject.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/ModPlatformsObject.cs new file mode 100644 index 0000000..5624374 --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/ModPlatformsObject.cs @@ -0,0 +1,9 @@ +namespace ModIO.Implementation.API.Objects +{ + [System.Serializable] + internal class ModPlatformsObject + { + public string platform; + public int modfile_live; + } +} diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/ModPlatformsObject.cs.meta b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/ModPlatformsObject.cs.meta new file mode 100644 index 0000000..92acf11 --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/ModPlatformsObject.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 36a02cb32d08bc043b4beb1e71e67018 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/ModfileObject.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/ModfileObject.cs index e44bb94..b872614 100644 --- a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/ModfileObject.cs +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/ModfileObject.cs @@ -1,7 +1,7 @@ namespace ModIO.Implementation.API.Objects { [System.Serializable] - internal struct ModfileObject + internal struct ModfileObject { public long id; public long mod_id; diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/MonetizationTeamAccountsObject.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/MonetizationTeamAccountsObject.cs new file mode 100644 index 0000000..adf9913 --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/MonetizationTeamAccountsObject.cs @@ -0,0 +1,13 @@ +namespace ModIO.Implementation.API.Objects +{ + [System.Serializable] + internal struct MonetizationTeamAccountsObject + { + public long id; //user ID + public string name_id; + public string username; + public int monetization_status; + public int monetization_options; + public int split; + } +} diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/MonetizationTeamAccountsObject.cs.meta b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/MonetizationTeamAccountsObject.cs.meta new file mode 100644 index 0000000..0e3b3a4 --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/MonetizationTeamAccountsObject.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 506cc5c1c3a6470bb9df16f118399f43 +timeCreated: 1704950457 \ No newline at end of file diff --git a/Runtime/Structs/RatingObject.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/RatingObject.cs similarity index 100% rename from Runtime/Structs/RatingObject.cs rename to Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/RatingObject.cs diff --git a/Runtime/Structs/RatingObject.cs.meta b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/RatingObject.cs.meta similarity index 100% rename from Runtime/Structs/RatingObject.cs.meta rename to Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/RatingObject.cs.meta diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/TermsButtonOptionObject.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/TermsButtonOptionObject.cs index 71cb69c..93346ad 100644 --- a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/TermsButtonOptionObject.cs +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/TermsButtonOptionObject.cs @@ -1,5 +1,4 @@ - -namespace ModIO.Implementation.API.Objects +namespace ModIO.Implementation.API.Objects { [System.Serializable] internal struct TermsButtonOptionObject diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/TokenPackObject.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/TokenPackObject.cs new file mode 100644 index 0000000..86f95c7 --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/TokenPackObject.cs @@ -0,0 +1,17 @@ +namespace ModIO.Implementation.API.Objects +{ + [System.Serializable] + internal struct TokenPackObject + { + public long id; + public long token_pack_id; + public long price; + public long amount; + public string portal; + public string sku; + public string name; + public string description; + public long date_added; + public long date_updated; + } +} diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/TokenPackObject.cs.meta b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/TokenPackObject.cs.meta new file mode 100644 index 0000000..53680bb --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/TokenPackObject.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: aef7736637a442b6a1411176f59ebd50 +timeCreated: 1707776905 \ No newline at end of file diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/WalletObject.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/WalletObject.cs new file mode 100644 index 0000000..2454dfd --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/WalletObject.cs @@ -0,0 +1,11 @@ +namespace ModIO.Implementation.API.Objects +{ + [System.Serializable] + public class WalletObject + { + public string type; + public string payment_method_id; + public string currency; + public int balance; + } +} diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/WalletObject.cs.meta b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/WalletObject.cs.meta new file mode 100644 index 0000000..fa00811 --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Objects/WalletObject.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 911e080d067693644ab3762a67760a6e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/AddMod.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/AddMod.cs index 88a4702..f00fa74 100644 --- a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/AddMod.cs +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/AddMod.cs @@ -1,4 +1,7 @@  +using System; +using System.Diagnostics; + namespace ModIO.Implementation.API.Requests { static class AddMod @@ -12,33 +15,34 @@ public static WebRequestConfig Request(ModProfileDetails details) ShouldRequestTimeout = false, }; - - request.AddField("visible", details.visible == false ? "0" : "1"); request.AddField("name", details.name); request.AddField("summary", details.summary); request.AddField("description", details.description); request.AddField("name_id", details.name_id); request.AddField("homepage_url", details.homepage_url); - request.AddField("stock", details.maxSubscribers.ToString()); + request.AddField("stock", details.stock.ToString()); request.AddField("metadata_blob", details.metadata); - if(details.contentWarning != null) - request.AddField("maturity_option", ((int)details.contentWarning).ToString()); + if (details.maturityOptions != null) + request.AddField("maturity_option", ((int)details.maturityOptions).ToString()); - if(details.communityOptions != null) + if (details.communityOptions != null) request.AddField("community_options", ((int)details.communityOptions).ToString()); - if(details.tags != null) + if (details.price != null) + request.AddField("price", ((int)details.price).ToString()); + + if (details.tags != null) { - for(int i = 0; i < details.tags.Length; i++) + for (int i = 0; i < details.tags.Length; i++) { request.AddField($"tags[{i}]", details.tags[i]); } } - if(details.logo != null) - request.AddField("logo","logo.png", details.GetLogo()); + if (details.logo != null) + request.AddField("logo", "logo.png", details.GetLogo()); return request; } diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/AddModMedia.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/AddModMedia.cs index 1cdec78..05b238b 100644 --- a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/AddModMedia.cs +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/AddModMedia.cs @@ -1,4 +1,5 @@ -using System.IO; +using System; +using System.IO; using System.Threading.Tasks; using UnityEngine; @@ -23,18 +24,27 @@ public static async Task> Request(ModProfileDetails var imageBytes = details.GetGalleryImages(); CompressOperationMultiple zipOperation = new CompressOperationMultiple(imageBytes, null); - ResultAnd resultAnd = await zipOperation.Compress(); + Result result; - if(resultAnd.result.Succeeded()) + var modId = details.modId.Value.id; + using(ModIOFileStream fs = DataStorage.temp.OpenWriteStream(DataStorage.GetUploadFilePath(modId), out result)) { - request.AddField("images", "images.zip", resultAnd.value.ToArray()); - } - else - { - return ResultAnd.Create(resultAnd.result, null); + result = await zipOperation.Compress(fs); + fs.Position = 0; + + if(result.Succeeded()) + { + var fileContent = new byte[fs.Length]; + var pos = await fs.ReadAsync(fileContent, 0, (int)fs.Length); + request.AddField("images", "images.zip", fileContent); + } + else + { + return ResultAnd.Create(result, null); + } } } - + return ResultAnd.Create(ResultBuilder.Success, request); } } diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/AddModMonetizationTeam.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/AddModMonetizationTeam.cs new file mode 100644 index 0000000..8ce22bc --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/AddModMonetizationTeam.cs @@ -0,0 +1,26 @@ +using System.Collections.Generic; + +namespace ModIO.Implementation.API.Requests +{ + internal static class AddModMonetizationTeam + { + public static WebRequestConfig Request(long modId, ICollection team) + { + var request = new WebRequestConfig() + { + Url = $"{Settings.server.serverURL}{@"/games/"}{Settings.server.gameId}{@"/mods/"}{modId}{@"/monetization/team"}?", + RequestMethodType = "POST" + }; + + int count = 0; + foreach(var teamMember in team) + { + request.AddField($"users[{count}][id]", teamMember.userId); + request.AddField($"users[{count}][split]", teamMember.split); + count++; + } + + return request; + } + } +} diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/AddModMonetizationTeam.cs.meta b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/AddModMonetizationTeam.cs.meta new file mode 100644 index 0000000..1936066 --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/AddModMonetizationTeam.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 5945b4a5d6054b3da2ceeac3cb9c6f16 +timeCreated: 1705020641 \ No newline at end of file diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/AddModfile.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/AddModfile.cs index 230a461..f376cbe 100644 --- a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/AddModfile.cs +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/AddModfile.cs @@ -6,7 +6,7 @@ namespace ModIO.Implementation.API.Requests { static class AddModFile { - public static async Task Request(ModfileDetails details, MemoryStream stream) + public static async Task Request(ModfileDetails details, Stream stream) { var id = details?.modId?.id ?? new ModId(0); @@ -15,18 +15,39 @@ public static async Task Request(ModfileDetails details, Memor Url = Url(id), RequestMethodType = "POST", ShouldRequestTimeout = false, + ForceIsUpload = true }; - stream.Position = 0; - var result = new byte[stream.Length]; - var pos = await stream.ReadAsync(result, 0, (int)stream.Length, new CancellationToken()); + if(stream != null && stream.Length > 0) + { + if (stream.CanSeek) + stream.Position = 0; + var result = new byte[stream.Length]; + var pos = await stream.ReadAsync(result, 0, (int)stream.Length, new CancellationToken()); + request.AddField("filehash", IOUtil.GenerateMD5(result)); + request.AddField("filedata", $"{id}_modfile.zip", result); + } + + if(!string.IsNullOrEmpty(details.version)) + request.AddField("version", details.version); + + if(!string.IsNullOrEmpty(details.changelog)) + request.AddField("changelog", details.changelog); - request.AddField("version", details.version); - request.AddField("changelog", details.changelog); - request.AddField("filehash", IOUtil.GenerateMD5(result)); - request.AddField("metadata_blob", details.metadata); + if(!string.IsNullOrEmpty(details.metadata)) + request.AddField("metadata_blob", details.metadata); - request.AddField("filedata", $"{id}_modfile.zip", result); + if(!string.IsNullOrEmpty(details.uploadId)) + request.AddField("upload_id", details.uploadId); + + request.AddField("active", details.active); + + if (details.platforms != null) + { + foreach (string p in details.platforms) + if (!string.IsNullOrWhiteSpace(p)) + request.AddField("platforms[]", p); + } return request; } diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/AddMultipartUploadParts.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/AddMultipartUploadParts.cs new file mode 100644 index 0000000..635e54f --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/AddMultipartUploadParts.cs @@ -0,0 +1,34 @@ + +using UnityEngine; + +namespace ModIO.Implementation.API.Requests +{ + static class AddMultipartUploadParts + { + private const int MEBIBYTE_50 = 52428800; + public static WebRequestConfig Request(ModId modId, string uploadId, string contentRange, string digest, byte[] rawBytes) + { + var request = new WebRequestConfig() + { + Url = $"{Settings.server.serverURL}{@"/games/"}{Settings.server.gameId}{@"/mods/"}{modId.id}{@"/files/multipart?upload_id="}{uploadId}", + RequestMethodType = "PUT", + }; + + request.AddHeader("Content-Range", contentRange); + + if(!string.IsNullOrEmpty(digest)) + request.AddHeader("Digest", digest); + + if(rawBytes.Length <= MEBIBYTE_50) + { + request.RawBinaryData = rawBytes; + } + else + { + Debug.Log("Multi-upload part must be less than or equal to 50 MiBs."); + } + + return request; + } + } +} diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/AddMultipartUploadParts.cs.meta b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/AddMultipartUploadParts.cs.meta new file mode 100644 index 0000000..5d59ed3 --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/AddMultipartUploadParts.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4f5464cdf67f2554883c0896ad98fae2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/CompleteMultipartUploadSession.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/CompleteMultipartUploadSession.cs new file mode 100644 index 0000000..e1f6708 --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/CompleteMultipartUploadSession.cs @@ -0,0 +1,17 @@ + +namespace ModIO.Implementation.API.Requests +{ + static class CompleteMultipartUploadSession + { + public static WebRequestConfig Request(ModId modId, string uploadId) + { + var request = new WebRequestConfig() + { + Url = $"{Settings.server.serverURL}{@"/games/"}{Settings.server.gameId}{@"/mods/"}{modId.id}{@"/files/multipart/complete?upload_id="}{uploadId}", + RequestMethodType = "POST", + }; + + return request; + } + } +} diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/CompleteMultipartUploadSession.cs.meta b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/CompleteMultipartUploadSession.cs.meta new file mode 100644 index 0000000..6e52582 --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/CompleteMultipartUploadSession.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bcff7ca7cae4cf24cbcc07e1251760f5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/CreateMultipartUploadSession.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/CreateMultipartUploadSession.cs new file mode 100644 index 0000000..825737d --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/CreateMultipartUploadSession.cs @@ -0,0 +1,20 @@ +namespace ModIO.Implementation.API.Requests +{ + static class CreateMultipartUploadSession + { + public static WebRequestConfig Request(long modId, string filename, string nonce) + { + var request = new WebRequestConfig() + { + Url = $"{Settings.server.serverURL}{@"/games/"}{Settings.server.gameId}{@"/mods/"}{modId}{@"/files/multipart?"}", + RequestMethodType = "POST", + }; + request.AddField("filename", filename); + + if(nonce != null) + request.AddField("nonce", nonce); + + return request; + } + } +} diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/CreateMultipartUploadSession.cs.meta b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/CreateMultipartUploadSession.cs.meta new file mode 100644 index 0000000..3242ac2 --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/CreateMultipartUploadSession.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 549d19e3020a9e8499cdad552a11c72d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/DeleteMod.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/DeleteMod.cs index 78d08b0..0458cdb 100644 --- a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/DeleteMod.cs +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/DeleteMod.cs @@ -11,9 +11,7 @@ public static WebRequestConfig Request(ModId modId) RequestMethodType = "DELETE", }; - - - return request; + return request; } } } diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/DeleteModMedia.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/DeleteModMedia.cs new file mode 100644 index 0000000..751f6df --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/DeleteModMedia.cs @@ -0,0 +1,26 @@ +namespace ModIO.Implementation.API.Requests +{ + static class DeleteModMedia + { + public static WebRequestConfig Request(ModId modId, string[] filenames) + { + WebRequestConfig request = new WebRequestConfig + { + Url = $"{Settings.server.serverURL}/games/{Settings.server.gameId}/mods/{modId.id}/media?", + RequestMethodType = "DELETE", + ShouldRequestTimeout = false, + }; + + if (filenames == null) + return request; + + foreach (string filename in filenames) + { + if(!string.IsNullOrWhiteSpace(filename)) + request.AddField("images[]", filename); + } + + return request; + } + } +} diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/DeleteModMedia.cs.meta b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/DeleteModMedia.cs.meta new file mode 100644 index 0000000..4bacdd7 --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/DeleteModMedia.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 5fc1fb21b3514ababd1872cfd701c3c9 +timeCreated: 1702861137 \ No newline at end of file diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/DeleteMultipartUploadSession.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/DeleteMultipartUploadSession.cs new file mode 100644 index 0000000..0e93233 --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/DeleteMultipartUploadSession.cs @@ -0,0 +1,17 @@ + +namespace ModIO.Implementation.API.Requests +{ + static class DeleteMultipartUploadSession + { + public static WebRequestConfig Request(ModId modId, string uploadId) + { + var request = new WebRequestConfig() + { + Url = $"{Settings.server.serverURL}{@"/games/"}{Settings.server.gameId}{@"/mods/"}{modId.id}{@"/files/multipart?upload_id="}{uploadId}", + RequestMethodType = "DELETE", + }; + + return request; + } + } +} diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/DeleteMultipartUploadSession.cs.meta b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/DeleteMultipartUploadSession.cs.meta new file mode 100644 index 0000000..5a67165 --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/DeleteMultipartUploadSession.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c2209e1fe3a804247be953d2eb59a00e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/EditMod.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/EditMod.cs index abf65ab..4cbec04 100644 --- a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/EditMod.cs +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/EditMod.cs @@ -8,43 +8,49 @@ public static WebRequestConfig RequestPOST(ModProfileDetails details) public static WebRequestConfig RequestPUT(ModProfileDetails details) => InternalRequest(details, "PUT"); - + public static WebRequestConfig InternalRequest(ModProfileDetails details, string requestType) { long modId = details.modId != null ? details.modId.Value.id : 0; - + var request = new WebRequestConfig() { Url = $"{Settings.server.serverURL}{@"/games/"}{Settings.server.gameId}{@"/mods/"}{modId}?", RequestMethodType = requestType }; - + request.AddField("visible", details.visible == false ? "0" : "1"); request.AddField("name", details.name); request.AddField("summary", details.summary); request.AddField("description", details.description); request.AddField("name_id", details.name_id); request.AddField("homepage_url", details.homepage_url); - request.AddField("stock", details.maxSubscribers.ToString()); + request.AddField("stock", details.stock); - if(details.contentWarning != null) - request.AddField("maturity_option", ((int)details.contentWarning).ToString()); + if (details.maturityOptions != null) + request.AddField("maturity_option", ((int)details.maturityOptions).ToString()); - if(details.communityOptions != null) + if (details.communityOptions != null) request.AddField("community_options", ((int)details.communityOptions).ToString()); - // TODO Currently the EditMod endpoint doesnt allow changing/adding tags - // if(details.tags != null) - // { - // for(int i = 0; i < details.tags.Count(); i++) - // { - // request.AddField($"tags[{i}]", details.tags[i]); - // } - // } + if (details.price != null) + request.AddField("price", ((int)details.price).ToString()); + if (details.monetizationOptions != null) + request.AddField("monetization_options", ((int)details.monetizationOptions).ToString()); + + if (details.tags != null) + { + if (details.tags.Length == 0) + request.AddField("tags[]", ""); + else + foreach (string tag in details.tags) + if (!string.IsNullOrWhiteSpace(tag)) + request.AddField("tags[]", tag); + } request.AddField("metadata_blob", details.metadata); - if(details.logo != null) + if (details.logo != null) request.AddField("logo", "logo.png", details.GetLogo()); return request; diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/EntitlementPaginatedResponse.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/EntitlementPaginatedResponse.cs new file mode 100644 index 0000000..1c97d0d --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/EntitlementPaginatedResponse.cs @@ -0,0 +1,10 @@ +using ModIO.Implementation.API.Objects; + +namespace ModIO.Implementation.API.Requests +{ + [System.Serializable] + public class EntitlementPaginatedResponse : PaginatedResponse + { + public EntitlementWalletObject wallet; + } +} diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/EntitlementPaginatedResponse.cs.meta b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/EntitlementPaginatedResponse.cs.meta new file mode 100644 index 0000000..902c95c --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/EntitlementPaginatedResponse.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: caa1b466c30858f429d75d0c4141ab71 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/Filtering.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/Filtering.cs index 096cf69..73acdea 100644 --- a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/Filtering.cs +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/Filtering.cs @@ -1,5 +1,4 @@ - -namespace ModIO.Implementation.API.Requests +namespace ModIO.Implementation.API.Requests { internal static class Filtering { diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetCurrentUserRatings.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetCurrentUserRatings.cs index e0c5c95..0937871 100644 --- a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetCurrentUserRatings.cs +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetCurrentUserRatings.cs @@ -5,7 +5,7 @@ namespace ModIO.Implementation.API.Requests internal static class GetCurrentUserRatings { [System.Serializable] - + internal class ResponseSchema : PaginatedResponse { } public static WebRequestConfig Request() @@ -16,8 +16,6 @@ public static WebRequestConfig Request() RequestMethodType = "GET" }; - - return request; } } diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetGame.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetGame.cs new file mode 100644 index 0000000..c8472a8 --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetGame.cs @@ -0,0 +1,17 @@ +using ModIO.Implementation.API.Objects; + +namespace ModIO.Implementation.API.Requests +{ + + internal static class GetGame + { + public static WebRequestConfig Request() + { + return new WebRequestConfig() + { + Url = $"{Settings.server.serverURL}{@"/games/"}{Settings.server.gameId}?", + RequestMethodType = "GET" + }; + } + } +} diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetGame.cs.meta b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetGame.cs.meta new file mode 100644 index 0000000..550ebfe --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetGame.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 747befe312d56b4469d3bdc8a5957300 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetMod.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetMod.cs index 2b20f6b..f20d688 100644 --- a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetMod.cs +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetMod.cs @@ -1,17 +1,17 @@ -namespace ModIO.Implementation.API.Requests +using ModIO.Implementation.API.Objects; + +namespace ModIO.Implementation.API.Requests { internal static class GetMod { - public static WebRequestConfig Request(long modId) + public static WebRequestConfig Request(long modId) { - var request = new WebRequestConfig() + return new WebRequestConfig() { Url = $"{Settings.server.serverURL}{@"/games/"}{Settings.server.gameId}{@"/mods/"}{modId}?", RequestMethodType = "GET" }; - - return request; } } } diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetModMonetizationTeam.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetModMonetizationTeam.cs new file mode 100644 index 0000000..af67895 --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetModMonetizationTeam.cs @@ -0,0 +1,19 @@ +using ModIO.Implementation.API.Objects; + +namespace ModIO.Implementation.API.Requests +{ + internal static class GetModMonetizationTeam + { + [System.Serializable] + internal class ResponseSchema : PaginatedResponse { } + + public static WebRequestConfig Request(long modId) + { + return new WebRequestConfig() + { + Url = $"{Settings.server.serverURL}{@"/games/"}{Settings.server.gameId}{@"/mods/"}{modId}{@"/monetization/team"}?", + RequestMethodType = "GET" + }; + } + } +} diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetModMonetizationTeam.cs.meta b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetModMonetizationTeam.cs.meta new file mode 100644 index 0000000..ceb900d --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetModMonetizationTeam.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 093d3d58c2dc4d5ab768d1bb8b090ab2 +timeCreated: 1705015214 \ No newline at end of file diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetMultipartUploadParts.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetMultipartUploadParts.cs new file mode 100644 index 0000000..652c796 --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetMultipartUploadParts.cs @@ -0,0 +1,19 @@ +using ModIO.Implementation.API.Objects; + +namespace ModIO.Implementation.API.Requests +{ + static class GetMultipartUploadParts + { + [System.Serializable] + public class ResponseSchema : PaginatedResponse { } + + public static WebRequestConfig Request(long modId, string uploadId, SearchFilter filter) + { + return new WebRequestConfig() + { + Url = FilterUtil.AddPagination(filter, $"{Settings.server.serverURL}{@"/games/"}{Settings.server.gameId}{@"/mods/"}{modId}{$@"/files/multipart?upload_id={uploadId}"}{FilterUtil.ConvertToURL(filter)}"), + RequestMethodType = "GET", + }; + } + } +} diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetMultipartUploadParts.cs.meta b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetMultipartUploadParts.cs.meta new file mode 100644 index 0000000..5de6f77 --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetMultipartUploadParts.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b542b6e5ff966fb42bdb18e07dc9b59f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetMultipartUploadSession.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetMultipartUploadSession.cs new file mode 100644 index 0000000..d120bdd --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetMultipartUploadSession.cs @@ -0,0 +1,14 @@ +namespace ModIO.Implementation.API.Requests +{ + static class GetMultipartUploadSession + { + public static WebRequestConfig Request(long modId, SearchFilter filter) + { + return new WebRequestConfig() + { + Url = FilterUtil.AddPagination(filter, $"{Settings.server.serverURL}{@"/games/"}{Settings.server.gameId}{@"/mods/"}{modId}{@"/files/multipart/sessions?"}{FilterUtil.ConvertToURL(filter)}"), + RequestMethodType = "GET", + }; + } + } +} diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetMultipartUploadSession.cs.meta b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetMultipartUploadSession.cs.meta new file mode 100644 index 0000000..98a5c1b --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetMultipartUploadSession.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1140383e31cfe414380301efebb4318a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetMutedUsers.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetMutedUsers.cs new file mode 100644 index 0000000..3d04a9f --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetMutedUsers.cs @@ -0,0 +1,23 @@ +using ModIO.Implementation.API.Objects; + +namespace ModIO.Implementation.API.Requests +{ + internal static class GetMutedUsers + { + [System.Serializable] + public class ResponseSchema : PaginatedResponse { } + + public static WebRequestConfig Request() + { + var request = new WebRequestConfig + { + Url = Url, + RequestMethodType = "GET" + }; + + return request; + } + + public static string Url => $"{Settings.server.serverURL}{@"/me/users/muted"}?"; + } +} diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetMutedUsers.cs.meta b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetMutedUsers.cs.meta new file mode 100644 index 0000000..0039f01 --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetMutedUsers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a0aea3f542f55b74f993be803f8c7bb3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetTerms.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetTerms.cs index 118e17e..b6886e0 100644 --- a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetTerms.cs +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetTerms.cs @@ -1,6 +1,5 @@ namespace ModIO.Implementation.API.Requests { - internal static class GetTerms { public static WebRequestConfig Request() @@ -8,11 +7,10 @@ public static WebRequestConfig Request() var request = new WebRequestConfig() { Url = $"{Settings.server.serverURL}{@"/authenticate/terms"}?", - RequestMethodType = "GET" + RequestMethodType = "GET", + DontUseAuthToken = true }; - // - return request; } } diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetTokenPacks.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetTokenPacks.cs new file mode 100644 index 0000000..0e22427 --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetTokenPacks.cs @@ -0,0 +1,16 @@ +using ModIO.Implementation.API.Objects; + +namespace ModIO.Implementation.API.Requests +{ + internal static class GetTokenPacks + { + [System.Serializable] + public class ResponseSchema : PaginatedResponse { } + + public static WebRequestConfig Request() => new WebRequestConfig + { + Url = $"{Settings.server.serverURL}/games/{Settings.server.gameId}/monetization/token-packs", + RequestMethodType = "GET", + }; + } +} diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetTokenPacks.cs.meta b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetTokenPacks.cs.meta new file mode 100644 index 0000000..3edf60e --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetTokenPacks.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 2ec9f27be3294868b7876a4cc4165e63 +timeCreated: 1707776529 \ No newline at end of file diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetUserEvents.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetUserEvents.cs deleted file mode 100644 index 07f8ab0..0000000 --- a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetUserEvents.cs +++ /dev/null @@ -1,29 +0,0 @@ -using ModIO.Implementation.API.Objects; - -namespace ModIO.Implementation.API.Requests -{ - - internal static class GetUserEvents - { - [System.Serializable] - internal class ResponseSchema : PaginatedResponse { } - - public static WebRequestConfig Request(string filterUrl = null) - { - var request = new WebRequestConfig() - { - Url = $"{Settings.server.serverURL}{@"/me/events"}?game_id={Settings.server.gameId}", - RequestMethodType = "GET" - }; - - if(filterUrl != null) - { - request.Url += filterUrl; - } - - - - return request; - } - } -} diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetUserPurchases.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetUserPurchases.cs new file mode 100644 index 0000000..9b460be --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetUserPurchases.cs @@ -0,0 +1,27 @@ +using ModIO.Implementation.API.Objects; + +namespace ModIO.Implementation.API.Requests +{ + internal static class GetUserPurchases + { + [System.Serializable] + public class ResponseSchema : PaginatedResponse { } + + public static WebRequestConfig Request(SearchFilter searchFilter = null) + { + string urlWithFilter = searchFilter == null ? Url: PaginatedURL(searchFilter); + var request = new WebRequestConfig + { + //https://api.mod.io/v1/me/purchased? + Url = urlWithFilter, + RequestMethodType = "GET" + }; + + return request; + } + + static string Url => $"{Settings.server.serverURL}{@"/me/purchased?&game_id="}{Settings.server.gameId}"; + public static string UnpaginatedURL(SearchFilter filter) => $"{Url}{FilterUtil.ConvertToURL(filter)}"; + public static string PaginatedURL(SearchFilter filter) => FilterUtil.AddPagination(filter, UnpaginatedURL(filter)); + } +} diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetUserPurchases.cs.meta b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetUserPurchases.cs.meta new file mode 100644 index 0000000..ea007b3 --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetUserPurchases.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 78c735cdd6ab74f4088edb1a3db2d483 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetUserSubscriptions.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetUserSubscriptions.cs index 98f208b..33135ed 100644 --- a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetUserSubscriptions.cs +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetUserSubscriptions.cs @@ -2,12 +2,11 @@ namespace ModIO.Implementation.API.Requests { - internal static class GetUserSubscriptions { [System.Serializable] internal class ResponseSchema : PaginatedResponse { } - + public static WebRequestConfig Request(SearchFilter searchFilter = null) { string filter = searchFilter == null ? "" : FilterUtil.ConvertToURL(searchFilter); @@ -17,8 +16,8 @@ public static WebRequestConfig Request(SearchFilter searchFilter = null) RequestMethodType = "GET" }; - - + + return request; } } diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetUserWalletBalance.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetUserWalletBalance.cs new file mode 100644 index 0000000..ed54ee5 --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetUserWalletBalance.cs @@ -0,0 +1,18 @@ +namespace ModIO.Implementation.API.Requests +{ + internal static class GetUserWalletBalance + { + public static WebRequestConfig Request() + { + var request = new WebRequestConfig() + { + //https://api.mod.io/v1/me/wallets + Url = $"{Settings.server.serverURL}{@"/me/wallets?&game_id="}{Settings.server.gameId}", + RequestMethodType = "GET", + ShouldRequestTimeout = false, + }; + + return request; + } + } +} diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetUserWalletBalance.cs.meta b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetUserWalletBalance.cs.meta new file mode 100644 index 0000000..d82215a --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/GetUserWalletBalance.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5d0cf725a6fe3ce439e99b54a2ac0549 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/ModPlatforms.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/ModPlatforms.cs new file mode 100644 index 0000000..476a6af --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/ModPlatforms.cs @@ -0,0 +1,11 @@ +using System; + +namespace ModIO.Implementation.API.Objects +{ + [Serializable] + public struct ModPlatform + { + public string platform; + public int modfileLive; + } +} diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/ModPlatforms.cs.meta b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/ModPlatforms.cs.meta new file mode 100644 index 0000000..b724949 --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/ModPlatforms.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b947d0c8356bccd4aa4caa6393bfe7cb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/Modfile.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/Modfile.cs new file mode 100644 index 0000000..585b887 --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/Modfile.cs @@ -0,0 +1,25 @@ +using System; + +namespace ModIO.Implementation.API.Objects +{ + [Serializable] + public struct Modfile + { + public long id; + public long modId; + public long dateAdded; + public long dateScanned; + public int virusStatus; + public int virusPositive; + public string virustotalHash; + public long filesize; + public string filehashMd5; + public string filename; + public string version; + public string changelog; + public string metadataBlob; + public string downloadBinaryUrl; + public long downloadDateExpires; + } + +} diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/Modfile.cs.meta b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/Modfile.cs.meta new file mode 100644 index 0000000..5f9422e --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/Modfile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6c263b22e5a8d4942b527814bc869351 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/PaginatedResponse.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/PaginatedResponse.cs index bb9fce9..b948297 100644 --- a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/PaginatedResponse.cs +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/PaginatedResponse.cs @@ -6,7 +6,7 @@ /// etc) /// [System.Serializable] - internal class PaginatedResponse + public class PaginatedResponse { public T[] data; diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/PurchaseMod.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/PurchaseMod.cs new file mode 100644 index 0000000..a613d40 --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/PurchaseMod.cs @@ -0,0 +1,22 @@ +namespace ModIO.Implementation.API.Requests +{ + internal static class PurchaseMod + { + // Idempotent must be alphanumeric and cannot contain unique characters except for -. + public static WebRequestConfig Request(ModId modId, int displayAmount, string idempotent) + { + var request = new WebRequestConfig() + { + //https://api.mod.io/v1/games/{Settings.server.gameId}/mods/{modId.id}/checkout + Url = $"{Settings.server.serverURL}{@"/games/"}{Settings.server.gameId}{@"/mods/"}{modId.id}{@"/checkout?"}", + RequestMethodType = "POST", + ShouldRequestTimeout = false + }; + + request.AddField("display_amount", displayAmount); + request.AddField("idempotent_key", idempotent); + + return request; + } + } +} diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/PurchaseMod.cs.meta b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/PurchaseMod.cs.meta new file mode 100644 index 0000000..7eee656 --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/PurchaseMod.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 40076167751dc48aebaae527a7221a17 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/ReorderModMedia.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/ReorderModMedia.cs new file mode 100644 index 0000000..cda7214 --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/ReorderModMedia.cs @@ -0,0 +1,26 @@ +namespace ModIO.Implementation.API.Requests +{ + static class ReorderModMedia + { + public static WebRequestConfig Request(ModId modId, string[] orderedFilenames) + { + WebRequestConfig request = new WebRequestConfig + { + Url = $"{Settings.server.serverURL}/games/{Settings.server.gameId}/mods/{modId.id}/media/reorder?", + RequestMethodType = "PUT", + ShouldRequestTimeout = false, + }; + + if (orderedFilenames == null) + return request; + + foreach (string filename in orderedFilenames) + { + if(!string.IsNullOrWhiteSpace(filename)) + request.AddField("images[]", filename); + } + + return request; + } + } +} diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/ReorderModMedia.cs.meta b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/ReorderModMedia.cs.meta new file mode 100644 index 0000000..baca377 --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/ReorderModMedia.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 58b0d36a9c7d4061994fb83b08ad14e0 +timeCreated: 1703036853 \ No newline at end of file diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/Report.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/Report.cs index 621d5e0..8035a9f 100644 --- a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/Report.cs +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/Report.cs @@ -1,6 +1,5 @@ namespace ModIO.Implementation.API.Requests { - internal static class Report { public static WebRequestConfig Request(ModIO.Report report) @@ -19,6 +18,6 @@ public static WebRequestConfig Request(ModIO.Report report) request.AddField("summary", report.summary); return request; - } + } } } diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/ResetPayments.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/ResetPayments.cs new file mode 100644 index 0000000..8bdf59d --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/ResetPayments.cs @@ -0,0 +1,29 @@ +namespace ModIO.Implementation.API.Requests +{ + internal static class ResetPayments + { + public static WebRequestConfig Request(ModId? modId, UserProfile? buyer) + => InternalRequest(modId, buyer, "POST"); + + public static WebRequestConfig InternalRequest(ModId? modId, UserProfile? buyer, string requestType) + { + var request = new WebRequestConfig() + { + Url = $"https://api-staging.moddemo.io/gordonfreeman/monetization/reset-purchases/?", + RequestMethodType = requestType + }; + + if (modId != null) + { + request.AddField("mod_id", modId.Value.id.ToString()); + } + + if (buyer != null) + { + request.AddField("buyer_id", buyer.Value.userId.ToString()); + } + + return request; + } + } +} diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/ResetPayments.cs.meta b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/ResetPayments.cs.meta new file mode 100644 index 0000000..86eb0af --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/ResetPayments.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4c3b36184014c7c479975a6fb3144763 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/ResetWallet.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/ResetWallet.cs new file mode 100644 index 0000000..fafc9a4 --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/ResetWallet.cs @@ -0,0 +1,31 @@ + + +using UnityEngine; + +namespace ModIO.Implementation.API.Requests +{ + + internal static class ResetWallet + { + public static WebRequestConfig Request(int amount, string paymentMethod) + => InternalRequest(amount, paymentMethod, "POST"); + + public static WebRequestConfig InternalRequest(int amount, string paymentMethodId, string requestType) + { + var request = new WebRequestConfig() + { + Url = $"https://monetisation-api-staging.moddemo.io/test/wallet/{paymentMethodId}/reset?", + + RequestMethodType = requestType + }; + + Debug.Log("Sending to " + request.Url); + + request.AddField("amount", amount.ToString()); + + + return request; + } + + } +} diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/ResetWallet.cs.meta b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/ResetWallet.cs.meta new file mode 100644 index 0000000..d5bfe30 --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/ResetWallet.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fc2cef161dd69b74d845a1de641ed690 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/SubscribeToMod.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/SubscribeToMod.cs index 523e76c..6377b35 100644 --- a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/SubscribeToMod.cs +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/SubscribeToMod.cs @@ -1,6 +1,5 @@ namespace ModIO.Implementation.API.Requests { - internal static class SubscribeToMod { public static WebRequestConfig Request(long modId) @@ -11,7 +10,7 @@ public static WebRequestConfig Request(long modId) RequestMethodType = "POST" }; - + return request; } diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/SyncEntitlements.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/SyncEntitlements.cs new file mode 100644 index 0000000..e3bc956 --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/SyncEntitlements.cs @@ -0,0 +1,71 @@ +using System.Net; +using System.Threading.Tasks; +using ModIO.Implementation.API.Objects; +using ModIO.Util; + +#if UNITY_GAMECORE +using Unity.GameCore; +#endif + +namespace ModIO.Implementation.API.Requests +{ + static class SyncEntitlements + { + [System.Serializable] + internal class ResponseSchema : EntitlementPaginatedResponse { } + + public static WebRequestConfig SteamRequest() + { + var request = new WebRequestConfig() + { + Url = $"{Settings.server.serverURL}{@"/me/iap/steam/sync"}?", + RequestMethodType = "POST", + ShouldRequestTimeout = false, + }; + + return request; + } +#if UNITY_GAMECORE + /// The Xbox Live token returned from calling + /// GetTokenAndSignatureAsync("POST", "https://*.modapi.io") + /// NOTE: Due to the encrypted app ticket containing special + /// characters, you must URL encode the string before sending + /// the request to ensure it is successfully sent to our + /// servers otherwise you may encounter an 422 Unprocessable + /// Entity response. For Example, cURL will do this for you by + /// using the --data-urlencode option + public static WebRequestConfig XboxRequest(string token) + { + var request = new WebRequestConfig { + RequestMethodType = "POST", + ShouldRequestTimeout = false, + Url = $"{Settings.server.serverURL}{@"/me/iap/xboxlive/sync"}?" + }; + + request.AddField("xbox_token", token); + return request; + } +#endif +#if UNITY_PS4 || UNITY_PS5 + /// The auth code returned form the PSN Api + /// The PSN environment you are targeting. If + /// omitted, the request will default to targeting the production environment. + /// The service label where the entitlement for mod.io reside. + /// If omitted the default value will be 0. + public static WebRequestConfig PsnRequest(string authCode, PlayStationEnvironment environment, int serviceLabel) + { + var request = new WebRequestConfig() + { + Url = $"{Settings.server.serverURL}{@"/me/iap/psn/sync"}?", + RequestMethodType = "POST", + ShouldRequestTimeout = false, + }; + request.AddField("auth_code", authCode); + request.AddField("env", (int)environment); + request.AddField("service_label", serviceLabel); + + return request; + } +#endif + } +} diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/SyncEntitlements.cs.meta b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/SyncEntitlements.cs.meta new file mode 100644 index 0000000..132d183 --- /dev/null +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/SyncEntitlements.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ca236d8ce9031ed49a30c167bb36ca33 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/UnsubscribeFromMod.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/UnsubscribeFromMod.cs index 0339436..008923c 100644 --- a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/UnsubscribeFromMod.cs +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/UnsubscribeFromMod.cs @@ -1,6 +1,5 @@ namespace ModIO.Implementation.API.Requests { - internal static class UnsubscribeFromMod { public static WebRequestConfig Request(long modId) @@ -11,7 +10,7 @@ public static WebRequestConfig Request(long modId) RequestMethodType = "DELETE" }; - + return request; } } diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/UpdateModComment.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/UpdateModComment.cs index e8ee7f1..64d8b2d 100644 --- a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/UpdateModComment.cs +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/UpdateModComment.cs @@ -1,6 +1,5 @@ namespace ModIO.Implementation.API.Requests { - internal static class UpdateModComment { public static WebRequestConfig Request(ModId modId, string content, long commentId) diff --git a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/UserMute.cs b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/UserMute.cs index b7ceea7..11c4877 100644 --- a/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/UserMute.cs +++ b/Runtime/ModIO.Implementation/Implementation.API/Implementation.API.Requests/UserMute.cs @@ -1,6 +1,5 @@ namespace ModIO.Implementation.API.Requests { - internal static class UserMute { public static WebRequestConfig Request(long userId) @@ -11,7 +10,7 @@ public static WebRequestConfig Request(long userId) RequestMethodType = "POST" }; - + return request; } } diff --git a/Runtime/ModIO.Implementation/Implementation.Platform/Classes/SystemIOWrapper.cs b/Runtime/ModIO.Implementation/Implementation.Platform/Classes/SystemIOWrapper.cs index 71bea3e..9582ec8 100644 --- a/Runtime/ModIO.Implementation/Implementation.Platform/Classes/SystemIOWrapper.cs +++ b/Runtime/ModIO.Implementation/Implementation.Platform/Classes/SystemIOWrapper.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Concurrent; using System.Collections.Generic; using System.IO; using System.Security; @@ -10,10 +11,9 @@ namespace ModIO.Implementation.Platform /// Wrapper for System.IO that handles exceptions and matches our interface. internal static class SystemIOWrapper { -#region Operations - //There is no native method for checking if a file is open or in use, so we need to keep - // track of the files we are opening and using manually. For now this is the simplest solve. - static HashSet currentlyOpenFiles = new HashSet(); + #region Operations + + static ConcurrentDictionary openFiles = new ConcurrentDictionary(); /// Creates a FileStream for the purposes of reading. public static ModIOFileStream OpenReadStream(string filePath, out Result result) @@ -21,7 +21,7 @@ public static ModIOFileStream OpenReadStream(string filePath, out Result result) ModIOFileStream fileStream = null; result = ResultBuilder.Unknown; - if(IsPathValid(filePath, out result) + if (IsPathValid(filePath, out result) && FileExists(filePath, out result)) { FileStream internalStream = null; @@ -31,7 +31,7 @@ public static ModIOFileStream OpenReadStream(string filePath, out Result result) internalStream = File.Open(filePath, FileMode.Open); result = ResultBuilder.Success; } - catch(Exception e) + catch (Exception e) { Logger.Log(LogLevel.Warning, "Unhandled error when attempting to create read FileStream." @@ -56,7 +56,7 @@ public static ModIOFileStream OpenWriteStream(string filePath, out Result result ModIOFileStream fileStream = null; result = ResultBuilder.Unknown; - if(IsPathValid(filePath, out result) + if (IsPathValid(filePath, out result) && TryCreateParentDirectory(filePath, out result)) { FileStream internalStream = null; @@ -66,7 +66,7 @@ public static ModIOFileStream OpenWriteStream(string filePath, out Result result internalStream = File.Open(filePath, FileMode.Create); result = ResultBuilder.Success; } - catch(Exception e) + catch (Exception e) { Logger.Log(LogLevel.Warning, "Unhandled error when attempting to create write FileStream." @@ -92,20 +92,21 @@ public static async Task> ReadFileAsync(string filePath) Result result; // If the file we wish to open is already open we return - if(currentlyOpenFiles.Contains(filePath)) + if (openFiles.ContainsKey(filePath)) { return ResultAnd.Create(ResultBuilder.Create(ResultCode.IO_AccessDenied), data); } // add this filepath to a table of all currently open files - currentlyOpenFiles.Add(filePath); + if (!openFiles.TryAdd(filePath, filePath)) + return ResultAnd.Create(ResultBuilder.Create(ResultCode.IO_AccessDenied), data); - if(IsPathValid(filePath, out result) + if (IsPathValid(filePath, out result) && DoesFileExist(filePath, out result)) { try { - using(var sourceStream = File.Open(filePath, FileMode.Open)) + using (var sourceStream = File.Open(filePath, FileMode.Open)) { data = new byte[sourceStream.Length]; var pos = await sourceStream.ReadAsync(data, 0, (int)sourceStream.Length); @@ -113,7 +114,7 @@ public static async Task> ReadFileAsync(string filePath) result = ResultBuilder.Success; } - catch(Exception e) // TODO(@jackson): Handle UnauthorizedAccessException + catch (Exception e) // TODO(@jackson): Handle UnauthorizedAccessException { Logger.Log(LogLevel.Warning, "Unhandled error when attempting to read the file." + $"\n.path={filePath}" @@ -125,10 +126,11 @@ public static async Task> ReadFileAsync(string filePath) Logger.Log( LogLevel.Verbose, - $"Read file: {filePath} - Result: [{result.code}] - Data: {(data == null ? "NULL" : data.Length+"B")}"); + $"Read file: {filePath} - Result: [{result.code}] - Data: {(data == null ? "NULL" : data.Length + "B")}"); // now that we are done with this file, remove it from the table of open files - currentlyOpenFiles.Remove(filePath); + if (!openFiles.TryRemove(filePath, out _)) + Logger.Log(LogLevel.Error, string.Format("currentlyOpenFiles.TryRemove() failed for file: [{0}]", filePath)); return ResultAnd.Create(result, data); } @@ -139,20 +141,21 @@ public static ResultAnd ReadFile(string filePath) byte[] data = null; // If the file we wish to open is already open we return - if(currentlyOpenFiles.Contains(filePath)) + if (openFiles.ContainsKey(filePath)) { return ResultAnd.Create(ResultBuilder.Create(ResultCode.IO_AccessDenied), data); } // add this filepath to a table of all currently open files - currentlyOpenFiles.Add(filePath); + if (!openFiles.TryAdd(filePath, filePath)) + return ResultAnd.Create(ResultBuilder.Create(ResultCode.IO_AccessDenied), data); - if(IsPathValid(filePath, out Result result) + if (IsPathValid(filePath, out Result result) && DoesFileExist(filePath, out result)) { try { - using(var sourceStream = File.Open(filePath, FileMode.Open)) + using (var sourceStream = File.Open(filePath, FileMode.Open)) { data = new byte[sourceStream.Length]; var pos = sourceStream.Read(data, 0, (int)sourceStream.Length); @@ -160,7 +163,7 @@ public static ResultAnd ReadFile(string filePath) result = ResultBuilder.Success; } - catch(Exception e) // TODO(@jackson): Handle UnauthorizedAccessException + catch (Exception e) // TODO(@jackson): Handle UnauthorizedAccessException { Logger.Log(LogLevel.Warning, "Unhandled error when attempting to read the file." + $"\n.path={filePath}" @@ -172,10 +175,11 @@ public static ResultAnd ReadFile(string filePath) Logger.Log( LogLevel.Verbose, - $"Read file: {filePath} - Result: [{result.code}] - Data: {(data == null ? "NULL" : data.Length+"B")}"); + $"Read file: {filePath} - Result: [{result.code}] - Data: {(data == null ? "NULL" : data.Length + "B")}"); // now that we are done with this file, remove it from the table of open files - currentlyOpenFiles.Remove(filePath); + if (!openFiles.TryRemove(filePath, out _)) + Logger.Log(LogLevel.Error, string.Format("currentlyOpenFiles.TryRemove() failed for file: [{0}]", filePath)); return ResultAnd.Create(result, data); } @@ -185,7 +189,7 @@ public static async Task WriteFileAsync(string filePath, byte[] data) { Result result = ResultBuilder.Success; - if(data == null) + if (data == null) { Logger.Log(LogLevel.Verbose, "Was not given any data to write. Cancelling write operation." @@ -195,20 +199,21 @@ public static async Task WriteFileAsync(string filePath, byte[] data) // NOTE @Jackson I'm not a huge fan of this but would like to hear ideas for a better solution // If the file we wish to open is already open we return - if(currentlyOpenFiles.Contains(filePath)) + if (openFiles.ContainsKey(filePath)) { return ResultBuilder.Create(ResultCode.IO_AccessDenied); } // add this filepath to a table of all currently open files - currentlyOpenFiles.Add(filePath); + if (!openFiles.TryAdd(filePath, filePath)) + return ResultBuilder.Create(ResultCode.IO_AccessDenied); - if(IsPathValid(filePath, out result) + if (IsPathValid(filePath, out result) && TryCreateParentDirectory(filePath, out result)) { try { - using(var fileStream = File.Open(filePath, FileMode.Create)) + using (var fileStream = File.Open(filePath, FileMode.Create)) { fileStream.Position = 0; await fileStream.WriteAsync(data, 0, data.Length); @@ -216,7 +221,7 @@ public static async Task WriteFileAsync(string filePath, byte[] data) result = ResultBuilder.Success; } - catch(Exception e) + catch (Exception e) { Logger.Log(LogLevel.Error, "Unhandled error when attempting to write the file." @@ -229,17 +234,18 @@ public static async Task WriteFileAsync(string filePath, byte[] data) Logger.Log(LogLevel.Verbose, $"Write file: {filePath} - Result: [{result.code}]"); // now that we are done with this file, remove it from the table of open files - currentlyOpenFiles.Remove(filePath); + if (!openFiles.TryRemove(filePath, out _)) + Logger.Log(LogLevel.Error, string.Format("currentlyOpenFiles.TryRemove() failed for file: [{0}]", filePath)); return result; } - /// Writes a file. + /// Writes a file. public static Result WriteFile(string filePath, byte[] data) { Result result = ResultBuilder.Success; - if(data == null) + if (data == null) { Logger.Log(LogLevel.Verbose, "Was not given any data to write. Cancelling write operation." @@ -249,20 +255,21 @@ public static Result WriteFile(string filePath, byte[] data) // NOTE @Jackson I'm not a huge fan of this but would like to hear ideas for a better solution // If the file we wish to open is already open we return - if(currentlyOpenFiles.Contains(filePath)) + if (openFiles.ContainsKey(filePath)) { return ResultBuilder.Create(ResultCode.IO_AccessDenied); } // add this filepath to a table of all currently open files - currentlyOpenFiles.Add(filePath); + if (!openFiles.TryAdd(filePath, filePath)) + return ResultBuilder.Create(ResultCode.IO_AccessDenied); - if(IsPathValid(filePath, out result) + if (IsPathValid(filePath, out result) && TryCreateParentDirectory(filePath, out result)) { try { - using(var fileStream = File.Open(filePath, FileMode.Create)) + using (var fileStream = File.Open(filePath, FileMode.Create)) { fileStream.Position = 0; fileStream.Write(data, 0, data.Length); @@ -270,7 +277,7 @@ public static Result WriteFile(string filePath, byte[] data) result = ResultBuilder.Success; } - catch(Exception e) + catch (Exception e) { Logger.Log(LogLevel.Error, "Unhandled error when attempting to write the file." @@ -283,7 +290,8 @@ public static Result WriteFile(string filePath, byte[] data) Logger.Log(LogLevel.Verbose, $"Write file: {filePath} - Result: [{result.code}]"); // now that we are done with this file, remove it from the table of open files - currentlyOpenFiles.Remove(filePath); + if (!openFiles.TryRemove(filePath, out _)) + Logger.Log(LogLevel.Error, string.Format("currentlyOpenFiles.TryRemove() failed for file: [{0}]", filePath)); return result; } @@ -293,7 +301,7 @@ public static Result CreateDirectory(string directoryPath) { Result result; - if(IsPathValid(directoryPath, out result) + if (IsPathValid(directoryPath, out result) && !DirectoryExists(directoryPath)) { try @@ -301,7 +309,7 @@ public static Result CreateDirectory(string directoryPath) Directory.CreateDirectory(directoryPath); result = ResultBuilder.Success; } - catch(UnauthorizedAccessException e) + catch (UnauthorizedAccessException e) { // UnauthorizedAccessException // The caller does not have the required permission. @@ -312,7 +320,7 @@ public static Result CreateDirectory(string directoryPath) result = ResultBuilder.Create(ResultCode.IO_AccessDenied); } - catch(Exception e) + catch (Exception e) { Logger.Log(LogLevel.Warning, "Unhandled error when attempting to create the directory." @@ -330,18 +338,18 @@ public static Result DeleteDirectory(string path) { Result result; - if(IsPathValid(path, out result)) + if (IsPathValid(path, out result)) { try { - if(Directory.Exists(path)) + if (Directory.Exists(path)) { Directory.Delete(path, true); } result = ResultBuilder.Success; } - catch(IOException e) + catch (IOException e) { // IOException // A file with the same name and location specified by path exists. @@ -361,7 +369,7 @@ public static Result DeleteDirectory(string path) result = ResultBuilder.Create(ResultCode.IO_AccessDenied); } - catch(UnauthorizedAccessException e) + catch (UnauthorizedAccessException e) { // UnauthorizedAccessException // The caller does not have the required permission. @@ -372,7 +380,7 @@ public static Result DeleteDirectory(string path) result = ResultBuilder.Create(ResultCode.IO_AccessDenied); } - catch(Exception e) + catch (Exception e) { Logger.Log(LogLevel.Warning, "Unhandled error when attempting to create the directory." @@ -393,7 +401,7 @@ public static Result MoveDirectory(string directoryPath, string newDirectoryPath { Directory.Move(directoryPath, newDirectoryPath); } - catch(IOException e) + catch (IOException e) { // IOException // A file with the same name and location specified by path exists. @@ -413,7 +421,7 @@ public static Result MoveDirectory(string directoryPath, string newDirectoryPath result = ResultBuilder.Create(ResultCode.IO_AccessDenied); } - catch(UnauthorizedAccessException e) + catch (UnauthorizedAccessException e) { // UnauthorizedAccessException // The caller does not have the required permission. @@ -424,7 +432,7 @@ public static Result MoveDirectory(string directoryPath, string newDirectoryPath result = ResultBuilder.Create(ResultCode.IO_AccessDenied); } - catch(Exception e) + catch (Exception e) { Logger.Log(LogLevel.Warning, "Unhandled error when attempting to move directory." @@ -443,7 +451,7 @@ public static Result MoveDirectory(string directoryPath, string newDirectoryPath /// Checks that a file path is valid. public static bool IsPathValid(string filePath, out Result result) { - if(string.IsNullOrEmpty(filePath)) + if (string.IsNullOrEmpty(filePath)) { result = ResultBuilder.Create(ResultCode.IO_FilePathInvalid); return false; @@ -456,7 +464,7 @@ public static bool IsPathValid(string filePath, out Result result) /// Determines whether a file exists. public static bool FileExists(string path, out Result result) { - if(File.Exists(path)) + if (File.Exists(path)) { result = ResultBuilder.Success; return true; @@ -471,7 +479,7 @@ public static Result GetFileSizeAndHash( { Result result; - if(!IsPathValid(filePath, out result) + if (!IsPathValid(filePath, out result) || !DoesFileExist(filePath, out result)) { fileSize = -1; @@ -484,7 +492,7 @@ public static Result GetFileSizeAndHash( { fileSize = (new FileInfo(filePath)).Length; } - catch(UnauthorizedAccessException e) + catch (UnauthorizedAccessException e) { // UnauthorizedAccessException // Access to fileName is denied. @@ -498,7 +506,7 @@ public static Result GetFileSizeAndHash( fileHash = null; return result; } - catch(Exception e) + catch (Exception e) { Logger.Log(LogLevel.Warning, "Unhandled error when attempting to get file size." + $"\n.path={filePath}" @@ -512,13 +520,13 @@ public static Result GetFileSizeAndHash( // get hash try { - using(var stream = File.OpenRead(filePath)) + using (var stream = File.OpenRead(filePath)) { string hash = IOUtil.GenerateMD5(stream); fileHash = hash; } } - catch(UnauthorizedAccessException e) + catch (UnauthorizedAccessException e) { // UnauthorizedAccessException // path specified a directory. @@ -534,7 +542,7 @@ public static Result GetFileSizeAndHash( result = ResultBuilder.Create(ResultCode.IO_AccessDenied); return result; } - catch(IOException e) + catch (IOException e) { // IOException // An I/O error occurred while opening the file. @@ -549,7 +557,7 @@ public static Result GetFileSizeAndHash( result = ResultBuilder.Create(ResultCode.IO_FileCouldNotBeRead); return result; } - catch(Exception e) + catch (Exception e) { Logger.Log(LogLevel.Warning, "Unhandled error when attempting to get file hash." + $"\n.path={filePath}" @@ -574,7 +582,7 @@ public static bool DirectoryExists(string path) /// Determines whether a file exists. public static bool DoesFileExist(string filePath, out Result result) { - if(!File.Exists(filePath)) + if (!File.Exists(filePath)) { result = ResultBuilder.Create(ResultCode.IO_FileDoesNotExist); return false; @@ -588,7 +596,7 @@ public static bool DoesFileExist(string filePath, out Result result) public static bool TryCreateParentDirectory(string filePath, out Result result) { string dirToCreate = Path.GetDirectoryName(filePath); - if(Directory.Exists(dirToCreate)) + if (Directory.Exists(dirToCreate)) { result = ResultBuilder.Success; return true; @@ -600,7 +608,7 @@ public static bool TryCreateParentDirectory(string filePath, out Result result) result = ResultBuilder.Success; return true; } - catch(Exception exception) + catch (Exception exception) { Logger.Log( LogLevel.Warning, @@ -616,7 +624,7 @@ public static ResultAnd> ListAllFiles(string directoryPath) { const string AllFilesFilter = "*"; - if(!Directory.Exists(directoryPath)) + if (!Directory.Exists(directoryPath)) { return ResultAnd.Create>(ResultCode.IO_DirectoryDoesNotExist, null); } @@ -627,7 +635,7 @@ public static ResultAnd> ListAllFiles(string directoryPath) // https://docs.microsoft.com/en-us/dotnet/api/system.io.searchoption?view=net-5.0#remarks List fileList = new List(); - foreach(string filePath in Directory.EnumerateFiles(directoryPath, AllFilesFilter, + foreach (string filePath in Directory.EnumerateFiles(directoryPath, AllFilesFilter, SearchOption.AllDirectories)) { fileList.Add(filePath); @@ -635,7 +643,7 @@ public static ResultAnd> ListAllFiles(string directoryPath) return ResultAnd.Create(ResultCode.Success, fileList); } - catch(PathTooLongException e) + catch (PathTooLongException e) { // PathTooLongException // The specified path, file name, or combined exceed the system-defined maximum @@ -647,7 +655,7 @@ public static ResultAnd> ListAllFiles(string directoryPath) return ResultAnd.Create>(ResultCode.IO_FilePathInvalid, null); } - catch(SecurityException e) + catch (SecurityException e) { // SecurityException // The caller does not have the required permission. @@ -658,7 +666,7 @@ public static ResultAnd> ListAllFiles(string directoryPath) return ResultAnd.Create>(ResultCode.IO_AccessDenied, null); } - catch(UnauthorizedAccessException e) + catch (UnauthorizedAccessException e) { // UnauthorizedAccessException // The caller does not have the required permission. @@ -669,7 +677,7 @@ public static ResultAnd> ListAllFiles(string directoryPath) return ResultAnd.Create>(ResultCode.IO_AccessDenied, null); } - catch(Exception e) + catch (Exception e) { // ArgumentException // .NET Framework and .NET Core versions older than 2.1: path is a zero-length @@ -716,14 +724,14 @@ public static bool DeleteFile(string path) { try { - if(File.Exists(path)) + if (File.Exists(path)) { File.Delete(path); } return true; } - catch(Exception e) + catch (Exception e) { string warningInfo = $"[mod.io] Failed to delete file.\nFile: {path}\n\n" + $"Exception: {e}\n\n"; @@ -735,19 +743,19 @@ public static bool DeleteFile(string path) /// Moves a file. public static bool MoveFile(string source, string destination) { - if(string.IsNullOrEmpty(source)) + if (string.IsNullOrEmpty(source)) { Debug.Log("[mod.io] Failed to move file. source is NullOrEmpty."); return false; } - if(string.IsNullOrEmpty(destination)) + if (string.IsNullOrEmpty(destination)) { Debug.Log("[mod.io] Failed to move file. destination is NullOrEmpty."); return false; } - if(!DeleteFile(destination)) + if (!DeleteFile(destination)) { return false; } @@ -758,7 +766,7 @@ public static bool MoveFile(string source, string destination) return true; } - catch(Exception e) + catch (Exception e) { string warningInfo = "Failed to move file." + "\nSource File: {source}" + $"\nDestination: {destination}\n\n" @@ -772,7 +780,7 @@ public static bool MoveFile(string source, string destination) /// Gets the size of a file. public static Int64 GetFileSize(string path) { - if(!File.Exists(path)) + if (!File.Exists(path)) { return -1; } @@ -783,7 +791,7 @@ public static Int64 GetFileSize(string path) return fileInfo.Length; } - catch(Exception e) + catch (Exception e) { string warningInfo = $"[mod.io] Failed to get file size.\nFile: {path}\n\nException {e}\n\n"; // Debug.LogWarning(warningInfo + Utility.GenerateExceptionDebugString(e)); @@ -796,7 +804,7 @@ public static Int64 GetFileSize(string path) public static IList GetFiles(string path, string nameFilter, bool recurseSubdirectories) { - if(!Directory.Exists(path)) + if (!Directory.Exists(path)) { return null; } @@ -804,7 +812,7 @@ public static IList GetFiles(string path, string nameFilter, var searchOption = (recurseSubdirectories ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly); - if(nameFilter == null) + if (nameFilter == null) { nameFilter = "*"; } @@ -837,7 +845,7 @@ public static IList GetFiles(string path, string nameFilter, /// Gets the sub-directories at a location. public static IList GetDirectories(string path) { - if(!Directory.Exists(path)) + if (!Directory.Exists(path)) { return null; } @@ -846,7 +854,7 @@ public static IList GetDirectories(string path) { return Directory.GetDirectories(path); } - catch(Exception e) + catch (Exception e) { string warningInfo = $"[mod.io] Failed to get directories.\nDirectory: {path}\n\n" @@ -858,6 +866,6 @@ public static IList GetDirectories(string path) } } -#endregion // Legacy + #endregion // Legacy } } diff --git a/Runtime/ModIO.Implementation/Implementation.WSS/Classes/Wss.cs b/Runtime/ModIO.Implementation/Implementation.WSS/Classes/Wss.cs index 98e3c82..8951288 100644 --- a/Runtime/ModIO.Implementation/Implementation.WSS/Classes/Wss.cs +++ b/Runtime/ModIO.Implementation/Implementation.WSS/Classes/Wss.cs @@ -11,7 +11,7 @@ namespace ModIO.Implementation.Wss /// internal static class Wss { - + /// /// Sends a request to the server to begin a multi device login process. Once it receives /// the 5 digit code from the server it will return the token with said code and url to @@ -27,13 +27,13 @@ public static async Task> BeginAuthentica // Wait for first response, sort of like a handshake var handshake = await WssHandler.DoMessageHandshake(message); - + if(!handshake.result.Succeeded()) { // FAILURE return ResultAnd.Create(handshake.result, default); } - + // wait for ongoing message (put this task into the token to be awaited) var task = WaitForAccessToken(); @@ -41,17 +41,18 @@ public static async Task> BeginAuthentica ExternalAuthenticationToken token = new ExternalAuthenticationToken { code = handshake.value.code, - url = handshake.value.login_url,//handshake.value.display_url, // TODO swap when QR url is added - autoUrl = handshake.value.login_url, + url = handshake.value.login_url, + autoUrl = $"{handshake.value.login_url}?code={handshake.value.code}", expiryTime = DateTimeOffset.FromUnixTimeSeconds(handshake.value.date_expires).DateTime, task = task, cancel = ()=> WssHandler.CancelWaitingFor(WssOperationType.Wss_AccessToken) }; - + return ResultAnd.Create(ResultBuilder.Success, token); } - /// + // ReSharper disable Unity.PerformanceAnalysis + /// /// Begins listening for the WssMessage for the multi device authentication attempt. /// This will timeout after 15 minutes. /// @@ -59,7 +60,7 @@ public static async Task> BeginAuthentica static async Task WaitForAccessToken() { var response = await WssHandler.WaitForMessage(WssOperationType.Wss_AccessToken); - + Result result = response.result; if(result.Succeeded()) { @@ -68,7 +69,7 @@ static async Task WaitForAccessToken() try { UserData.instance.SetOAuthToken(token); - + // HACK this is kind of hacky, but we're not given the user profile, we need // to silently retrieve it await ModIOUnityImplementation.GetCurrentUser(delegate { }); @@ -86,15 +87,17 @@ static async Task WaitForAccessToken() result = ResultBuilder.Create(ResultCode.WSS_UnexpectedMessage); } } - + // TODO HACK REMOVE THIS - DISCONNECT THE SOCKET +#pragma warning disable 4014 //---------------------------------------------- // currently there are no other events or listeners for the socket to be used for, thus // we can disconnect it when we've finished the authentication flow (For now) // We will need to remove this next line once more features are added to the Wss Socket WssHandler.Shutdown(); //---------------------------------------------- - +#pragma warning restore 4014 + return result; } } diff --git a/Runtime/ModIO.Implementation/Implementation.WSS/Classes/WssHandler.cs b/Runtime/ModIO.Implementation/Implementation.WSS/Classes/WssHandler.cs index 0ba396d..80557c7 100644 --- a/Runtime/ModIO.Implementation/Implementation.WSS/Classes/WssHandler.cs +++ b/Runtime/ModIO.Implementation/Implementation.WSS/Classes/WssHandler.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Text.RegularExpressions; using System.Threading.Tasks; using ModIO.Implementation.Wss.Messages; using ModIO.Implementation.Wss.Messages.Objects; @@ -13,11 +14,8 @@ namespace ModIO.Implementation.Wss /// internal static class WssHandler { - //$"wss://g-{Settings.server.gameId}.ws.modapi.io/"; <---- production url - //$"wss://g-{Settings.server.gameId}.ws.moddemo.io/staging"; <---- staging url - //"ws://localhost:8080/"; <---- localhost testing - static string GatewayUrl => $"wss://g-{Settings.server.gameId}.ws.modapi.io/"; - + static string GatewayUrl => $"wss://g-{Settings.server.gameId}.ws.{Regex.Match(Settings.server.serverURL, "https://[^.]+.(?.+).io").Groups["domain"]}.io/"; + // TODO set this up in a partial class and duck type it based on platform static ISocketConnection Socket = new SocketConnection(); diff --git a/Runtime/ModIO.Implementation/Statics/DataStorage.cs b/Runtime/ModIO.Implementation/Statics/DataStorage.cs index 75d3528..bc6c202 100644 --- a/Runtime/ModIO.Implementation/Statics/DataStorage.cs +++ b/Runtime/ModIO.Implementation/Statics/DataStorage.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.IO; using System.Threading.Tasks; using ModIO.Implementation.API.Objects; using ModIO.Implementation.Platform; @@ -34,6 +35,13 @@ internal static class DataStorage const string UserDataFilePath = "user.json"; + public static string GetUploadFilePath(long modId) + { + string fileName = $"{modId}_" + DateTime.UtcNow.ToString("yyyy-MM-dd_HH-mm-ss") + ".zip"; + const string uploadDirectoryName = "Upload"; + return Path.Combine(temp.RootDirectory, uploadDirectoryName, fileName); + } + /// Writes the user data to disk. public static async Task SaveUserDataAsync() { @@ -388,7 +396,7 @@ public static ModIOFileStream OpenArchiveReadStream(long modId, long modfileId, out Result result) { string filePath = GenerateModfileArchiveFilePath(modId, modfileId); - + return OpenArchiveReadStream(filePath, out result); } diff --git a/Runtime/ModIO.Implementation/Statics/FilterUtil.cs b/Runtime/ModIO.Implementation/Statics/FilterUtil.cs index 7bb2b42..b4ac945 100644 --- a/Runtime/ModIO.Implementation/Statics/FilterUtil.cs +++ b/Runtime/ModIO.Implementation/Statics/FilterUtil.cs @@ -4,13 +4,15 @@ namespace ModIO.Implementation { /// /// Filter Utility methods - /// + /// internal static class FilterUtil { public static string ConvertToURL(SearchFilter searchFilter) { // TODO change this to a StringBuilder string url = string.Empty; + if (searchFilter == null) return url; + string ascendingOrDescending = searchFilter.isSortAscending ? Filtering.Ascending : Filtering.Descending; // Set Filtering Order @@ -19,6 +21,9 @@ public static string ConvertToURL(SearchFilter searchFilter) case SortModsBy.Name: url += $"&{ascendingOrDescending}name"; break; + case SortModsBy.Price: + url += $"&{ascendingOrDescending}price"; + break; case SortModsBy.Rating: url += $"&{ascendingOrDescending}rating"; break; @@ -35,16 +40,18 @@ public static string ConvertToURL(SearchFilter searchFilter) url += $"&{ascendingOrDescending}id"; break; } - // Add Search Phrases - foreach(string phrase in searchFilter.searchPhrases) + + if (searchFilter.searchPhrases != null) { - if(!string.IsNullOrWhiteSpace(phrase)) + // Add Search Phrases + foreach(var s in searchFilter.searchPhrases.Values) { - url += $"&{Filtering.FullTextSearch}{phrase}"; + url += s; } } + // add tags to filter - if(searchFilter.tags.Count > 0) + if(searchFilter.tags != null && searchFilter.tags.Count > 0) { url += "&tags="; foreach(string tag in searchFilter.tags) @@ -54,7 +61,7 @@ public static string ConvertToURL(SearchFilter searchFilter) url = url.Trim(','); } // add users we are looking for - if(searchFilter.users.Count > 0) + if(searchFilter.users != null && searchFilter.users.Count > 0) { url += "&submitted_by="; foreach(long user in searchFilter.users) @@ -63,6 +70,16 @@ public static string ConvertToURL(SearchFilter searchFilter) } url = url.Trim(','); } + if(!searchFilter.showMatureContent) + { + url += "&maturity_option=0"; + } + + // marketplace revenue type + if(searchFilter.revenueType != RevenueType.Free) + { + url += $"&revenue_type={(int)searchFilter.revenueType}"; + } return url; } diff --git a/Runtime/ModIO.Implementation/Statics/IOUtil.cs b/Runtime/ModIO.Implementation/Statics/IOUtil.cs index 0e7257a..09dc6f8 100644 --- a/Runtime/ModIO.Implementation/Statics/IOUtil.cs +++ b/Runtime/ModIO.Implementation/Statics/IOUtil.cs @@ -1,5 +1,7 @@ using System; +using System.Diagnostics; using System.IO; +using System.Security.Cryptography; using System.Text; using System.Threading.Tasks; using Newtonsoft.Json; @@ -109,19 +111,39 @@ public static string GenerateMD5(byte[] data) } /// Generates an MD5 hash from a given stream. - public static string GenerateArchiveMD5(string filepath) + public static async Task GenerateArchiveMD5(string filepath) { - string fileHash = string.Empty; + using ModIOFileStream stream = DataStorage.OpenArchiveReadStream(filepath, out Result result); + return result.Succeeded() ? await GenerateMD5Async(stream) : string.Empty; + } + + /// Asynchronously generates an MD5 hash from a given stream. + public static async Task GenerateMD5Async(Stream stream) + { + // TODO: Add cancel support + + Stopwatch stopwatch = Stopwatch.StartNew(); + + byte[] buffer = new byte[1024 * 1024]; // 1MB + int bytesRead; + + using MD5 md5 = MD5.Create(); - using(var stream = DataStorage.OpenArchiveReadStream(filepath, out Result result)) + while ((bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length)) > 0) { - if(!result.Succeeded()) - { - return string.Empty; - } - fileHash = GenerateMD5(stream); + md5.TransformBlock(buffer, 0, bytesRead, null, 0); + + if (stopwatch.ElapsedMilliseconds < 15) + continue; + + await Task.Yield(); + stopwatch.Restart(); } - return fileHash; + md5.TransformFinalBlock(buffer, 0, 0); + + stopwatch.Stop(); + + return BitConverter.ToString(md5.Hash).Replace("-", "").ToLowerInvariant(); } /// Generates an MD5 hash for a given stream. diff --git a/Runtime/ModIOUnity.cs b/Runtime/ModIOUnity.cs index b424f74..aee23d7 100644 --- a/Runtime/ModIOUnity.cs +++ b/Runtime/ModIOUnity.cs @@ -1,139 +1,81 @@ using ModIO.Implementation; +using ModIO.Implementation.API.Objects; +using ModIO.Implementation.API.Requests; using System; using System.Collections.Generic; using UnityEngine; -using ModIO.Implementation.API.Objects; #pragma warning disable 4014 // Ignore warnings about calling async functions from non-async code namespace ModIO { - - /// Main interface for the mod.io Unity plugin. Every method within - /// ModIOUnity.cs that has a callback can also be found in ModIOUnityAsync with an asynchronous - /// alternative method (if you'd rather not use callbacks) + /// Main interface for the mod.io Unity plugin. + /// Every method with a callback has an asynchronous alternative in . /// public static class ModIOUnity { -#region Initialization and Maintenance + #region Initialization and Maintenance - /// - /// You can use this to quickly identify whether or not the plugin has been initialized. - /// - /// true if the plugin is initialized - /// - /// void Example() - /// { - /// if (ModIOUnity.IsInitialized()) - /// { - /// Debug.Log("The plugin is initialized"); - /// } - /// else - /// { - /// Debug.Log("The plugin is not initialized"); - /// } - /// } - /// - public static bool IsInitialized() - { - return ModIOUnityImplementation.isInitialized; - } + /// true if the plugin has been initialized. + public static bool IsInitialized() => ModIOUnityImplementation.isInitialized; - /// - /// Assigns the logging delegate the plugin uses to output log messages that otherwise go to - /// UnityEngine.Debug.Log(string) - /// - /// - /// If you don't wish to see [mod.io] logs appearing in the Unity console you can set your - /// own delegate for handling logs and ignore them or display them elsewhere. - /// + /// Use to send log messages to instead of Unity.Debug.Log(string). /// The delegate for receiving log messages + /// + /// ModIOUnity.SetLoggingDelegate((LogLevel logLevel, string logMessage) => { + /// if (logLevel == LogLevel.Error) + /// Debug.LogError($"mod.io plugin error: {logMessage}"); + /// }); + /// /// /// - /// - /// void Example() - /// { - /// // Send logs to MyLoggingDelegate instead of Debug.Log - /// ModIOUnity.SetLoggingDelegate(MyLoggingDelegate); - /// } - /// - /// public void MyLoggingDelegate(LogLevel logLevel, string logMessage) - /// { - /// // Handle the log entry - /// if (logLevel == LogLevel.Error) - /// { - /// Debug.Log("We received an error with message: " + logMessage); - /// } - /// } - /// - public static void SetLoggingDelegate(LogMessageDelegate loggingDelegate) - { - ModIOUnityImplementation.SetLoggingDelegate(loggingDelegate); - } - - /// - /// Initializes the Plugin using the provided settings for a specified user. Loads the - /// local state of mods installed on the system as well as relevant mods to the user. Loads the - /// state of mods installed on the system as well as the set of mods the - /// specified user has installed on this device. - /// - /// Name of the directory to store the local profile's data - /// (unrelated to the authenticated user) - /// Data used by the plugin to connect with the mod.io - /// service. - /// Data used by the plugin to interact with the - /// platform. - /// + public static void SetLoggingDelegate(LogMessageDelegate loggingDelegate) => ModIOUnityImplementation.SetLoggingDelegate(loggingDelegate); + + /// Use if you have a pre-configured mod.io config ScriptableObject. + /// + /// Data used by the plugin to connect with the mod.io service. + /// Data used by the plugin to interact with the platform. + /// + /// ServerSettings serverSettings = new ServerSettings { + /// serverURL = "https://api.test.mod.io/v1", + /// gameId = 1234, + /// gameKey = "1234567890abcdefghijklmnop" + /// }; + ///
+ /// + /// BuildSettings buildSettings = new BuildSettings { + /// logLevel = LogLevel.Verbose, + /// userPortal = UserPortal.None, + /// requestCacheLimitKB = 0 // No limit + /// }; + ///
+ /// Result result = ModIOUnity.InitializeForUser("default", serverSettings, buildSettings); + /// if (result.Succeeded()) + /// Debug.Log("Plugin initialized for default user"); + ///
/// /// /// + /// /// - /// - /// void Example() - /// { - /// // Setup a ServerSettings struct - /// ServerSettings serverSettings = new ServerSettings(); - /// serverSettings.serverURL = "https://api.test.mod.io/v1"; - /// serverSettings.gameId = 1234; - /// serverSettings.gameKey = "1234567890abcdefghijklmnop"; - /// - /// // Setup a BuildSettings struct - /// BuildSettings buildSettings = new BuildSettings(); - /// buildSettings.logLevel = LogLevel.Verbose; - /// buildSettings.userPortal = UserPortal.None; - /// buildSettings.requestCacheLimitKB = 0; // No limit - /// - /// ModIOUnity.InitializeForUser("ExampleUser", serverSettings, buildSettings, InitializationCallback); - /// } - /// - /// void InitializationCallback(Result result) - /// { - /// if (result.Succeeded()) - /// { - /// Debug.Log("Initialized plugin"); - /// } - /// else - /// { - /// Debug.Log("Failed to initialize plugin"); - /// } - /// } - /// public static Result InitializeForUser(string userProfileIdentifier, - ServerSettings serverSettings, - BuildSettings buildSettings) - { - return ModIOUnityImplementation.InitializeForUser(userProfileIdentifier, serverSettings, buildSettings); - } - - /// - /// Initializes the Plugin using the provided settings for a specified user. Loads the - /// local state of mods installed on the system as well as relevant mods to the user. Loads the - /// state of mods installed on the system as well as the set of mods the - /// specified user has installed on this device. - /// - /// Name of the directory to store the user's data - /// in. + ServerSettings serverSettings, + BuildSettings buildSettings) => + ModIOUnityImplementation.InitializeForUser(userProfileIdentifier, serverSettings, buildSettings); + + /// Initializes the Plugin for the specified user and loads the state of mods installed on the system, as well as the subscribed mods the user has installed on this device. + /// + /// A locally unique identifier for the current user.
+ /// Can be used to cache multiple user authentications and mod-subscriptions.
+ /// Use "default" if you only ever have one user. + /// + /// + /// Result result = ModIOUnity.InitializeForUser("default"); + /// if (result.Succeeded()) + /// Debug.Log("Plugin initialized for default user"); + /// /// + /// /// /// /// void Example() @@ -153,98 +95,46 @@ public static Result InitializeForUser(string userProfileIdentifier, /// { /// } /// - public static Result InitializeForUser(string userProfileIdentifier) - { - return ModIOUnityImplementation.InitializeForUser(userProfileIdentifier); - } - - /// - /// Cancels any running public operations, frees plugin resources, and invokes - /// any pending callbacks with a cancelled result code. /// - /// - /// Callback results invoked during a shutdown operation can be checked with - /// Result.IsCancelled() - /// + public static Result InitializeForUser(string userProfileIdentifier) => ModIOUnityImplementation.InitializeForUser(userProfileIdentifier); + + /// Cancels all public operations, frees plugin resources and invokes any pending callbacks with a cancelled result code. + /// Result.IsCancelled() can be used to determine if it was cancelled due to a shutdown operation. + /// ModIOUnity.Shutdown(() => Debug.Log("Plugin shutdown complete")); /// - /// - /// void Example() - /// { - /// ModIOUnity.Shutdown(ShutdownCallback); - /// } - /// - /// void ShutdownCallback() - /// { - /// Debug.Log("Finished shutting down the ModIO Plugin"); - /// } - /// - public static void Shutdown(Action shutdownComplete) - { - ModIOUnityImplementation.Shutdown(shutdownComplete); - } + public static void Shutdown(Action shutdownComplete) => ModIOUnityImplementation.Shutdown(shutdownComplete); -#endregion // Initialization and Maintenance + #endregion // Initialization and Maintenance -#region Authentication + #region Authentication - /// - /// This begins listening for an external login attempt. Once successfully connecting to the - /// mod.io server, it will return the which contains a - /// code and url that can be displayed to your user. They can then go to the url on a - /// separate device and enter the code. Once they've done that, the - /// will complete. - /// - /// Once you receive the token you can cancel the request at anytime with . - /// Also, the user has 15 minutes before the request times out and you'll need to start again - /// The callback with the result, if succeeded, the token will be valid to use - /// - /// - /// - /// - /// - /// - /// ExternalAuthenticationToken token; - /// - /// void Example() - /// { - /// ModIOUnity.RequestExternalAuthentication(ReceiveToken); - /// } - /// - /// async void ReceiveToken(ResultAnd&#lt;ExternalAuthenticationToken&#gt; response) + /// Listen for an external login attempt. The callback argument contains an that includes the url and code to display to the user. ExternalAuthenticationToken.task will complete once the user enters the code. + /// The callback to handle the response, which includes the if the request was successful. + /// The request will time out after 15 minutes. You can cancel it at any time using token.Cancel(). + /// + /// ModIOUnity.RequestExternalAuthentication(async response => /// { - /// if (response.result.Succeeded()) + /// if (!response.result.Succeeded()) /// { - /// // Cache the token in case we want to cancel it - /// token = response.value; - /// - /// // Wait for the user to authenticate externally - /// Result result = await token.task; + /// Debug.Log($"RequestExternalAuthentication failed: {response.result.message}"); /// - /// if (result.Succeeded()) - /// { - /// Debug.Log("You have successfully authenticated the user"); - /// } - /// else - /// { - /// Debug.Log("Failed to authenticate (possibly timed out)"); - /// } - /// } - /// else - /// { - /// Debug.Log("Failed to connect to mod.io"); + /// return; /// } - /// } - /// - /// void StopAuthentication() - /// { - /// token.Cancel(); - /// } - /// - public static void RequestExternalAuthentication(Action> callback) - { - ModIOUnityImplementation.BeginWssAuthentication(callback); - } - + ///
+ /// var token = response.value; // Call token.Cancel() to cancel the authentication + ///
+ /// Debug.Log($"Go to {token.url} in your browser and enter '{token.code}' to login."); + ///
+ /// Result resultToken = await token.task; + ///
+ /// Debug.Log(resultToken.Succeeded() ? "Authentication successful" : "Authentication failed (possibly timed out)"); + /// }); + ///
+ /// + /// + /// + public static void RequestExternalAuthentication(Action> callback) => ModIOUnityImplementation.BeginWssAuthentication(callback); + /// /// Sends an email with a security code to the specified Email Address. The security code /// is then used to Authenticate the user session using ModIOUnity.SubmitEmailSecurityCode() @@ -261,7 +151,7 @@ public static void RequestExternalAuthentication(Action /// /// - /// + /// /// void Example() /// { /// ModIOUnity.RequestAuthenticationEmail("johndoe@gmail.com", RequestAuthenticationCallback); @@ -278,7 +168,7 @@ public static void RequestExternalAuthentication(Action + /// public static void RequestAuthenticationEmail(string emailaddress, Action callback) { ModIOUnityImplementation.RequestEmailAuthToken(emailaddress, callback); @@ -297,7 +187,7 @@ public static void RequestAuthenticationEmail(string emailaddress, Action /// /// - /// + /// /// void Example(string userSecurityCode) /// { /// ModIOUnity.SubmitEmailSecurityCode(userSecurityCode, SubmitCodeCallback); @@ -314,7 +204,7 @@ public static void RequestAuthenticationEmail(string emailaddress, Action + /// public static void SubmitEmailSecurityCode(string securityCode, Action callback) { ModIOUnityImplementation.SubmitEmailSecurityCode(securityCode, callback); @@ -342,7 +232,7 @@ public static void SubmitEmailSecurityCode(string securityCode, Action c /// /// /// - /// + /// /// void Example() /// { /// ModIOUnity.GetTermsOfUse(GetTermsOfUseCallback); @@ -359,7 +249,7 @@ public static void SubmitEmailSecurityCode(string securityCode, Action c /// Debug.Log("Failed to retrieve the terms of use"); /// } /// } - /// + /// public static void GetTermsOfUse(Action> callback) { ModIOUnityImplementation.GetTermsOfUse(callback); @@ -378,7 +268,7 @@ public static void GetTermsOfUse(Action> callback) /// Callback to be invoked when the operation completes /// /// - /// + /// /// // First we get the Terms of Use to display to the user and cache the hash /// void GetTermsOfUse_Example() /// { @@ -417,7 +307,7 @@ public static void GetTermsOfUse(Action> callback) /// Debug.Log("Failed to authenticate"); /// } /// } - /// + /// public static void AuthenticateUserViaSteam(string steamToken, string emailAddress, TermsHash? hash, @@ -432,13 +322,11 @@ public static void AuthenticateUserViaSteam(string steamToken, /// Attempts to authenticate a user via the epic API. /// /// the user's epic token - /// the user's email address + /// the user's email address (Can be null) /// the TermsHash retrieved from ModIOUnity.GetTermsOfUse() /// Callback to be invoked when the operation completes /// /// - /// - /// public static void AuthenticateUserViaEpic(string epicToken, string emailAddress, TermsHash? hash, @@ -457,12 +345,12 @@ public static void AuthenticateUserViaEpic(string epicToken, /// method. /// /// the user's gog token - /// the user's email address + /// the user's email address (Can be null) /// the TermsHash retrieved from ModIOUnity.GetTermsOfUse() /// Callback to be invoked when the operation completes /// /// - /// + /// /// // First we get the Terms of Use to display to the user and cache the hash /// void GetTermsOfUse_Example() /// { @@ -501,7 +389,7 @@ public static void AuthenticateUserViaEpic(string epicToken, /// Debug.Log("Failed to authenticate"); /// } /// } - /// + /// public static void AuthenticateUserViaGOG(string gogToken, string emailAddress, TermsHash? hash, Action callback) @@ -519,13 +407,13 @@ public static void AuthenticateUserViaGOG(string gogToken, string emailAddress, /// method. /// /// the user's auth code - /// the user's email address + /// the user's email address (Can be null) /// the TermsHash retrieved from ModIOUnity.GetTermsOfUse() /// the PSN account environment /// Callback to be invoked when the operation completes /// /// - /// + /// /// // First we get the Terms of Use to display to the user and cache the hash /// void GetTermsOfUse_Example() /// { @@ -564,7 +452,7 @@ public static void AuthenticateUserViaGOG(string gogToken, string emailAddress, /// Debug.Log("Failed to authenticate"); /// } /// } - /// + /// public static void AuthenticateUserViaPlayStation(string authCode, string emailAddress, TermsHash? hash, PlayStationEnvironment environment, Action callback) @@ -582,12 +470,12 @@ public static void AuthenticateUserViaPlayStation(string authCode, string emailA /// method. /// /// the user's itch token - /// the user's email address + /// the user's email address (Can be null) /// the TermsHash retrieved from ModIOUnity.GetTermsOfUse() /// Callback to be invoked when the operation completes /// /// - /// + /// /// // First we get the Terms of Use to display to the user and cache the hash /// void GetTermsOfUse_Example() /// { @@ -626,7 +514,7 @@ public static void AuthenticateUserViaPlayStation(string authCode, string emailA /// Debug.Log("Failed to authenticate"); /// } /// } - /// + /// public static void AuthenticateUserViaItch(string itchioToken, string emailAddress, TermsHash? hash, @@ -645,12 +533,12 @@ public static void AuthenticateUserViaItch(string itchioToken, /// method. /// /// the user's xbl token - /// the user's email address + /// the user's email address (Can be null) /// the TermsHash retrieved from ModIOUnity.GetTermsOfUse() /// Callback to be invoked when the operation completes /// /// - /// + /// /// // First we get the Terms of Use to display to the user and cache the hash /// void GetTermsOfUse_Example() /// { @@ -689,7 +577,7 @@ public static void AuthenticateUserViaItch(string itchioToken, /// Debug.Log("Failed to authenticate"); /// } /// } - /// + /// public static void AuthenticateUserViaXbox(string xboxToken, string emailAddress, TermsHash? hash, @@ -708,12 +596,12 @@ public static void AuthenticateUserViaXbox(string xboxToken, /// method. /// /// the user's switch NSA id token - /// the user's email address + /// the user's email address (Can be null) /// the TermsHash retrieved from ModIOUnity.GetTermsOfUse() /// Callback to be invoked when the operation completes /// /// - /// + /// /// // First we get the Terms of Use to display to the user and cache the hash /// void GetTermsOfUse_Example() /// { @@ -752,7 +640,7 @@ public static void AuthenticateUserViaXbox(string xboxToken, /// Debug.Log("Failed to authenticate"); /// } /// } - /// + /// public static void AuthenticateUserViaSwitch(string SwitchNsaId, string emailAddress, TermsHash? hash, @@ -771,12 +659,12 @@ public static void AuthenticateUserViaSwitch(string SwitchNsaId, /// method. /// /// the user's discord token - /// the user's email address + /// the user's email address (Can be null) /// the TermsHash retrieved from ModIOUnity.GetTermsOfUse() /// Callback to be invoked when the operation completes /// /// - /// + /// /// // First we get the Terms of Use to display to the user and cache the hash /// void GetTermsOfUse_Example() /// { @@ -815,7 +703,7 @@ public static void AuthenticateUserViaSwitch(string SwitchNsaId, /// Debug.Log("Failed to authenticate"); /// } /// } - /// + /// public static void AuthenticateUserViaDiscord(string discordToken, string emailAddress, TermsHash? hash, @@ -834,12 +722,12 @@ public static void AuthenticateUserViaDiscord(string discordToken, /// method. /// /// the user's google token - /// the user's email address + /// the user's email address (Can be null) /// the TermsHash retrieved from ModIOUnity.GetTermsOfUse() /// Callback to be invoked when the operation completes /// /// - /// + /// /// // First we get the Terms of Use to display to the user and cache the hash /// void GetTermsOfUse_Example() /// { @@ -878,7 +766,7 @@ public static void AuthenticateUserViaDiscord(string discordToken, /// Debug.Log("Failed to authenticate"); /// } /// } - /// + /// public static void AuthenticateUserViaGoogle(string googleToken, string emailAddress, TermsHash? hash, @@ -899,13 +787,13 @@ public static void AuthenticateUserViaGoogle(string googleToken, /// the device your authenticating on /// the nonce /// the user's oculus token - /// the user's email address + /// the user's email address (Can be null) /// the TermsHash retrieved from ModIOUnity.GetTermsOfUse() /// Callback to be invoked when the operation completes /// /// /// - /// + /// /// // First we get the Terms of Use to display to the user and cache the hash /// void GetTermsOfUse_Example() /// { @@ -949,7 +837,7 @@ public static void AuthenticateUserViaGoogle(string googleToken, /// Debug.Log("Failed to authenticate"); /// } /// } - /// + /// public static void AuthenticateUserViaOculus(OculusDevice oculusDevice, string nonce, long userId, string oculusToken, string emailAddress, @@ -961,14 +849,83 @@ public static void AuthenticateUserViaOculus(OculusDevice oculusDevice, string n oculusDevice, userId.ToString(), 0, callback); } - // TODO @Steve and @Jackson: Discuss whether to make this synchronous or not + /// + /// Attempts to authenticate a user on behalf of an OpenID identity provider. To use this + /// method of authentication, you must configure the OpenID config in your games + /// authentication admin page. + /// NOTE: The ability to authenticate players using your identity provider is a feature for + /// advanced partners only. If you are interested in becoming an advanced partner, please + /// contact us. + /// + /// + /// You will first need to get the terms of use and hash from the ModIOUnity.GetTermsOfUse() + /// method. + /// + /// the user's id token + /// the user's email address + /// the TermsHash retrieved from ModIOUnity.GetTermsOfUse() + /// Callback to be invoked when the operation completes + /// + /// + /// // First we get the Terms of Use to display to the user and cache the hash + /// void GetTermsOfUse_Example() + /// { + /// ModIOUnity.GetTermsOfUse(GetTermsOfUseCallback); + /// } + /// + /// void GetTermsOfUseCallback(ResultAnd<TermsOfUse> response) + /// { + /// if (response.result.Succeeded()) + /// { + /// Debug.Log("Successfully retrieved the terms of use: " + response.value.termsOfUse); + /// + /// // Cache the terms of use (which has the hash for when we attempt to authenticate) + /// modIOTermsOfUse = response.value; + /// } + /// else + /// { + /// Debug.Log("Failed to retrieve the terms of use"); + /// } + /// } + /// + /// // Once we have the Terms of Use and hash we can attempt to authenticate + /// void Authenticate_Example() + /// { + /// ModIOUnity.AuthenticateUserViaOpenId(idToken, + /// "johndoe@gmail.com", + /// modIOTermsOfUse.hash, + /// AuthenticationCallback); + /// } + /// + /// void AuthenticationCallback(Result result) + /// { + /// if (result.Succeeded()) + /// { + /// Debug.Log("Successfully authenticated user"); + /// } + /// else + /// { + /// Debug.Log("Failed to authenticate"); + /// } + /// } + /// + public static void AuthenticateUserViaOpenId(string idToken, + string emailAddress, + TermsHash? hash, + Action callback) + { + ModIOUnityImplementation.AuthenticateUser( + idToken, AuthenticationServiceProvider.OpenId, emailAddress, hash, null, + null, null, 0, callback); + } + /// /// Informs you if the current user session is authenticated or not. /// /// /// /// - /// + /// /// void Example() /// { /// ModIOUnity.IsAuthenticated(IsAuthenticatedCallback); @@ -985,7 +942,7 @@ public static void AuthenticateUserViaOculus(OculusDevice oculusDevice, string n /// Debug.Log("current session is not authenticated"); /// } /// } - /// + /// public static void IsAuthenticated(Action callback) { ModIOUnityImplementation.IsAuthenticated(callback); @@ -1004,7 +961,7 @@ public static void IsAuthenticated(Action callback) /// /// /// - /// + /// /// //static async void Example() ///{ /// Result result = await ModIOUnity.LogOutCurrentUser(); @@ -1018,7 +975,7 @@ public static void IsAuthenticated(Action callback) /// Debug.Log("Failed to log out the current user"); /// } ///} - /// + /// public static Result LogOutCurrentUser() { return ModIOUnityImplementation.RemoveUserData(); @@ -1026,7 +983,7 @@ public static Result LogOutCurrentUser() #endregion // Authentication -#region Mod Browsing + #region Mod Browsing /// /// Gets the existing tags for the current game Id that can be used when searching/filtering @@ -1041,7 +998,7 @@ public static Result LogOutCurrentUser() /// /// /// - /// + /// /// void Example() /// { /// ModIOUnity.GetTagCategories(GetTagsCallback); @@ -1064,7 +1021,7 @@ public static Result LogOutCurrentUser() /// Debug.Log("failed to get game tags"); /// } /// } - /// + /// public static void GetTagCategories(Action> callback) { ModIOUnityImplementation.GetGameTags(callback); @@ -1088,7 +1045,7 @@ public static void GetTagCategories(Action> callback) /// /// /// - /// + /// /// void Example() /// { /// SearchFilter filter = new SearchFilter(); @@ -1108,7 +1065,7 @@ public static void GetTagCategories(Action> callback) /// Debug.Log("failed to get mods"); /// } /// } - /// + /// public static void GetMods(SearchFilter filter, Action> callback) { ModIOUnityImplementation.GetMods(filter, callback); @@ -1127,7 +1084,7 @@ public static void GetMods(SearchFilter filter, Action> callb /// /// /// - /// + /// /// void Example() /// { /// ModId modId = new ModId(1234); @@ -1145,12 +1102,14 @@ public static void GetMods(SearchFilter filter, Action> callb /// Debug.Log("failed to get mod"); /// } /// } - /// + /// public static void GetMod(ModId modId, Action> callback) { ModIOUnityImplementation.GetMod(modId.id, callback); } + public static void GetModSkipCache(ModId modId, Action> callback) => ModIOUnityImplementation.GetModSkipCache(modId.id, callback); + /// /// Get all comments posted in the mods profile. Successful request will return an array of /// Comment Objects. We recommended reading the filtering documentation to return only the @@ -1185,7 +1144,7 @@ public static void GetModComments(ModId modId, SearchFilter filter, Action /// /// - /// + /// /// void Example() /// { /// ModId modId = new ModId(1234); @@ -1204,7 +1163,7 @@ public static void GetModComments(ModId modId, SearchFilter filter, Action + /// public static void GetModDependencies(ModId modId, Action> callback) { ModIOUnityImplementation.GetModDependencies(modId, callback); @@ -1217,7 +1176,7 @@ public static void GetModDependencies(ModId modId, Action /// /// - /// + /// /// void Example() /// { /// ModIOUnity.GetCurrentUserRatings(GetCurrentUserRatingsCallback); @@ -1237,7 +1196,7 @@ public static void GetModDependencies(ModId modId, Action + /// public static void GetCurrentUserRatings(Action> callback) { ModIOUnityImplementation.GetCurrentUserRatings(callback); @@ -1253,7 +1212,7 @@ public static void GetCurrentUserRatings(Action> callback) /// /// /// - /// + /// /// void Example() /// { /// ModId modId = new ModId(1234); @@ -1271,15 +1230,15 @@ public static void GetCurrentUserRatings(Action> callback) /// Debug.Log("failed to get rating"); /// } /// } - /// + /// public static void GetCurrentUserRatingFor(ModId modId, Action> callback) { ModIOUnityImplementation.GetCurrentUserRatingFor(modId, callback); } -#endregion // Mod Browsing + #endregion // Mod Browsing -#region User Management + #region User Management /// /// Used to submit a rating for a specified mod. @@ -1294,7 +1253,7 @@ public static void GetCurrentUserRatingFor(ModId modId, Action /// /// - /// + /// /// /// ModProfile mod; /// @@ -1314,7 +1273,7 @@ public static void GetCurrentUserRatingFor(ModId modId, Action + /// public static void RateMod(ModId modId, ModRating rating, Action callback) { ModIOUnityImplementation.AddModRating(modId, rating, callback); @@ -1334,7 +1293,7 @@ public static void RateMod(ModId modId, ModRating rating, Action callbac /// /// /// - /// + /// /// /// ModProfile mod; /// @@ -1354,7 +1313,7 @@ public static void RateMod(ModId modId, ModRating rating, Action callbac /// Debug.Log("Failed to subscribe to mod"); /// } /// } - /// + /// public static void SubscribeToMod(ModId modId, Action callback) { ModIOUnityImplementation.SubscribeTo(modId, callback); @@ -1374,7 +1333,7 @@ public static void SubscribeToMod(ModId modId, Action callback) /// /// /// - /// + /// /// /// ModProfile mod; /// @@ -1394,7 +1353,7 @@ public static void SubscribeToMod(ModId modId, Action callback) /// Debug.Log("Failed to unsubscribe from mod"); /// } /// } - /// + /// public static void UnsubscribeFromMod(ModId modId, Action callback) { ModIOUnityImplementation.UnsubscribeFrom(modId, callback); @@ -1413,7 +1372,7 @@ public static void UnsubscribeFromMod(ModId modId, Action callback) /// /// /// an array of the user's subscribed mods - /// + /// /// void Example() /// { /// SubscribedMod[] mods = ModIOUnity.GetSubscribedMods(out Result result); @@ -1427,7 +1386,7 @@ public static void UnsubscribeFromMod(ModId modId, Action callback) /// Debug.Log("failed to get user mods"); /// } /// } - /// + /// public static SubscribedMod[] GetSubscribedMods(out Result result) { return ModIOUnityImplementation.GetSubscribedMods(out result); @@ -1446,7 +1405,7 @@ public static SubscribedMod[] GetSubscribedMods(out Result result) /// /// /// - /// + /// /// void Example() /// { /// ModIOUnity.GetCurrentUser(GetUserCallback); @@ -1463,7 +1422,7 @@ public static SubscribedMod[] GetSubscribedMods(out Result result) /// Debug.Log("failed to get user"); /// } /// } - /// + /// public static void GetCurrentUser(Action> callback) { ModIOUnityImplementation.GetCurrentUser(callback); @@ -1493,14 +1452,27 @@ public static void UnmuteUser(long userId, Action callback) ModIOUnityImplementation.UnmuteUser(userId, callback); } -#endregion + /// + /// Gets an array of all the muted users that the current authenticated user has muted. + /// + /// This has a cap of 1,000 users. It will not return more then that. + /// callback with the Result of the request + /// + public static void GetMutedUsers(Action> callback) + { + ModIOUnityImplementation.GetMutedUsers(callback); + } + + #endregion -#region Mod Management + #region Mod Management /// - /// This retrieves the user's subscriptions from the mod.io server and synchronises it with - /// our local instance of the user's subscription data. If mod management has been enabled + /// This retrieves the user's ratings and subscriptions from the mod.io server and synchronises + /// it with our local instance of the user's data. If mod management has been enabled /// via ModIOUnity.EnableModManagement() then it may begin to install/uninstall mods. + /// It's recommended you use this method after initializing the plugin and after + /// successfully authenticating the user. /// /// /// This requires the current session to have an authenticated user, otherwise @@ -1521,7 +1493,7 @@ public static void UnmuteUser(long userId, Action callback) /// /// /// - /// + /// /// void Example() /// { /// ModIOUnity.FetchUpdates(FetchUpdatesCallback); @@ -1538,7 +1510,7 @@ public static void UnmuteUser(long userId, Action callback) /// Debug.Log("failed to get user subscriptions"); /// } /// } - /// + /// public static void FetchUpdates(Action callback) { ModIOUnityImplementation.FetchUpdates(callback); @@ -1557,7 +1529,7 @@ public static void FetchUpdates(Action callback) /// /// /// - /// + /// /// void Example() /// { /// Result result = ModIOUnity.EnableModManagement(ModManagementDelegate); @@ -1567,7 +1539,7 @@ public static void FetchUpdates(Action callback) /// { /// Debug.Log("a mod management event of type " + eventType.ToString() + " has been invoked"); /// } - /// + /// public static Result EnableModManagement( ModManagementEventDelegate modManagementEventDelegate) { @@ -1578,7 +1550,7 @@ public static Result EnableModManagement( /// Disables the mod management system and cancels any ongoing jobs for downloading or /// installing mods. /// - /// + /// /// void Example() /// { /// Result result = ModIOUnity.DisableModManagement(); @@ -1592,7 +1564,7 @@ public static Result EnableModManagement( /// Debug.Log("failed to disable mod management"); /// } /// } - /// + /// public static Result DisableModManagement() { return ModIOUnityImplementation.DisableModManagement(); @@ -1607,7 +1579,7 @@ public static Result DisableModManagement() /// /// /// - /// + /// /// void Example() /// { /// ProgressHandle handle = ModIOUnity.GetCurrentModManagementOperation(); @@ -1621,7 +1593,7 @@ public static Result DisableModManagement() /// Debug.Log("no current mod management operation"); /// } /// } - /// + /// public static ProgressHandle GetCurrentModManagementOperation() { return ModIOUnityImplementation.GetCurrentModManagementOperation(); @@ -1639,7 +1611,7 @@ public static ProgressHandle GetCurrentModManagementOperation() /// /// /// an array of InstalledMod for each existing mod installed on the current device (and not subscribed by the current user) - /// + /// /// void Example() /// { /// InstalledMod[] mods = ModIOUnity.GetSystemInstalledMods(out Result result); @@ -1653,7 +1625,7 @@ public static ProgressHandle GetCurrentModManagementOperation() /// Debug.Log("failed to get installed mods"); /// } /// } - /// + /// public static InstalledMod[] GetSystemInstalledMods(out Result result) { return ModIOUnityImplementation.GetInstalledMods(out result); @@ -1669,7 +1641,7 @@ public static InstalledMod[] GetSystemInstalledMods(out Result result) /// /// /// an array of InstalledModUser for each existing mod installed for the user - /// + /// /// void Example() /// { /// InstalledModUser[] mods = ModIOUnity.GetSystemInstalledModsUser(out Result result); @@ -1683,7 +1655,7 @@ public static InstalledMod[] GetSystemInstalledMods(out Result result) /// Debug.Log("failed to get installed mods"); /// } /// } - /// + /// public static UserInstalledMod[] GetInstalledModsForUser(out Result result, bool includeDisabledMods = false) { return ModIOUnityImplementation.GetInstalledModsForUser(out result, includeDisabledMods); @@ -1709,7 +1681,7 @@ public static UserInstalledMod[] GetInstalledModsForUser(out Result result, bool /// /// /// - /// + /// /// /// ModProfile mod; /// @@ -1726,7 +1698,7 @@ public static UserInstalledMod[] GetInstalledModsForUser(out Result result, bool /// Debug.Log("failed to mark mod for uninstall"); /// } /// } - /// + /// public static Result ForceUninstallMod(ModId modId) { return ModIOUnityImplementation.ForceUninstallMod(modId); @@ -1740,7 +1712,7 @@ public static Result ForceUninstallMod(ModId modId) /// /// /// - /// + /// /// void Example() /// { /// if (ModIOUnity.IsModManagementBusy()) @@ -1752,7 +1724,7 @@ public static Result ForceUninstallMod(ModId modId) /// Debug.Log("mod management is not busy"); /// } /// } - /// + /// public static bool IsModManagementBusy() { return ModIOUnityImplementation.IsModManagementBusy(); @@ -1782,7 +1754,7 @@ public static bool DisableMod(ModId modId) /// /// /// - /// + /// /// void Example() /// { /// var dependencies = new List<ModId> @@ -1805,7 +1777,7 @@ public static bool DisableMod(ModId modId) /// Debug.Log("Failed to add dependencies to mod"); /// } /// } - /// + /// public static void AddDependenciesToMod(ModId modId, ICollection dependencies, Action callback) { ModIOUnityImplementation.AddDependenciesToMod(modId, dependencies, callback); @@ -1826,7 +1798,7 @@ public static void AddDependenciesToMod(ModId modId, ICollection dependen /// /// /// - /// + /// /// void Example() /// { /// var dependencies = new List<ModId> @@ -1849,16 +1821,47 @@ public static void AddDependenciesToMod(ModId modId, ICollection dependen /// Debug.Log("Failed to removed dependencies from mod"); /// } /// } - /// + /// public static void RemoveDependenciesFromMod(ModId modId, ICollection dependencies, Action callback) { ModIOUnityImplementation.RemoveDependenciesFromMod(modId, dependencies, callback); } + /// + /// Stops any current download and starts downloading the selected mod. + /// + /// ModId of the mod you want to remove dependencies from + /// callback with the result of the request + /// + /// + /// + /// + /// ModId modId; + /// void Example() + /// { + /// ModIOUnity.DownloadNow(modId, callback); + /// } + /// + /// void RemoveDependenciesCallback(Result result) + /// { + /// if (result.Succeeded()) + /// { + /// Debug.Log("Successful"); + /// } + /// else + /// { + /// Debug.Log("Failed"); + /// } + /// } + /// + public static void DownloadNow(ModId modId, Action callback) + { + ModIOUnityImplementation.DownloadNow(modId, callback); + } -#endregion // Mod Management + #endregion // Mod Management -#region Mod Uploading + #region Mod Uploading /// /// Gets a token that can be used to create a new mod profile on the mod.io server. @@ -1870,12 +1873,12 @@ public static void RemoveDependenciesFromMod(ModId modId, ICollection dep /// /// /// - /// + /// /// void Example() /// { /// CreationToken token = ModIOUnity.GenerateCreationToken(); /// } - /// + /// public static CreationToken GenerateCreationToken() { return ModIOUnityImplementation.GenerateCreationToken(); @@ -1899,7 +1902,7 @@ public static CreationToken GenerateCreationToken() /// /// /// - /// + /// /// ModId newMod; /// Texture2D logo; /// CreationToken token; @@ -1928,7 +1931,7 @@ public static CreationToken GenerateCreationToken() /// Debug.Log("failed to create new mod profile"); /// } /// } - /// + /// public static void CreateModProfile(CreationToken token, ModProfileDetails modProfileDetails, Action> callback) @@ -1949,7 +1952,7 @@ public static void CreateModProfile(CreationToken token, /// /// /// - /// + /// /// ModId modId; /// /// void Example() @@ -1972,7 +1975,7 @@ public static void CreateModProfile(CreationToken token, /// Debug.Log("failed to edit mod profile"); /// } /// } - /// + /// public static void EditModProfile(ModProfileDetails modProfile, Action callback) { ModIOUnityImplementation.EditModProfile(modProfile, callback); @@ -1985,9 +1988,9 @@ public static void EditModProfile(ModProfileDetails modProfile, Action c /// Uploads are not handled by the mod management system, these are handled separately. /// /// A ProgressHandle informing the upload state and progress. Null if no upload operation is running. - /// + /// /// - /// + /// /// void Example() /// { /// ProgressHandle handle = ModIOUnity.GetCurrentUploadHandle(); @@ -1997,7 +2000,7 @@ public static void EditModProfile(ModProfileDetails modProfile, Action c /// Debug.Log("Current upload progress is: " + handle.Progress.ToString()); /// } /// } - /// + /// public static ProgressHandle GetCurrentUploadHandle() { return ModIOUnityImplementation.GetCurrentUploadHandle(); @@ -2018,9 +2021,9 @@ public static ProgressHandle GetCurrentUploadHandle() /// /// /// - /// + /// /// - /// + /// /// /// ModId modId; /// @@ -2044,10 +2047,10 @@ public static ProgressHandle GetCurrentUploadHandle() /// Debug.Log("failed to upload mod file"); /// } /// } - /// + /// public static void UploadModfile(ModfileDetails modfile, Action callback) { - ModIOUnityImplementation.UploadModfile(modfile, callback); + ModIOUnityImplementation.AddModfile(modfile, callback); } /// @@ -2060,7 +2063,7 @@ public static void UploadModfile(ModfileDetails modfile, Action callback /// /// /// - /// + /// /// ModId modId; /// Texture2D newTexture; /// @@ -2084,12 +2087,30 @@ public static void UploadModfile(ModfileDetails modfile, Action callback /// Debug.Log("failed to uploaded mod logo"); /// } /// } - /// + /// public static void UploadModMedia(ModProfileDetails modProfileDetails, Action callback) { ModIOUnityImplementation.UploadModMedia(modProfileDetails, callback); } + /// + ///

Reorder a mod's gallery images. must represent every entry in (or any of the size-variant arrays) or the operation will fail.

+ ///

The provided is invoked with the updated .

+ ///
+ public static void ReorderModMedia(ModId modId, string[] orderedFilenames, Action> callback) + { + ModIOUnityImplementation.ReorderModMedia(modId, orderedFilenames, callback); + } + + /// + ///

Delete gallery images from a mod. Filenames can be sourced from (or any of the size-variant arrays).

+ ///

The provided is invoked with the updated .

+ ///
+ public static void DeleteModMedia(ModId modId, string[] filenames, Action> callback) + { + ModIOUnityImplementation.DeleteModMedia(modId, filenames, callback); + } + /// /// Removes a mod from being visible on the mod.io server. /// @@ -2102,7 +2123,7 @@ public static void UploadModMedia(ModProfileDetails modProfileDetails, Action /// /// - /// + /// /// /// ModId modId; /// @@ -2122,7 +2143,7 @@ public static void UploadModMedia(ModProfileDetails modProfileDetails, Action + /// public static void ArchiveModProfile(ModId modId, Action callback) { ModIOUnityImplementation.ArchiveModProfile(modId, callback); @@ -2150,7 +2171,7 @@ public static void GetCurrentUserCreations(SearchFilter filter, Action /// /// - /// + /// /// /// ModId modId; /// string[] tags; @@ -2171,7 +2192,7 @@ public static void GetCurrentUserCreations(SearchFilter filter, Action + /// public static void AddTags(ModId modId, string[] tags, Action callback) { ModIOUnityImplementation.AddTags(modId, tags, callback); @@ -2193,7 +2214,7 @@ public static void AddTags(ModId modId, string[] tags, Action callback) /// /// /// - /// + /// /// ModId modId; /// /// void Example() @@ -2213,7 +2234,7 @@ public static void AddTags(ModId modId, string[] tags, Action callback) /// Debug.Log("failed to add comment"); /// } /// } - /// + /// public static void AddModComment(ModId modId, CommentDetails commentDetails, Action> callback) { ModIOUnityImplementation.AddModComment(modId, commentDetails, callback); @@ -2231,7 +2252,7 @@ public static void AddModComment(ModId modId, CommentDetails commentDetails, Act /// /// /// - /// + /// ///private ModId modId; ///private long commentId; /// @@ -2251,7 +2272,7 @@ public static void AddModComment(ModId modId, CommentDetails commentDetails, Act /// Debug.Log("failed to delete comment"); /// } /// } - /// + /// public static void DeleteModComment(ModId modId, long commentId, Action callback) { ModIOUnityImplementation.DeleteModComment(modId, commentId, callback); @@ -2267,7 +2288,7 @@ public static void DeleteModComment(ModId modId, long commentId, Action /// /// /// - /// + /// /// private string content = "This is a Comment"; /// long commentId = 12345; /// ModId modId = (ModId)1234; @@ -2288,7 +2309,7 @@ public static void DeleteModComment(ModId modId, long commentId, Action /// Debug.Log("Failed to Update Comment!"); /// } /// } - /// + /// public static void UpdateModComment(ModId modId, string content, long commentId, Action> callback) { ModIOUnityImplementation.UpdateModComment(modId, content, commentId, callback); @@ -2304,7 +2325,7 @@ public static void UpdateModComment(ModId modId, string content, long commentId, /// /// /// - /// + /// /// /// ModId modId; /// string[] tags; @@ -2325,14 +2346,251 @@ public static void UpdateModComment(ModId modId, string content, long commentId, /// Debug.Log("failed to delete tags"); /// } /// } - /// + /// public static void DeleteTags(ModId modId, string[] tags, Action callback) { ModIOUnityImplementation.DeleteTags(modId, tags, callback); } + #endregion // Mod Uploading -#region Media Download + #region Multipart + /// + /// Get all upload sessions belonging to the authenticated user for the corresponding mod. Successful request will return an + /// array of Multipart Upload Part Objects. We recommended reading the filtering documentation to return only the records you want. + /// The Mutlipart feature is automatically used when uploading a mod via UploadModFile and is limited to one upload at a time. + /// This function is optional and is provided to allow for more control over uploading large files for those who require it. + /// + /// the id of the mod + /// The filter to apply when searching through comments (can only apply + /// pagination parameters, Eg. page size and page index) + /// a callback with the Result of the operation + /// + /// + /// + /// + /// ModId modId; + /// SearchFilter filter; + /// + /// private void Example() + /// { + /// ModIOUnity.GetMultipartUploadSessions(modId, filter, Callback); + /// } + /// void Callback(ResultAnd<MultipartUploadSessionsObject> response) + /// { + /// if (response.result.Succeeded()) + /// { + /// Debug.Log("Received Upload Sessions"); + /// } + /// else + /// { + /// Debug.Log("Failed to get Upload Sessions"); + /// } + /// } + /// + public static void GetMultipartUploadSessions(ModId modId, SearchFilter filter, Action>> callback) + { + ModIOUnityImplementation.GetMultipartUploadSessions(modId, filter, callback); + } + + /// + /// Get all uploaded parts for a corresponding upload session. Successful request will return an array of Multipart + /// Upload Part Objects.We recommended reading the filtering documentation to return only the records you want. + /// The Mutlipart feature is automatically used when uploading a mod via UploadModFile and is limited to one upload at a time. + /// This function is optional and is provided to allow for more control over uploading large files for those who require it. + /// + /// the id of the mod + /// A universally unique identifier (UUID) that represents the upload session. + /// The filter to apply when searching through comments (can only apply + /// pagination parameters, Eg. page size and page index) + /// a callback with the Result of the operation + /// + /// + /// + /// + /// ModId modId; + /// string uploadId; + /// SearchFilter filter; + /// + /// private void Example() + /// { + /// ModIOUnity.GetMultipartUploadParts(modId, uploadId, filter, Callback); + /// } + /// void Callback(ResultAnd<MultipartUploadSessionsObject> response) + /// { + /// if (response.result.Succeeded()) + /// { + /// Debug.Log("Received Upload Sessions Object"); + /// } + /// else + /// { + /// Debug.Log("Failed to get Upload Sessions Object"); + /// } + /// } + /// + public static void GetMultipartUploadParts(ModId modId, string uploadId, SearchFilter filter, Action>> callback) + { + ModIOUnityImplementation.GetMultipartUploadParts(modId, uploadId, filter, callback); + } + + /// + /// Add a new multipart upload part to an existing upload session. All parts must be exactly 50MB (Mebibyte) in size unless it is the + /// final part which can be smaller. A successful request will return a single Multipart Upload Part Object. + /// NOTE: Unlike other POST endpoints on this service, the body of this request should contain no form parameters and instead be the data + /// described in the byte range of the Content-Range header of the request. + /// The Mutlipart feature is automatically used when uploading a mod via UploadModFile and is limited to one upload at a time. + /// This function is optional and is provided to allow for more control over uploading large files for those who require it. + /// + /// the id of the mod + /// A universally unique identifier (UUID) that represents the upload session. + /// The Content-Range of the file you are sending. + /// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Range + /// Optional Digest for part integrity checks once the part has been uploaded. + /// Bytes for the file part to be uploaded + /// a callback with the Result of the operation + /// + /// + /// + /// ModId modId; + /// string uploadId; + /// string contentRange; + /// string digest; + /// byte[] rawBytes; + /// + /// private void Example() + /// { + /// ModIOUnity.AddMultipartUploadParts(modId, uploadId, contentRange, digest, rawBytes, Callback); + /// } + /// void Callback(Result result) + /// { + /// if (result.Succeeded()) + /// { + /// Debug.Log("Added a part to Upload Session"); + /// } + /// else + /// { + /// Debug.Log("Failed to add a part to Upload Session"); + /// } + /// } + /// + public static void AddMultipartUploadParts(ModId modId, string uploadId, string contentRange, string digest, byte[] rawBytes, Action callback) + { + ModIOUnityImplementation.AddMultipartUploadParts(modId, uploadId, contentRange, digest, rawBytes, callback); + } + + /// + /// Create a new multipart upload session. A successful request will return a single Multipart Upload Object. + /// NOTE: The multipart upload system is designed for uploading large files up to 20GB in size. If uploading + /// files less than 100MB, we recommend using the Add Modfile endpoint. + /// The Mutlipart feature is automatically used when uploading a mod via UploadModFile and is limited to one upload at a time. + /// This function is optional and is provided to allow for more control over uploading large files for those who require it. + /// + /// the id of the mod + /// An optional nonce to provide to prevent duplicate upload sessions from being created concurrently. Maximum of 64 characters. + /// The filename of the file once all the parts have been uploaded. The filename must include the .zip extension and cannot exceed 100 characters. + /// a callback with the Result of the operation + /// + /// + /// + /// ModId modId; + /// string filename; + /// string nonce; + /// + /// private void Example() + /// { + /// ModIOUnity.CreateMultipartUploadSession(modId, filename, nonce, Callback); + /// } + /// void Callback(ResultAnd<MultipartUploadObject> response) + /// { + /// if (response.result.Succeeded()) + /// { + /// Debug.Log("Created Upload Session"); + /// } + /// else + /// { + /// Debug.Log("Failed to Create Upload Session"); + /// } + /// } + /// + public static void CreateMultipartUploadSession(ModId modId, string filename, string nonce = null, Action> callback = null) + { + ModIOUnityImplementation.CreateMultipartUploadSession(modId, filename, nonce, callback); + } + + /// + /// Terminate an active multipart upload session, a successful request will return 204 No Content. + /// The Mutlipart feature is automatically used when uploading a mod via UploadModFile and is limited to one upload at a time. + /// This function is optional and is provided to allow for more control over uploading large files for those who require it. + /// + /// the id of the mod + /// A universally unique identifier (UUID) that represents the upload session. + /// a callback with the Result of the operation + /// + /// + /// + /// ModId modId; + /// string uploadId; + /// + /// private void Example() + /// { + /// ModIOUnity.DeleteMultipartUploadSession(modId, uploadId, Callback); + /// } + /// void Callback(Result result) + /// { + /// if (result.Succeeded()) + /// { + /// Debug.Log("Deleted Upload Session"); + /// } + /// else + /// { + /// Debug.Log("Failed to Delete Upload Session"); + /// } + /// } + /// + public static void DeleteMultipartUploadSession(ModId modId, string uploadId, Action callback) + { + ModIOUnityImplementation.DeleteMultipartUploadSession(modId, uploadId, callback); + } + + /// + /// Complete an active multipart upload session, this endpoint assumes that you have already uploaded all individual parts. + /// A successful request will return a 200 OK response code and return a single Multipart Upload Object. + /// The Mutlipart feature is automatically used when uploading a mod via UploadModFile and is limited to one upload at a time. + /// This function is optional and is provided to allow for more control over uploading large files for those who require it. + /// + /// the id of the mod + /// A universally unique identifier (UUID) that represents the upload session. + /// a callback with the Result of the operation + /// + /// + /// + /// ModId modId; + /// string uploadId; + /// + /// private void Example() + /// { + /// ModIOUnity.CompleteMultipartUploadSession(modId, uploadId, Callback); + /// } + /// void Callback(Result result) + /// { + /// if (result.Succeeded()) + /// { + /// Debug.Log("Completed Session"); + /// } + /// else + /// { + /// Debug.Log("Failed to complete session"); + /// } + /// } + /// + public static void CompleteMultipartUploadSession(ModId modId, string uploadId, Action callback) + { + ModIOUnityImplementation.CompleteMultipartUploadSession(modId, uploadId, callback); + } + + #endregion + + #region Media Download /// /// Downloads a texture based on the specified download reference. @@ -2346,7 +2604,7 @@ public static void DeleteTags(ModId modId, string[] tags, Action callbac /// /// /// - /// + /// /// /// ModProfile mod; /// @@ -2366,7 +2624,7 @@ public static void DeleteTags(ModId modId, string[] tags, Action callbac /// Debug.Log("failed to download the mod logo texture"); /// } /// } - /// + /// #if UNITY_2019_4_OR_NEWER public static void DownloadTexture(DownloadReference downloadReference, Action> callback) @@ -2380,9 +2638,9 @@ public static void DownloadImage(DownloadReference downloadReference, ModIOUnityImplementation.DownloadImage(downloadReference, callback); } -#endregion // Media Download + #endregion // Media Download -#region Reporting + #region Reporting /// /// Reports a specified mod to mod.io. @@ -2392,7 +2650,7 @@ public static void DownloadImage(DownloadReference downloadReference, /// /// /// - /// + /// /// void Example() /// { /// Report report = new Report(new ModId(123), @@ -2415,13 +2673,169 @@ public static void DownloadImage(DownloadReference downloadReference, /// Debug.Log("failed to send a report"); /// } /// } - /// + /// public static void Report(Report report, Action callback) { ModIOUnityImplementation.Report(report, callback); } -#endregion // Reporting + #endregion // Reporting + + #region Monetization + + public static void GetTokenPacks(Action> callback) => ModIOUnityImplementation.GetTokenPacks(callback); + + /// + /// Convert an in-game consumable that a user has purchased on Steam, Xbox, or Psn into a users + /// mod.io inventory. This endpoint will consume the entitlement on behalf of the user against + /// the portal in which the entitlement resides (i.e. Steam, Xbox, Psn). + /// + /// a callback with the Result of the operation + /// + /// + /// + /// + /// + /// private void Example(string token) + /// { + /// ModIOUnity.SyncEntitlements(token); + /// } + /// void Callback(ResultAnd<Entitlement[]> response) + /// { + /// if (response.result.Succeeded()) + /// { + /// Debug.Log("Sync Entitlements Success"); + /// } + /// else + /// { + /// Debug.Log("Failed to Sync Entitlements"); + /// } + /// } + /// + public static void SyncEntitlements(Action> callback) + { + ModIOUnityImplementation.SyncEntitlements(callback); + } + + /// + /// Complete a marketplace purchase. A Successful request will return the newly created Checkout + /// Process Object. Parameter|Type|Required|Description ---|---|---|---| transaction_id|integer|true|The id + /// of the transaction to complete. mod_id|integer|true|The id of the mod associated to this transaction. + /// display_amount|integer|true|The expected amount of the transaction to confirm the displayed amount matches + /// the actual amount. + /// + /// The id of the mod the user wants to purchase. + /// The amount that was shown to the user for the purchase. + /// A unique string. Must be alphanumeric and cannot contain unique characters except for - + /// callback with the result of the operation + /// + /// + /// + /// string idempotent = $"aUniqueKey"; + /// ModId modId = 1234; + /// int displayAmount = 12; + /// + /// void Example() + /// { + /// ModIOUnity.PurchaseMod(modId, displayAmount, idempotent, Callback); + /// } + /// + /// void Callback(Result result) + /// { + /// if (result.Succeeded()) + /// { + /// Debug.Log("Completed Purchase"); + /// } + /// else + /// { + /// Debug.Log("failed to complete purchase"); + /// } + /// } + /// + public static void PurchaseMod(ModId modId, int displayAmount, string idempotent, Action> callback) + { + ModIOUnityImplementation.PurchaseMod(modId, displayAmount, idempotent, callback); + } + + /// + /// Retrieves all of the purchased mods for the current user. + /// + /// an out parameter for whether or not the method succeeded + /// + /// + /// an array of the user's purchased mods + /// + /// void Example() + /// { + /// ModProfile[] mods = ModIOUnity.GetPurchasedMods(out Result result); + /// + /// if (result.Succeeded()) + /// { + /// Debug.Log("user has " + mods.Length + " purchased mods"); + /// } + /// else + /// { + /// Debug.Log("failed to get purchased mods"); + /// } + /// } + /// + public static ModProfile[] GetPurchasedMods(out Result result) + { + return ModIOUnityImplementation.GetPurchasedMods(out result); + } + + /// + /// Get user's wallet balance + /// + /// callback with the result of the operation + /// + /// + /// + /// void Example() + /// { + /// ModIOUnity.GetUserWalletBalance(filter, Callback); + /// } + /// + /// void Callback(Result result) + /// { + /// if (result.Succeeded()) + /// { + /// Debug.Log("Get balance Success"); + /// } + /// else + /// { + /// Debug.Log("failed to get balance"); + /// } + /// } + /// + public static void GetUserWalletBalance(Action> callback) + { + ModIOUnityImplementation.GetUserWalletBalance(callback); + } + + /// + /// Get all for a specific mod + /// + /// The mod to get users for + /// callback with the result of the operation + public static void GetModMonetizationTeam(ModId modId, Action> callback) + { + ModIOUnityImplementation.GetModMonetizationTeam(callback, modId); + } + + + /// + /// Set all for a specific mod + /// + /// The mod to set users for + /// All users and their splits + /// callback with the result of the operation + public static void AddModMonetizationTeam(ModId modId, ICollection team, Action callback) + { + ModIOUnityImplementation.AddModMonetizationTeam(callback, modId, team); + } + #endregion + } } diff --git a/Runtime/ModIOUnityAsync.cs b/Runtime/ModIOUnityAsync.cs index 7b2630b..3f82006 100644 --- a/Runtime/ModIOUnityAsync.cs +++ b/Runtime/ModIOUnityAsync.cs @@ -1,102 +1,58 @@ -using System.Collections.Generic; -using ModIO.Implementation; -using UnityEngine; -using System.Threading.Tasks; +using ModIO.Implementation; using ModIO.Implementation.API.Objects; +using ModIO.Implementation.API.Requests; +using System.Collections.Generic; +using System.Threading.Tasks; +using UnityEngine; #pragma warning disable 4014 // Ignore warnings about calling async functions from non-async code namespace ModIO { - /// - /// Main async interface for the mod.io Unity plugin. Every method within - /// ModIOUnity.cs that has a callback can also be found in ModIOUnityAsync with an asynchronous - /// alternative method (if you'd rather not use callbacks). - /// + /// Main async interface for the mod.io Unity plugin. + /// Every method has a callback alternative in . /// public static class ModIOUnityAsync { -#region Initialization and Maintenance + #region Initialization and Maintenance - /// - /// Cancels any running public operations, frees plugin resources, and invokes - /// any pending callbacks with a cancelled result code. - /// - /// - /// pending operations during a shutdown can be checked with - /// Result.IsCancelled() - /// + /// Cancels all public operations, frees plugin resources and invokes any pending callbacks with a cancelled result code. + /// Result.IsCancelled() can be used to determine if it was cancelled due to a shutdown operation. + /// + /// await ModIOUnityAsync.Shutdown(); + /// Debug.Log("Plugin shutdown complete"); + /// /// - /// - /// async void Example() - /// { - /// await ModIOUnityAsync.Shutdown(); - /// Debug.Log("Finished shutting down the ModIO Plugin"); - /// } - /// - public static async Task Shutdown() - { - await ModIOUnityImplementation.Shutdown(() => { }); - } + public static async Task Shutdown() => await ModIOUnityImplementation.Shutdown(() => { }); -#endregion // Initialization and Maintenance + #endregion // Initialization and Maintenance -#region Authentication + #region Authentication - /// - /// This begins listening for an external login attempt. Once successfully connecting to the - /// mod.io server, it will return the which contains a - /// code and url that can be displayed to your user. They can then go to the url on a - /// separate device and enter the code. Once they've done that, the - /// will complete. - /// - /// Once you receive the token you can cancel the request at anytime with . - /// Also, the user has 15 minutes before the request times out and you'll need to start again - /// - /// - /// - /// - /// - /// - /// ExternalAuthenticationToken token; - /// - /// async void Example() + /// Listen for an external login attempt. Returns an that includes the url and code to display to the user. ExternalAuthenticationToken.task will complete once the user enters the code. + /// The request will time out after 15 minutes. You can cancel it at any time using token.Cancel(). + /// + /// var response = await ModIOUnityAsync.RequestExternalAuthentication(); + /// if (!response.result.Succeeded()) /// { - /// var response = await ModIOUnityAsync.RequestExternalAuthentication(ReceiveToken); - /// - /// if (response.result.Succeeded()) - /// { - /// // Cache the token in case we want to cancel it - /// token = response.value; + /// Debug.Log($"RequestExternalAuthentication failed: {response.result.message}"); /// - /// // Wait for the user to authenticate externally - /// Result result = await token.task; - /// - /// if (result.Succeeded()) - /// { - /// Debug.Log("You have successfully authenticated the user"); - /// } - /// else - /// { - /// Debug.Log("Failed to authenticate (possibly timed out)"); - /// } - /// } - /// else - /// { - /// Debug.Log("Failed to connect to mod.io"); - /// } - /// } - /// - /// void StopAuthentication() - /// { - /// token.Cancel(); + /// return; /// } - /// - public static async Task> RequestExternalAuthentication() - { - return await ModIOUnityImplementation.BeginWssAuthentication(); - } - + ///
+ /// var token = response.value; // Call token.Cancel() to cancel the authentication + ///
+ /// Debug.Log($"Go to {token.url} in your browser and enter '{token.code}' to login."); + ///
+ /// Result resultToken = await token.task; + ///
+ /// Debug.Log(resultToken.Succeeded() ? "Authentication successful" : "Authentication failed (possibly timed out)"); + ///
+ /// + /// + /// + public static async Task> RequestExternalAuthentication() => await ModIOUnityImplementation.BeginWssAuthentication(); + /// /// Sends an email with a security code to the specified Email Address. The security code /// is then used to Authenticate the user session using ModIOUnity.SubmitEmailSecurityCode() @@ -111,7 +67,7 @@ public static async Task> RequestExternal /// the Email Address to send the security code to, eg "JohnDoe@gmail.com" /// /// - /// + /// /// async void Example() /// { /// Result result = await ModIOUnityAsync.RequestAuthenticationEmail("johndoe@gmail.com"); @@ -125,7 +81,7 @@ public static async Task> RequestExternal /// Debug.Log("Failed to send security code to that email address"); /// } /// } - /// + /// public static async Task RequestAuthenticationEmail(string emailaddress) { return await ModIOUnityImplementation.RequestEmailAuthToken(emailaddress); @@ -142,7 +98,7 @@ public static async Task RequestAuthenticationEmail(string emailaddress) /// The security code received from an authentication email /// /// - /// + /// /// async void Example(string userSecurityCode) /// { /// Result result = await ModIOUnityAsync.SubmitEmailSecurityCode(userSecurityCode); @@ -156,12 +112,12 @@ public static async Task RequestAuthenticationEmail(string emailaddress) /// Debug.Log("Failed to authenticate the user"); /// } /// } - /// + /// public static async Task SubmitEmailSecurityCode(string securityCode) { return await ModIOUnityImplementation.SubmitEmailSecurityCode(securityCode); } -/// + /// /// This retrieves the terms of use text to be shown to the user to accept/deny before /// authenticating their account via a third party provider, eg steam or google. /// @@ -180,7 +136,7 @@ public static async Task SubmitEmailSecurityCode(string securityCode) /// /// /// - /// + /// /// async void Example() /// { /// ResultAnd<TermsOfUser> response = await ModIOUnityAsync.GetTermsOfUse(); @@ -194,7 +150,7 @@ public static async Task SubmitEmailSecurityCode(string securityCode) /// Debug.Log("Failed to retrieve the terms of use"); /// } /// } - /// + /// public static async Task> GetTermsOfUse() { return await ModIOUnityImplementation.GetTermsOfUse(); @@ -208,10 +164,10 @@ public static async Task> GetTermsOfUse() /// method. /// /// the user's steam token - /// the user's email address + /// the user's email address (Can be null) /// the TermsHash retrieved from ModIOUnity.GetTermsOfUse() /// - /// + /// /// // First we get the Terms of Use to display to the user and cache the hash /// async void GetTermsOfUse_Example() /// { @@ -244,7 +200,7 @@ public static async Task> GetTermsOfUse() /// Debug.Log("Failed to authenticate"); /// } /// } - /// + /// public static async Task AuthenticateUserViaSteam(string steamToken, string emailAddress, TermsHash? hash) @@ -258,11 +214,11 @@ public static async Task AuthenticateUserViaSteam(string steamToken, /// Attempts to authenticate a user via the epic API. /// /// the user's epic token - /// the user's email address + /// the user's email address (Can be null) /// the TermsHash retrieved from ModIOUnity.GetTermsOfUse() /// /// - /// + /// /// // First we get the Terms of Use to display to the user and cache the hash /// async void GetTermsOfUse_Example() /// { @@ -295,7 +251,7 @@ public static async Task AuthenticateUserViaSteam(string steamToken, /// Debug.Log("Failed to authenticate"); /// } /// } - /// + /// public static async Task AuthenticateUserViaEpic(string epicToken, string emailAddress, TermsHash? hash) @@ -313,11 +269,11 @@ public static async Task AuthenticateUserViaEpic(string epicToken, /// method. /// /// the user's authcode token - /// the user's email address + /// the user's email address (Can be null) /// the TermsHash retrieved from ModIOUnity.GetTermsOfUse() /// the PSN account environment /// - /// + /// /// // First we get the Terms of Use to display to the user and cache the hash /// async void GetTermsOfUse_Example() /// { @@ -350,7 +306,7 @@ public static async Task AuthenticateUserViaEpic(string epicToken, /// Debug.Log("Failed to authenticate"); /// } /// } - /// + /// public static async Task AuthenticateUserViaPlayStation(string authCode, string emailAddress, TermsHash? hash, @@ -369,10 +325,10 @@ public static async Task AuthenticateUserViaPlayStation(string authCode, /// method. /// /// the user's steam token - /// the user's email address + /// the user's email address (Can be null) /// the TermsHash retrieved from ModIOUnity.GetTermsOfUse() /// - /// + /// /// // First we get the Terms of Use to display to the user and cache the hash /// async void GetTermsOfUse_Example() /// { @@ -405,7 +361,7 @@ public static async Task AuthenticateUserViaPlayStation(string authCode, /// Debug.Log("Failed to authenticate"); /// } /// } - /// + /// public static async Task AuthenticateUserViaGOG(string gogToken, string emailAddress, TermsHash? hash) { @@ -421,10 +377,10 @@ public static async Task AuthenticateUserViaGOG(string gogToken, string /// method. /// /// the user's steam token - /// the user's email address + /// the user's email address (Can be null) /// the TermsHash retrieved from ModIOUnity.GetTermsOfUse() /// - /// + /// /// // First we get the Terms of Use to display to the user and cache the hash /// async void GetTermsOfUse_Example() /// { @@ -457,7 +413,7 @@ public static async Task AuthenticateUserViaGOG(string gogToken, string /// Debug.Log("Failed to authenticate"); /// } /// } - /// + /// public static async Task AuthenticateUserViaItch(string itchioToken, string emailAddress, TermsHash? hash) @@ -475,10 +431,10 @@ public static async Task AuthenticateUserViaItch(string itchioToken, /// method. /// /// the user's steam token - /// the user's email address + /// the user's email address (Can be null) /// the TermsHash retrieved from ModIOUnity.GetTermsOfUse() /// - /// + /// /// // First we get the Terms of Use to display to the user and cache the hash /// async void GetTermsOfUse_Example() /// { @@ -511,7 +467,7 @@ public static async Task AuthenticateUserViaItch(string itchioToken, /// Debug.Log("Failed to authenticate"); /// } /// } - /// + /// public static async Task AuthenticateUserViaXbox(string xboxToken, string emailAddress, TermsHash? hash) @@ -528,10 +484,10 @@ public static async Task AuthenticateUserViaXbox(string xboxToken, /// method. /// /// the user's steam token - /// the user's email address + /// the user's email address (Can be null) /// the TermsHash retrieved from ModIOUnity.GetTermsOfUse() /// - /// + /// /// // First we get the Terms of Use to display to the user and cache the hash /// async void GetTermsOfUse_Example() /// { @@ -564,7 +520,7 @@ public static async Task AuthenticateUserViaXbox(string xboxToken, /// Debug.Log("Failed to authenticate"); /// } /// } - /// + /// public static async Task AuthenticateUserViaSwitch(string switchToken, string emailAddress, TermsHash? hash) @@ -582,10 +538,10 @@ public static async Task AuthenticateUserViaSwitch(string switchToken, /// method. /// /// the user's steam token - /// the user's email address + /// the user's email address (Can be null) /// the TermsHash retrieved from ModIOUnity.GetTermsOfUse() /// - /// + /// /// // First we get the Terms of Use to display to the user and cache the hash /// async void GetTermsOfUse_Example() /// { @@ -618,7 +574,7 @@ public static async Task AuthenticateUserViaSwitch(string switchToken, /// Debug.Log("Failed to authenticate"); /// } /// } - /// + /// public static async Task AuthenticateUserViaDiscord(string discordToken, string emailAddress, TermsHash? hash) @@ -636,10 +592,10 @@ public static async Task AuthenticateUserViaDiscord(string discordToken, /// method. /// /// the user's steam token - /// the user's email address + /// the user's email address (Can be null) /// the TermsHash retrieved from ModIOUnity.GetTermsOfUse() /// - /// + /// /// // First we get the Terms of Use to display to the user and cache the hash /// async void GetTermsOfUse_Example() /// { @@ -672,7 +628,7 @@ public static async Task AuthenticateUserViaDiscord(string discordToken, /// Debug.Log("Failed to authenticate"); /// } /// } - /// + /// public static async Task AuthenticateUserViaGoogle(string googleToken, string emailAddress, TermsHash? hash) @@ -693,10 +649,10 @@ public static async Task AuthenticateUserViaGoogle(string googleToken, /// the device you're authenticating on /// the nonce /// the user id - /// the user's email address + /// the user's email address (Can be null) /// the TermsHash retrieved from ModIOUnity.GetTermsOfUse() /// - /// + /// /// // First we get the Terms of Use to display to the user and cache the hash /// async void GetTermsOfUse_Example() /// { @@ -734,7 +690,7 @@ public static async Task AuthenticateUserViaGoogle(string googleToken, /// Debug.Log("Failed to authenticate"); /// } /// } - /// + /// public static async Task AuthenticateUserViaOculus(OculusDevice oculusDevice, string nonce, long userId, string oculusToken, string emailAddress, @@ -745,11 +701,72 @@ public static async Task AuthenticateUserViaOculus(OculusDevice oculusDe oculusDevice, userId.ToString(), 0); } + /// + /// Attempts to authenticate a user on behalf of an OpenID identity provider. To use this + /// method of authentication, you must configure the OpenID config in your games + /// authentication admin page. + /// NOTE: The ability to authenticate players using your identity provider is a feature for + /// advanced partners only. If you are interested in becoming an advanced partner, please + /// contact us. + /// + /// + /// You will first need to get the terms of use and hash from the ModIOUnity.GetTermsOfUse() + /// method. + /// + /// the user's id token + /// the user's email address + /// the TermsHash retrieved from ModIOUnity.GetTermsOfUse() + /// + /// + /// // First we get the Terms of Use to display to the user and cache the hash + /// async void GetTermsOfUse_Example() + /// { + /// ResultAnd<TermsOfUser> response = await ModIOUnityAsync.GetTermsOfUse(); + /// + /// if (response.result.Succeeded()) + /// { + /// Debug.Log("Successfully retrieved the terms of use: " + response.value.termsOfUse); + /// + /// // Cache the terms of use (which has the hash for when we attempt to authenticate) + /// modIOTermsOfUse = response.value; + /// } + /// else + /// { + /// Debug.Log("Failed to retrieve the terms of use"); + /// } + /// } + /// + /// // Once we have the Terms of Use and hash we can attempt to authenticate + /// async void Authenticate_Example() + /// { + /// Result result = await ModIOUnityAsync.AuthenticateUserViaOpenId(idToken, + /// "johndoe@gmail.com", + /// modIOTermsOfUse.hash); + /// + /// if (result.Succeeded()) + /// { + /// Debug.Log("Successfully authenticated user"); + /// } + /// else + /// { + /// Debug.Log("Failed to authenticate"); + /// } + /// } + /// + public static async Task AuthenticateUserViaOpenId(string idToken, + string emailAddress, + TermsHash? hash) + { + return await ModIOUnityImplementation.AuthenticateUser( + idToken, AuthenticationServiceProvider.OpenId, emailAddress, hash, null, + null, null, 0); + } + /// /// Informs you if the current user session is authenticated or not. /// /// - /// + /// /// async void Example() /// { /// Result result = await ModIOUnityAsync.IsAuthenticated(); @@ -763,15 +780,15 @@ public static async Task AuthenticateUserViaOculus(OculusDevice oculusDe /// Debug.Log("current session is not authenticated"); /// } /// } - /// + /// public static async Task IsAuthenticated() { return await ModIOUnityImplementation.IsAuthenticated(); } -#endregion // Authentication + #endregion // Authentication -#region Mod Browsing + #region Mod Browsing /// /// Gets the existing tags for the current game Id that can be used when searching/filtering @@ -784,7 +801,7 @@ public static async Task IsAuthenticated() /// /// /// - /// + /// /// async void Example() /// { /// ResultAnd<TagCategory[]> response = await ModIOUnityAsync.GetTagCategories(); @@ -804,7 +821,7 @@ public static async Task IsAuthenticated() /// Debug.Log("failed to get game tags"); /// } /// } - /// + /// public static async Task> GetTagCategories() { return await ModIOUnityImplementation.GetGameTags(); @@ -826,7 +843,7 @@ public static async Task> GetTagCategories() /// /// /// - /// + /// /// async void Example() /// { /// SearchFilter filter = new SearchFilter(); @@ -843,7 +860,7 @@ public static async Task> GetTagCategories() /// Debug.Log("failed to get mods"); /// } /// } - /// + /// public static async Task> GetMods(SearchFilter filter) { return await ModIOUnityImplementation.GetMods(filter); @@ -860,7 +877,7 @@ public static async Task> GetMods(SearchFilter filter) /// /// /// - /// + /// /// async void Example() /// { /// ModId modId = new ModId(1234); @@ -875,20 +892,21 @@ public static async Task> GetMods(SearchFilter filter) /// Debug.Log("failed to get mod"); /// } /// } - /// + /// public static async Task> GetMod(ModId modId) { return await ModIOUnityImplementation.GetMod(modId.id); } - + public static Task> GetModSkipCache(ModId modId) => ModIOUnityImplementation.GetModSkipCache(modId.id); /// /// Get all comments posted in the mods profile. Successful request will return an array of /// Comment Objects. We recommended reading the filtering documentation to return only the /// records you want. /// - /// The filter to apply when searching through comments (can only apply + /// the ModId of the comments to get + /// The filter to apply when searching through comments (can only apply /// pagination parameters, Eg. page size and page index) /// /// @@ -914,7 +932,7 @@ public static async Task> GetModComments(ModId modId, Sea /// /// /// - /// + /// /// async void Example() /// { /// ModId modId = new ModId(1234); @@ -930,7 +948,7 @@ public static async Task> GetModComments(ModId modId, Sea /// Debug.Log("failed to get mod dependencies"); /// } /// } - /// + /// /// /// /// @@ -950,7 +968,7 @@ public static async Task> AddModComment(ModId modId, Comme /// /// /// - /// + /// ///private ModId modId; ///private long commentId; /// @@ -966,12 +984,12 @@ public static async Task> AddModComment(ModId modId, Comme /// Debug.Log("failed to delete comment"); /// } ///} - /// + /// public static async Task DeleteModComment(ModId modId, long commentId) { return await ModIOUnityImplementation.DeleteModComment(modId, commentId); } - + /// /// Update a comment for the corresponding mod. Successful request will return the updated Comment Object. /// @@ -981,7 +999,7 @@ public static async Task DeleteModComment(ModId modId, long commentId) /// /// /// - /// + /// /// private string content = "This is a Comment"; /// long commentId = 12345; /// ModId modId = (ModId)1234; @@ -999,7 +1017,7 @@ public static async Task DeleteModComment(ModId modId, long commentId) /// Debug.Log("Failed to Update Comment!"); /// } /// } - /// + /// public static async Task> UpdateModComment(ModId modId, string content, long commentId) { return await ModIOUnityImplementation.UpdateModComment(modId, content, commentId); @@ -1019,7 +1037,7 @@ public static async Task> GetModDependencies(ModId /// /// /// - /// + /// /// async void Example() /// { /// ResultAnd<Rating[]> response = await ModIOUnityAsync.GetCurrentUserRatings(); @@ -1036,7 +1054,7 @@ public static async Task> GetModDependencies(ModId /// Debug.Log("failed to get ratings"); /// } /// } - /// + /// public static async Task> GetCurrentUserRatings() { return await ModIOUnityImplementation.GetCurrentUserRatings(); @@ -1052,7 +1070,7 @@ public static async Task> GetCurrentUserRatings() /// /// /// - /// + /// /// async void Example() /// { /// ModId modId = new ModId(1234); @@ -1067,15 +1085,15 @@ public static async Task> GetCurrentUserRatings() /// Debug.Log("failed to get rating"); /// } /// } - /// + /// public static async Task> GetCurrentUserRatingFor(ModId modId) { return await ModIOUnityImplementation.GetCurrentUserRatingFor(modId); } -#endregion // Mod Browsing + #endregion // Mod Browsing -#region User Management + #region User Management /// /// Used to submit a rating for a specified mod. /// @@ -1087,7 +1105,7 @@ public static async Task> GetCurrentUserRatingFor(ModId mod /// /// /// - /// + /// /// /// ModProfile mod; /// @@ -1104,7 +1122,7 @@ public static async Task> GetCurrentUserRatingFor(ModId mod /// Debug.Log("Failed to rate mod"); /// } /// } - /// + /// public static async Task RateMod(ModId modId, ModRating rating) { return await ModIOUnityImplementation.AddModRating(modId, rating); @@ -1122,7 +1140,7 @@ public static async Task RateMod(ModId modId, ModRating rating) /// /// /// - /// + /// /// /// ModProfile mod; /// @@ -1139,7 +1157,7 @@ public static async Task RateMod(ModId modId, ModRating rating) /// Debug.Log("Failed to subscribe to mod"); /// } /// } - /// + /// public static async Task SubscribeToMod(ModId modId) { return await ModIOUnityImplementation.SubscribeTo(modId); @@ -1157,7 +1175,7 @@ public static async Task SubscribeToMod(ModId modId) /// /// /// - /// + /// /// /// ModProfile mod; /// @@ -1174,7 +1192,7 @@ public static async Task SubscribeToMod(ModId modId) /// Debug.Log("Failed to unsubscribe from mod"); /// } /// } - /// + /// public static async Task UnsubscribeFromMod(ModId modId) { return await ModIOUnityImplementation.UnsubscribeFrom(modId); @@ -1191,7 +1209,7 @@ public static async Task UnsubscribeFromMod(ModId modId) /// /// /// - /// + /// /// async void Example() /// { /// ResultAnd<UserProfile> response = await ModIOUnityAsync.GetCurrentUser(); @@ -1205,21 +1223,48 @@ public static async Task UnsubscribeFromMod(ModId modId) /// Debug.Log("failed to get user"); /// } /// } - /// + /// public static async Task> GetCurrentUser() { return await ModIOUnityImplementation.GetCurrentUser(); } + /// + /// Stops any current download and starts downloading the selected mod. + /// + /// ModId of the mod you want to remove dependencies from + /// + /// + /// + /// + /// ModId modId; + /// void Example() + /// { + /// Result result = ModIOUnity.DownloadNow(modId); + /// if (result.Succeeded()) + /// { + /// Debug.Log("Successful"); + /// } + /// else + /// { + /// Debug.Log("Failed"); + /// } + /// } + /// + public static async void DownloadNow(ModId modId) + { + await ModIOUnityImplementation.DownloadNow(modId); + } + /// /// Mutes a user which effectively hides any content from that specified user /// /// The userId can be found from the UserProfile. Such as ModProfile.creator.userId /// The id of the user to be muted /// - public static void MuteUser(long userId) + public static async Task MuteUser(long userId) { - ModIOUnityImplementation.MuteUser(userId); + return await ModIOUnityImplementation.MuteUser(userId); } /// @@ -1228,18 +1273,30 @@ public static void MuteUser(long userId) /// The userId can be found from the UserProfile. Such as ModProfile.creator.userId /// The id of the user to be muted /// - public static void UnmuteUser(long userId) + public static async Task UnmuteUser(long userId) { - ModIOUnityImplementation.UnmuteUser(userId); + return await ModIOUnityImplementation.UnmuteUser(userId); } -#endregion -#region Mod Management + /// + /// Gets an array of all the muted users that the current authenticated user has muted. + /// + /// This has a cap of 1,000 users. It will not return more then that. + /// + public static async Task> GetMutedUsers() + { + return await ModIOUnityImplementation.GetMutedUsers(); + } + #endregion + + #region Mod Management /// - /// This retrieves the user's subscriptions from the mod.io server and synchronises it with - /// our local instance of the user's subscription data. If mod management has been enabled + /// This retrieves the user's ratings and subscriptions from the mod.io server and synchronises + /// it with our local instance of the user's data. If mod management has been enabled /// via ModIOUnity.EnableModManagement() then it may begin to install/uninstall mods. + /// It's recommended you use this method after initializing the plugin and after + /// successfully authenticating the user. /// /// /// This requires the current session to have an authenticated user, otherwise @@ -1258,7 +1315,7 @@ public static void UnmuteUser(long userId) /// /// /// - /// + /// /// async void Example() /// { /// Result result = await ModIOUnityAsync.FetchUpdates(); @@ -1272,7 +1329,7 @@ public static void UnmuteUser(long userId) /// Debug.Log("failed to get user subscriptions"); /// } /// } - /// + /// public static async Task FetchUpdates() { return await ModIOUnityImplementation.FetchUpdates(); @@ -1291,7 +1348,7 @@ public static async Task FetchUpdates() /// /// /// - /// + /// /// async void Example() /// { /// var dependencies = new List<ModId> @@ -1311,7 +1368,7 @@ public static async Task FetchUpdates() /// Debug.Log("Failed to add dependencies to mod"); /// } /// } - /// + /// public static async Task AddDependenciesToMod(ModId modId, ICollection dependencies) { return await ModIOUnityImplementation.AddDependenciesToMod(modId, dependencies); @@ -1331,7 +1388,7 @@ public static async Task AddDependenciesToMod(ModId modId, ICollection /// /// - /// + /// /// void Example() /// { /// var dependencies = new List<ModId> @@ -1351,15 +1408,15 @@ public static async Task AddDependenciesToMod(ModId modId, ICollection + /// public static async Task RemoveDependenciesFromMod(ModId modId, ICollection dependencies) { return await ModIOUnityImplementation.RemoveDependenciesFromMod(modId, dependencies); } -#endregion // Mod Management + #endregion // Mod Management -#region Mod Uploading + #region Mod Uploading /// /// Creates a new mod profile on the mod.io server based on the details provided from the /// ModProfileDetails object provided. Note that you must have a logo, name and summary @@ -1376,7 +1433,7 @@ public static async Task RemoveDependenciesFromMod(ModId modId, ICollect /// /// /// - /// + /// /// ModId newMod; /// Texture2D logo; /// CreationToken token; @@ -1402,7 +1459,7 @@ public static async Task RemoveDependenciesFromMod(ModId modId, ICollect /// Debug.Log("failed to create new mod profile"); /// } /// } - /// + /// public static async Task> CreateModProfile(CreationToken token, ModProfileDetails modProfileDetails) { @@ -1419,7 +1476,7 @@ public static async Task> CreateModProfile(CreationToken token, /// the mod profile details to apply to the mod profile being created /// /// - /// + /// /// ModId modId; /// /// async void Example() @@ -1439,7 +1496,7 @@ public static async Task> CreateModProfile(CreationToken token, /// Debug.Log("failed to edit mod profile"); /// } /// } - /// + /// public static async Task EditModProfile(ModProfileDetails modprofile) { return await ModIOUnityImplementation.EditModProfile(modprofile); @@ -1455,7 +1512,7 @@ public static async Task EditModProfile(ModProfileDetails modprofile) /// /// /// - /// + /// /// /// ModId modId; /// @@ -1476,10 +1533,10 @@ public static async Task EditModProfile(ModProfileDetails modprofile) /// Debug.Log("failed to upload mod file"); /// } /// } - /// + /// public static async Task UploadModfile(ModfileDetails modfile) { - return await ModIOUnityImplementation.UploadModfile(modfile); + return await ModIOUnityImplementation.AddModfile(modfile); } @@ -1492,7 +1549,7 @@ public static async Task UploadModfile(ModfileDetails modfile) /// /// /// - /// + /// /// ModId modId; /// Texture2D newTexture; /// @@ -1513,10 +1570,28 @@ public static async Task UploadModfile(ModfileDetails modfile) /// Debug.Log("failed to uploaded mod logo"); /// } /// } - /// - public static async Task UploadModMedia(ModProfileDetails modProfileDetails) + /// + public static Task UploadModMedia(ModProfileDetails modProfileDetails) + { + return ModIOUnityImplementation.UploadModMedia(modProfileDetails); + } + + /// + ///

Reorder a mod's gallery images. must represent every entry in (or any of the size-variant arrays) or the operation will fail.

+ ///

Returns the updated .

+ ///
+ public static Task> ReorderModMedia(ModId modId, string[] orderedFilenames) { - return await ModIOUnityImplementation.UploadModMedia(modProfileDetails); + return ModIOUnityImplementation.ReorderModMedia(modId, orderedFilenames); + } + + /// + ///

Delete gallery images from a mod. Filenames can be sourced from (or any of the size-variant arrays).

+ ///

Returns the updated .

+ ///
+ public static Task> DeleteModMedia(ModId modId, string[] filenames) + { + return ModIOUnityImplementation.DeleteModMedia(modId, filenames); } /// @@ -1529,7 +1604,7 @@ public static async Task UploadModMedia(ModProfileDetails modProfileDeta /// /// /// - /// + /// /// /// ModId modId; /// @@ -1546,7 +1621,7 @@ public static async Task UploadModMedia(ModProfileDetails modProfileDeta /// Debug.Log("failed to archive mod profile"); /// } /// } - /// + /// public static async Task ArchiveModProfile(ModId modId) { return await ModIOUnityImplementation.ArchiveModProfile(modId); @@ -1573,7 +1648,7 @@ public static async Task> GetCurrentUserCreations(SearchFilte /// /// /// - /// + /// /// /// ModId modId; /// string[] tags; @@ -1591,7 +1666,7 @@ public static async Task> GetCurrentUserCreations(SearchFilte /// Debug.Log("failed to add tags"); /// } /// } - /// + /// public static async Task AddTags(ModId modId, string[] tags) { return await ModIOUnityImplementation.AddTags(modId, tags); @@ -1606,7 +1681,7 @@ public static async Task AddTags(ModId modId, string[] tags) /// /// /// - /// + /// /// /// ModId modId; /// string[] tags; @@ -1624,14 +1699,226 @@ public static async Task AddTags(ModId modId, string[] tags) /// Debug.Log("failed to delete tags"); /// } /// } - /// + /// public static async Task DeleteTags(ModId modId, string[] tags) { return await ModIOUnityImplementation.DeleteTags(modId, tags); } -#endregion // Mod Uploading + #endregion // Mod Uploading + + #region Multipart + + /// + /// Get all uploaded parts for a corresponding upload session. Successful request will return an array of Multipart + /// Upload Part Objects.We recommended reading the filtering documentation to return only the records you want. + /// The Mutlipart feature is automatically used when uploading a mod via UploadModFile and is limited to one upload at a time. + /// This function is optional and is provided to allow for more control over uploading large files for those who require it. + /// + /// the id of the mod + /// A universally unique identifier (UUID) that represents the upload session. + /// The filter to apply when searching through comments (can only apply + /// pagination parameters, Eg. page size and page index) + /// + /// + /// + /// + /// ModId modId; + /// string uploadId; + /// + /// private void Example() + /// { + /// var response = await ModIOUnityAsync.GetMultipartUploadParts(modId, uploadId); + /// if (response.result.Succeeded()) + /// { + /// Debug.Log("Received Upload Sessions Object"); + /// } + /// else + /// { + /// Debug.Log("Failed to get Upload Sessions Object"); + /// } + /// } + /// + public static async Task>> GetMultipartUploadParts(ModId modId, string uploadId, SearchFilter filter) + { + return await ModIOUnityImplementation.GetMultipartUploadParts(modId, uploadId, filter); + } + + /// + /// Get all upload sessions belonging to the authenticated user for the corresponding mod. Successful request will return an + /// array of Multipart Upload Part Objects. We recommended reading the filtering documentation to return only the records you want. + /// The Mutlipart feature is automatically used when uploading a mod via UploadModFile and is limited to one upload at a time. + /// This function is optional and is provided to allow for more control over uploading large files for those who require it. + /// + /// the id of the mod + /// The filter to apply when searching through comments (can only apply + /// pagination parameters, Eg. page size and page index) + /// + /// + /// + /// + /// ModId modId; + /// + /// private void Example() + /// { + /// var response = await ModIOUnity.GetMultipartUploadSessions(modId); + /// if (response.result.Succeeded()) + /// { + /// Debug.Log("Received Upload Sessions"); + /// } + /// else + /// { + /// Debug.Log("Failed to get Upload Sessions"); + /// } + /// } + /// + public static async Task>> GetMultipartUploadSessions(ModId modId, SearchFilter filter) + { + return await ModIOUnityImplementation.GetMultipartUploadSessions(modId, filter); + } -#region Media Download + /// + /// Add a new multipart upload part to an existing upload session. All parts must be exactly 50MB (Mebibyte) in size unless it is the + /// final part which can be smaller. A successful request will return a single Multipart Upload Part Object. + /// NOTE: Unlike other POST endpoints on this service, the body of this request should contain no form parameters and instead be the data + /// described in the byte range of the Content-Range header of the request. + /// The Mutlipart feature is automatically used when uploading a mod via UploadModFile and is limited to one upload at a time. + /// This function is optional and is provided to allow for more control over uploading large files for those who require it. + /// + /// the id of the mod + /// A universally unique identifier (UUID) that represents the upload session. + /// The Content-Range of the file you are sending. + /// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Range + /// Optional Digest for part integrity checks once the part has been uploaded. + /// Bytes for the file part to be uploaded + /// + /// + /// + /// ModId modId; + /// string uploadId; + /// string contentRange; + /// string digest; + /// byte[] rawBytes; + /// + /// private void Example() + /// { + /// var result = await ModIOUnity.AddMultipartUploadParts(modId, uploadId, contentRange, digest, rawBytes); + /// if (result.Succeeded()) + /// { + /// Debug.Log("Added a part to Upload Session"); + /// } + /// else + /// { + /// Debug.Log("Failed to add a part to Upload Session"); + /// } + /// } + /// + public static async Task AddMultipartUploadParts(ModId modId, string uploadId, string contentRange, string digest, byte[] rawBytes) + { + return await ModIOUnityImplementation.AddMultipartUploadParts(modId, uploadId, contentRange, digest, rawBytes); + } + + /// + /// Create a new multipart upload session. A successful request will return a single Multipart Upload Object. + /// NOTE: The multipart upload system is designed for uploading large files up to 20GB in size. If uploading + /// files less than 100MB, we recommend using the Add Modfile endpoint. + /// The Mutlipart feature is automatically used when uploading a mod via UploadModFile and is limited to one upload at a time. + /// This function is optional and is provided to allow for more control over uploading large files for those who require it. + /// + /// the id of the mod + /// An optional nonce to provide to prevent duplicate upload sessions from being created concurrently. Maximum of 64 characters. + /// The filename of the file once all the parts have been uploaded. The filename must include the .zip extension and cannot exceed 100 characters. + /// + /// + /// + /// ModId modId; + /// string filename; + /// string nonce; + /// + /// private void Example() + /// { + /// var response = await ModIOUnity.CreateMultipartUploadSession(modId, filename, nonce); + /// if (response.result.Succeeded()) + /// { + /// Debug.Log("Created Upload Session"); + /// } + /// else + /// { + /// Debug.Log("Failed to Create Upload Session"); + /// } + /// } + /// + public static async Task> CreateMultipartUploadSession(ModId modId, string filename) + { + return await ModIOUnityImplementation.CreateMultipartUploadSession(modId, filename); + } + + /// + /// Terminate an active multipart upload session, a successful request will return 204 No Content. + /// The Mutlipart feature is automatically used when uploading a mod via UploadModFile and is limited to one upload at a time. + /// This function is optional and is provided to allow for more control over uploading large files for those who require it. + /// + /// the id of the mod + /// A universally unique identifier (UUID) that represents the upload session. + /// + /// + /// + /// ModId modId; + /// string uploadId; + /// + /// private void Example() + /// { + /// var result = await ModIOUnity.DeleteMultipartUploadSession(modId, uploadId); + /// if (result.Succeeded()) + /// { + /// Debug.Log("Deleted Upload Session"); + /// } + /// else + /// { + /// Debug.Log("Failed to Delete Upload Session"); + /// } + /// } + /// + public static async Task DeleteMultipartUploadSession(ModId modId, string uploadId) + { + return await ModIOUnityImplementation.DeleteMultipartUploadSession(modId, uploadId); + } + + /// + /// Complete an active multipart upload session, this endpoint assumes that you have already uploaded all individual parts. + /// A successful request will return a 200 OK response code and return a single Multipart Upload Object. + /// The Mutlipart feature is automatically used when uploading a mod via UploadModFile and is limited to one upload at a time. + /// This function is optional and is provided to allow for more control over uploading large files for those who require it. + /// + /// the id of the mod + /// A universally unique identifier (UUID) that represents the upload session. + /// + /// + /// + /// ModId modId; + /// string uploadId; + /// + /// private void Example() + /// { + /// var result = await ModIOUnity.CompleteMultipartUploadSession(modId, uploadId); + /// if (result.Succeeded()) + /// { + /// Debug.Log("Completed Session"); + /// } + /// else + /// { + /// Debug.Log("Failed to complete session"); + /// } + /// } + /// + public static async Task CompleteMultipartUploadSession(ModId modId, string uploadId) + { + return await ModIOUnityImplementation.CompleteMultipartUploadSession(modId, uploadId); + } + + + #endregion + + #region Media Download /// /// Downloads a texture based on the specified download reference. @@ -1643,7 +1930,7 @@ public static async Task DeleteTags(ModId modId, string[] tags) /// /// /// - /// + /// /// /// ModProfile mod; /// @@ -1660,7 +1947,7 @@ public static async Task DeleteTags(ModId modId, string[] tags) /// Debug.Log("failed to download the mod logo texture"); /// } /// } - /// + /// #if UNITY_2019_4_OR_NEWER public static async Task> DownloadTexture(DownloadReference downloadReference) { @@ -1672,9 +1959,9 @@ public static async Task> DownloadImage(DownloadReference down return await ModIOUnityImplementation.GetImage(downloadReference); } -#endregion // Media Download + #endregion // Media Download -#region Reporting + #region Reporting /// /// Reports a specified mod to mod.io. @@ -1682,7 +1969,7 @@ public static async Task> DownloadImage(DownloadReference down /// the object containing all of the details of the report you are sending /// /// - /// + /// /// async void Example() /// { /// Report report = new Report(new ModId(123), @@ -1702,13 +1989,122 @@ public static async Task> DownloadImage(DownloadReference down /// Debug.Log("failed to send a report"); /// } /// } - /// + /// public static async Task Report(Report report) { return await ModIOUnityImplementation.Report(report); } -#endregion // Reporting + #endregion // Reporting + + #region Monetization + + public static async Task> GetTokenPacks() => await ModIOUnityImplementation.GetTokenPacks(); + + /// + /// Convert an in-game consumable that a user has purchased on Steam, Xbox, or Psn into a users + /// mod.io inventory. This endpoint will consume the entitlement on behalf of the user against + /// the portal in which the entitlement resides (i.e. Steam, Xbox, Psn). + /// + /// + /// + /// + /// + /// + /// private async void Example(string token) + /// { + /// var response = await ModIOUnity.SyncEntitlements(token); + /// if (response.result.Succeeded()) + /// { + /// Debug.Log("Sync Entitlements Success"); + /// } + /// else + /// { + /// Debug.Log("Failed to Sync Entitlements"); + /// } + /// } + /// + public static async Task> SyncEntitlements() + { + return await ModIOUnityImplementation.SyncEntitlements(); + } + + /// + /// Get users in a monetization team for a specific mod + /// + /// The mod to get users for + public static async Task> GetModMonetizationTeam(ModId modId) + { + return await ModIOUnityImplementation.GetModMonetizationTeam(modId); + } + + /// + /// Set all for a specific mod + /// + /// The mod to set users for + /// All users and their splits + public static async Task AddModMonetizationTeam(ModId modId, ICollection team) + { + return await ModIOUnityImplementation.AddModMonetizationTeam(modId, team); + } + + /// + /// Complete a marketplace purchase. A Successful request will return the newly created Checkout + /// Process Object. Parameter|Type|Required|Description ---|---|---|---| transaction_id|integer|true|The id + /// of the transaction to complete. mod_id|integer|true|The id of the mod associated to this transaction. + /// display_amount|integer|true|The expected amount of the transaction to confirm the displayed amount matches + /// the actual amount. + /// + /// The id of the mod the user wants to purchase. + /// The amount that was shown to the user for the purchase. + /// A unique string. Must be alphanumeric and cannot contain unique characters except for -. + /// + /// + /// string idempotent = $"aUniqueKey"; + /// ModId modId = 1234; + /// int displayAmount = 12; + /// async void Example() + /// { + /// var result = await ModIOUnity.PurchaseMod(modId, displayAmount, idempotent); + /// if (result.Succeeded()) + /// { + /// Debug.Log("Completed Purchase"); + /// } + /// else + /// { + /// Debug.Log("failed to complete purchase"); + /// } + /// } + /// + public static async Task> PurchaseMod(ModId modId, int displayAmount, string idempotent) + { + return await ModIOUnityImplementation.PurchaseMod(modId, displayAmount, idempotent); + } + + /// + /// Get user's wallet balance + /// + /// + /// + /// + /// void Example() + /// { + /// var result = await ModIOUnity.GetUserWalletBalance(Callback); + /// if (result.Succeeded()) + /// { + /// Debug.Log("Get balance Success"); + /// } + /// else + /// { + /// Debug.Log("failed to get balance"); + /// } + /// } + /// + public static async Task> GetUserWalletBalance() + { + return await ModIOUnityImplementation.GetUserWalletBalance(); + } + #endregion } } diff --git a/Runtime/Structs/BuildSettings.cs b/Runtime/Structs/BuildSettings.cs index f92980b..399fd44 100644 --- a/Runtime/Structs/BuildSettings.cs +++ b/Runtime/Structs/BuildSettings.cs @@ -14,6 +14,7 @@ namespace ModIO public class BuildSettings { public BuildSettings() { } + public BuildSettings(BuildSettings buildSettings) { this.logLevel = buildSettings.logLevel; @@ -23,7 +24,7 @@ public BuildSettings(BuildSettings buildSettings) } /// Level to log at. - public LogLevel logLevel; + [HideInInspector] public LogLevel logLevel; /// Portal the game will be launched through. public UserPortal userPortal = UserPortal.None; diff --git a/Runtime/Structs/CommentDetails.cs b/Runtime/Structs/CommentDetails.cs index 055ea72..c0306a4 100644 --- a/Runtime/Structs/CommentDetails.cs +++ b/Runtime/Structs/CommentDetails.cs @@ -1,14 +1,17 @@ -public class CommentDetails +namespace ModIO { - /// Id of the parent comment this comment is replying to (can be 0 if the comment is not a reply). - public long replyId; + public class CommentDetails + { + /// Id of the parent comment this comment is replying to (can be 0 if the comment is not a reply). + public long replyId; - /// Contents of the comment. - public string content; + /// Contents of the comment. + public string content; - public CommentDetails(long replyId, string content) - { - this.replyId = replyId; - this.content = content; + public CommentDetails(long replyId, string content) + { + this.replyId = replyId; + this.content = content; + } } } diff --git a/Runtime/Structs/Entitlement.cs b/Runtime/Structs/Entitlement.cs new file mode 100644 index 0000000..c76ece0 --- /dev/null +++ b/Runtime/Structs/Entitlement.cs @@ -0,0 +1,18 @@ +using System; + +namespace ModIO +{ + /// + /// A struct representing all of the information available for an Entitlement. + /// + /// + /// + [Serializable] + public struct Entitlement + { + public string transactionId; + public int transactionState; + public string skuId; + public bool entitlementConsumed; + } +} diff --git a/Runtime/Structs/Entitlement.cs.meta b/Runtime/Structs/Entitlement.cs.meta new file mode 100644 index 0000000..e94bd86 --- /dev/null +++ b/Runtime/Structs/Entitlement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 424ecd9bfbc9c974eb2f40217930371e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Structs/ModComment.cs b/Runtime/Structs/ModComment.cs index f353c78..1fa9645 100644 --- a/Runtime/Structs/ModComment.cs +++ b/Runtime/Structs/ModComment.cs @@ -1,7 +1,4 @@ - -using ModIO.Implementation.API.Objects; - -namespace ModIO +namespace ModIO { public struct ModComment { diff --git a/Runtime/Structs/ModDependencies.cs b/Runtime/Structs/ModDependencies.cs index fb3b4a1..3f44fbb 100644 --- a/Runtime/Structs/ModDependencies.cs +++ b/Runtime/Structs/ModDependencies.cs @@ -1,13 +1,12 @@ using System; -namespace ModIO.Implementation.API.Objects +namespace ModIO { /// /// A struct representing all of the information available for a Mod's Dependencies. /// /// /// - /// [Serializable] public struct ModDependencies { diff --git a/Runtime/Structs/ModID.cs b/Runtime/Structs/ModID.cs index 093b8c1..64f3a22 100644 --- a/Runtime/Structs/ModID.cs +++ b/Runtime/Structs/ModID.cs @@ -1,5 +1,4 @@ using System.ComponentModel; -using UnityEngine; namespace ModIO { @@ -7,25 +6,30 @@ namespace ModIO /// A struct representing the globally unique identifier for a specific mod profile. /// [System.Serializable, TypeConverter(typeof(ModIdConverter))] - public struct ModId + public readonly struct ModId { public static readonly ModId Null = new ModId(0L); - private long _id; - - public long id { get { return _id; } - set { - Debug.Log($"id is changed to {value}"); - _id = value; - } - } + public readonly long id; public ModId(long id) { - _id = id; + this.id = id; } public static implicit operator long(ModId id) => id.id; public static explicit operator ModId(long id) => new ModId(id); + + public static bool operator ==(ModId left, ModId right) => left.id == right.id; + public static bool operator !=(ModId left, ModId right) => left.id != right.id; + + public static bool operator ==(ModId left, long right) => left.id == right; + public static bool operator !=(ModId left, long right) => left.id != right; + public static bool operator ==(long left, ModId right) => right == left; + public static bool operator !=(long left, ModId right) => right != left; + + public bool Equals(ModId other) => this == other; + public override bool Equals(object obj) => obj is ModId other && this == other; + public override int GetHashCode() => id.GetHashCode(); } } diff --git a/Runtime/Structs/ModMonetizationTeamDetails.cs b/Runtime/Structs/ModMonetizationTeamDetails.cs new file mode 100644 index 0000000..c6e43dd --- /dev/null +++ b/Runtime/Structs/ModMonetizationTeamDetails.cs @@ -0,0 +1,17 @@ +namespace ModIO +{ + public class ModMonetizationTeamDetails + { + /// Unique ID of the user. + public long userId; + + /// User monetization split. + public int split; + + public ModMonetizationTeamDetails(long userId, int split) + { + this.userId = userId; + this.split = split; + } + } +} diff --git a/Runtime/Structs/ModMonetizationTeamDetails.cs.meta b/Runtime/Structs/ModMonetizationTeamDetails.cs.meta new file mode 100644 index 0000000..3d60dd2 --- /dev/null +++ b/Runtime/Structs/ModMonetizationTeamDetails.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 3b5e4be5513e474a88eb4703877d52c6 +timeCreated: 1705015668 \ No newline at end of file diff --git a/Runtime/Structs/ModProfile.cs b/Runtime/Structs/ModProfile.cs index dd78409..c2010cf 100644 --- a/Runtime/Structs/ModProfile.cs +++ b/Runtime/Structs/ModProfile.cs @@ -1,5 +1,7 @@ -using System; +using ModIO.Implementation.API.Objects; +using System; using System.Collections.Generic; +#pragma warning disable CS0660, CS0661 // Don't want equality comparisons between two ModProfiles namespace ModIO { @@ -9,61 +11,170 @@ namespace ModIO /// /// [Serializable] - public struct ModProfile + public readonly struct ModProfile { - public ModId id; - public string[] tags; - public ModStatus status; - public bool visible; - public string name; - public string summary; - public string description; - public string homePageUrl; - public string profilePageUrl; - public ContentWarnings contentWarnings; - public DateTime dateAdded; - public DateTime dateUpdated; - public DateTime dateLive; - public DownloadReference[] galleryImages_Original; - public DownloadReference[] galleryImages_320x180; - public DownloadReference[] galleryImages_640x360; - public DownloadReference logoImage_320x180; - public DownloadReference logoImage_640x360; - public DownloadReference logoImage_1280x720; - public DownloadReference logoImage_Original; - public UserProfile creator; - public DownloadReference creatorAvatar_50x50; - public DownloadReference creatorAvatar_100x100; - public DownloadReference creatorAvatar_Original; - + public readonly ModId id; + public readonly string[] tags; + public readonly ModStatus status; + public readonly bool visible; + public readonly string name; + public readonly string summary; + public readonly string description; + public readonly string homePageUrl; + public readonly string profilePageUrl; + public readonly MaturityOptions maturityOptions; + public readonly DateTime dateAdded; + public readonly DateTime dateUpdated; + public readonly DateTime dateLive; + public readonly DownloadReference[] galleryImagesOriginal; + public readonly DownloadReference[] galleryImages320x180; + public readonly DownloadReference[] galleryImages640x360; + public readonly DownloadReference logoImage320x180; + public readonly DownloadReference logoImage640x360; + public readonly DownloadReference logoImage1280x720; + public readonly DownloadReference logoImageOriginal; + public readonly UserProfile creator; + public readonly DownloadReference creatorAvatar50x50; + public readonly DownloadReference creatorAvatar100x100; + public readonly DownloadReference creatorAvatarOriginal; + public readonly string platformStatus; + public readonly ModPlatform[] platforms; + public readonly long gameId; + public readonly int communityOptions; + public readonly string nameId; + public readonly Modfile modfile; + + // Marketplace + public readonly RevenueType revenueType; + public readonly int price; + public readonly int tax; + public readonly MonetizationOption MonetizationOption; + + //Scarcity + public readonly int stock; + /// /// The meta data for this mod, not to be confused with the meta data of the specific version /// /// - public string metadata; - + public readonly string metadata; + /// /// The most recent version of the mod that exists /// - public string latestVersion; - + public readonly string latestVersion; + /// /// the change log for the most recent version of this mod /// - public string latestChangelog; - + public readonly string latestChangelog; + /// /// the date for when the most recent mod file was uploaded /// - public DateTime latestDateFileAdded; + public readonly DateTime latestDateFileAdded; /// /// the KVP meta data for this mod profile. Not to be confused with the meta data blob or /// the meta data for the installed version of the mod /// - public KeyValuePair[] metadataKeyValuePairs; - - public ModStats stats; - public long archiveFileSize; + public readonly KeyValuePair[] metadataKeyValuePairs; + + public readonly ModStats stats; + public readonly long archiveFileSize; + + public ModProfile( + ModId id, + string[] tags, + ModStatus status, + bool visible, + string name, + string summary, + string description, + string homePageUrl, + string profilePageUrl, + MaturityOptions maturityOptions, + DateTime dateAdded, + DateTime dateUpdated, + DateTime dateLive, + DownloadReference[] galleryImagesOriginal, + DownloadReference[] galleryImages_320x180, + DownloadReference[] galleryImages_640x360, + DownloadReference logoImage_320x180, + DownloadReference logoImage_640x360, + DownloadReference logoImage_1280x720, + DownloadReference logoImageOriginal, + UserProfile creator, + DownloadReference creatorAvatar_50x50, + DownloadReference creatorAvatar_100x100, + DownloadReference creatorAvatarOriginal, + string metadata, + string latestVersion, + string latestChangelog, + DateTime latestDateFileAdded, + KeyValuePair[] metadataKeyValuePairs, + ModStats stats, + long archiveFileSize, + string platformStatus, + ModPlatform[] platforms, + RevenueType revenueType, + int price, + int tax, + MonetizationOption monetizationOption, + int stock, + long gameId, + int communityOptions, + string nameId, + Modfile modfile + ) { + + this.id = id; + this.tags = tags; + this.status = status; + this.visible = visible; + this.name = name; + this.summary = summary; + this.description = description; + this.homePageUrl = homePageUrl; + this.profilePageUrl = profilePageUrl; + this.maturityOptions = maturityOptions; + this.dateAdded = dateAdded; + this.dateUpdated = dateUpdated; + this.dateLive = dateLive; + this.galleryImagesOriginal = galleryImagesOriginal; + this.galleryImages320x180 = galleryImages_320x180; + this.galleryImages640x360 = galleryImages_640x360; + this.logoImage320x180 = logoImage_320x180; + this.logoImage640x360 = logoImage_640x360; + this.logoImage1280x720 = logoImage_1280x720; + this.logoImageOriginal = logoImageOriginal; + this.creator = creator; + this.creatorAvatar50x50 = creatorAvatar_50x50; + this.creatorAvatar100x100 = creatorAvatar_100x100; + this.creatorAvatarOriginal = creatorAvatarOriginal; + this.metadata = metadata; + this.latestVersion = latestVersion; + this.latestChangelog = latestChangelog; + this.latestDateFileAdded = latestDateFileAdded; + this.metadataKeyValuePairs = metadataKeyValuePairs; + this.stats = stats; + this.archiveFileSize = archiveFileSize; + this.platformStatus = platformStatus; + this.platforms = platforms; + this.revenueType = revenueType; + this.price = price; + this.tax = tax; + this.MonetizationOption = monetizationOption; + this.stock = stock; + this.gameId = gameId; + this.communityOptions = communityOptions; + this.nameId = nameId; + this.modfile = modfile; + } + + public static bool operator ==(ModProfile left, ModId right) => left.id == right; + public static bool operator !=(ModProfile left, ModId right) => left.id != right; + public static bool operator ==(ModId left, ModProfile right) => right == left; + public static bool operator !=(ModId left, ModProfile right) => right != left; } } diff --git a/Runtime/Structs/ModStats.cs b/Runtime/Structs/ModStats.cs index 9b62553..ead82ce 100644 --- a/Runtime/Structs/ModStats.cs +++ b/Runtime/Structs/ModStats.cs @@ -6,7 +6,7 @@ [System.Serializable] public struct ModStats { - public ModId modId; + public long modId; public long popularityRankPosition; public long popularityRankTotalMods; public long downloadsToday; @@ -18,5 +18,6 @@ public struct ModStats public long ratingsPercentagePositive; public float ratingsWeightedAggregate; public string ratingsDisplayText; + public long dateExpires; } } diff --git a/Runtime/Structs/MonetizationTeamAccount.cs b/Runtime/Structs/MonetizationTeamAccount.cs new file mode 100644 index 0000000..bfca7e9 --- /dev/null +++ b/Runtime/Structs/MonetizationTeamAccount.cs @@ -0,0 +1,15 @@ +using UnityEngine.Serialization; + +namespace ModIO +{ + [System.Serializable] + public struct MonetizationTeamAccount + { + public long Id; //user ID + public string NameId; + public string Username; + public int MonetizationStatus; + public int MonetizationOptions; + public int SplitPercentage; + } +} diff --git a/Runtime/Structs/MonetizationTeamAccount.cs.meta b/Runtime/Structs/MonetizationTeamAccount.cs.meta new file mode 100644 index 0000000..bd3f827 --- /dev/null +++ b/Runtime/Structs/MonetizationTeamAccount.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: eb647651d9ea47fba73e4b4dbff15736 +timeCreated: 1705015716 \ No newline at end of file diff --git a/Runtime/Structs/MultipartUpload.cs b/Runtime/Structs/MultipartUpload.cs new file mode 100644 index 0000000..f9da4a7 --- /dev/null +++ b/Runtime/Structs/MultipartUpload.cs @@ -0,0 +1,15 @@ +namespace ModIO +{ + [System.Serializable] + public struct MultipartUpload + { + /// + /// A universally unique identifier (UUID) that represents the upload session. + /// + public string upload_id; + /// + /// The status of the upload session: 0 = Incomplete, 1 = Pending, 2 = Processing, 3 = Complete, 4 = Cancelled + /// + public int status; + } +} diff --git a/Runtime/Structs/MultipartUpload.cs.meta b/Runtime/Structs/MultipartUpload.cs.meta new file mode 100644 index 0000000..7252d8d --- /dev/null +++ b/Runtime/Structs/MultipartUpload.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8c0f517351d066447b288fda69fe1e18 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Structs/MultipartUploadPart.cs b/Runtime/Structs/MultipartUploadPart.cs new file mode 100644 index 0000000..bd1ae15 --- /dev/null +++ b/Runtime/Structs/MultipartUploadPart.cs @@ -0,0 +1,24 @@ +namespace ModIO +{ + + [System.Serializable] + public struct MultipartUploadPart + { + /// + /// A universally unique identifier (UUID) that represents the upload session. + /// + public string upload_id; + /// + /// The part number this object represents. + /// + public int part_number; + /// + /// integer The size of this part in bytes. + /// + public int part_size; + /// + /// integer Unix timestamp of date the part was uploaded. + /// + public int date_added; + } +} diff --git a/Runtime/Structs/MultipartUploadPart.cs.meta b/Runtime/Structs/MultipartUploadPart.cs.meta new file mode 100644 index 0000000..c65f45f --- /dev/null +++ b/Runtime/Structs/MultipartUploadPart.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f3f6a6f03f0e67546aa397a32e76b355 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Structs/Rating.cs b/Runtime/Structs/Rating.cs index 1c00ac8..bc1bf65 100644 --- a/Runtime/Structs/Rating.cs +++ b/Runtime/Structs/Rating.cs @@ -1,6 +1,6 @@ using System; -namespace ModIO.Implementation.API.Objects +namespace ModIO { /// /// A struct representing all of the information available for a Rating. diff --git a/Runtime/Structs/Result.cs b/Runtime/Structs/Result.cs index 956ee66..f7ca716 100644 --- a/Runtime/Structs/Result.cs +++ b/Runtime/Structs/Result.cs @@ -83,6 +83,8 @@ public bool IsStorageSpaceInsufficient() return this.code == ResultCode.IO_InsufficientStorage; } - + public bool IsRateLimited() => + code == ResultCode.RESTAPI_RateLimitExceededGlobal + || code == ResultCode.RESTAPI_RateLimitExceededEndpoint; } } diff --git a/Runtime/Structs/Tag.cs b/Runtime/Structs/Tag.cs index 6e116bd..aa94a83 100644 --- a/Runtime/Structs/Tag.cs +++ b/Runtime/Structs/Tag.cs @@ -1,5 +1,4 @@ - -namespace ModIO +namespace ModIO { /// /// Represents a Tag that can be assigned to a mod. diff --git a/Runtime/Structs/TagCategory.cs b/Runtime/Structs/TagCategory.cs index e5c2a37..b6f041c 100644 --- a/Runtime/Structs/TagCategory.cs +++ b/Runtime/Structs/TagCategory.cs @@ -1,5 +1,4 @@ - -namespace ModIO +namespace ModIO { /// /// Represents a particular category of tags. diff --git a/Runtime/Structs/TermsHash.cs b/Runtime/Structs/TermsHash.cs index ef7de17..a4c5e45 100644 --- a/Runtime/Structs/TermsHash.cs +++ b/Runtime/Structs/TermsHash.cs @@ -1,5 +1,4 @@ - -using System; +using System; namespace ModIO { diff --git a/Runtime/Structs/TermsOfUse.cs b/Runtime/Structs/TermsOfUse.cs index cb816a6..35501eb 100644 --- a/Runtime/Structs/TermsOfUse.cs +++ b/Runtime/Structs/TermsOfUse.cs @@ -19,6 +19,8 @@ public struct TermsOfUse { public string termsOfUse; + public string agreeText; + public string disagreeText; public TermsOfUseLink[] links; public TermsHash hash; } diff --git a/Runtime/Structs/TokenPack.cs b/Runtime/Structs/TokenPack.cs new file mode 100644 index 0000000..bc3e0e1 --- /dev/null +++ b/Runtime/Structs/TokenPack.cs @@ -0,0 +1,42 @@ +using System.Collections.Generic; +using System.Linq; +using ModIO.Implementation.API.Objects; + +namespace ModIO +{ + public struct TokenPack + { + public readonly long id; + public readonly string name; + public readonly string description; + public readonly long price; + public readonly long amount; + public readonly Portal[] portals; + + internal TokenPack(IEnumerable tokenPackObjects) + { + TokenPackObject tokenPackObject = tokenPackObjects.First(); + + id = tokenPackObject.token_pack_id; + name = tokenPackObject.name; + description = tokenPackObject.description; + price = tokenPackObject.price; + amount = tokenPackObject.amount; + portals = tokenPackObjects.Select(tpo => new Portal(tpo)).ToArray(); + } + + public struct Portal + { + public readonly long id; + public readonly string portal; + public readonly string sku; + + internal Portal(TokenPackObject tokenPackObject) + { + id = tokenPackObject.id; + portal = tokenPackObject.portal; + sku = tokenPackObject.sku; + } + } + } +} diff --git a/Runtime/Structs/TokenPack.cs.meta b/Runtime/Structs/TokenPack.cs.meta new file mode 100644 index 0000000..bdd3999 --- /dev/null +++ b/Runtime/Structs/TokenPack.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 9d25db8283a641c2bd2a2e6f4d9780ab +timeCreated: 1707780576 \ No newline at end of file diff --git a/Runtime/Structs/Wallet.cs b/Runtime/Structs/Wallet.cs new file mode 100644 index 0000000..61cdcc5 --- /dev/null +++ b/Runtime/Structs/Wallet.cs @@ -0,0 +1,14 @@ +namespace ModIO +{ + /// + /// A struct representing the user's wallet and current balance. + /// + /// + /// ; + public struct Wallet + { + public string type; + public string currency; + public int balance; + } +} diff --git a/Runtime/Structs/Wallet.cs.meta b/Runtime/Structs/Wallet.cs.meta new file mode 100644 index 0000000..8fc3412 --- /dev/null +++ b/Runtime/Structs/Wallet.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e2a456e20ad6e414ba491a0a4b814ad5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Utility/DownloadModToStream.cs b/Runtime/Utility/DownloadModToStream.cs new file mode 100644 index 0000000..a918519 --- /dev/null +++ b/Runtime/Utility/DownloadModToStream.cs @@ -0,0 +1,256 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using ICSharpCode.SharpZipLib.Zip; +using ModIO.Implementation; +using ModIO.Implementation.API; +using ModIO.Implementation.API.Objects; +using Logger = ModIO.Implementation.Logger; + +namespace ModIO.Util +{ + /// + /// + /// + public class DownloadModToStreamOperation : IDisposable + { + public enum OperationStatus + { + RequestingModInfo, + Downloading, + Verifying, + ProcessingArchive, + Cancelled, + Succeeded, + Failed, + } + + public readonly ModId modId; + public readonly Stream archiveStream; + public bool closeStream; + + public readonly Task task; + public OperationStatus Status { get; private set; }= OperationStatus.RequestingModInfo; + public bool IsDownloading => Status == OperationStatus.Downloading; + public bool IsCompleted => Status >= OperationStatus.Cancelled; + public bool IsCancelled => Status == OperationStatus.Cancelled; + public bool IsSucceeded => Status == OperationStatus.Succeeded; + public bool IsFailed => IsCancelled || Status == OperationStatus.Failed; + + ModfileObject modfileObject; + + public float DownloadProgress { get; private set; } + + readonly Dictionary filesByName = new Dictionary(); + + public string FailedMessage { get; private set; } + + readonly Stopwatch stopwatch = new Stopwatch(); + readonly byte[] buffer = new byte[1024 * 1024]; // 1MB + + internal DownloadModToStreamOperation(ModId modId, Stream archiveStream, bool closeStream) + { + this.modId = modId; + this.archiveStream = archiveStream; + + if (archiveStream.CanWrite && archiveStream.CanRead && archiveStream.CanSeek) + task = Init(); + else + { + task = Task.CompletedTask; + SetFailed("Stream must support writing, reading and seeking."); + } + } + + async Task Init() + { + modfileObject = await RequestModInfo(); + if (IsFailed || modfileObject.download.binary_url == null) + return; + + await DownloadModfile(); + if (IsFailed) return; + + await VerifyDownload(); + if (IsFailed) return; + + await ProcessArchive(); + if (IsFailed) return; + + Logger.Log(LogLevel.Message, $"Downloaded mod [{modId}_{modfileObject.id}] to [{archiveStream.GetType()}]"); + Status = OperationStatus.Succeeded; + } + + async Task RequestModInfo() + { + ResultAnd result = await Implementation.API.Requests.GetMod.Request(modId).RunViaWebRequestManager(); + + if (result.result.Succeeded()) + return result.value.modfile; + + SetFailed(result.result.message); + return default; + } + + async Task DownloadModfile() + { + Logger.Log(LogLevel.Message, $"Downloading mod [{modId}_{modfileObject.id}] to [{archiveStream.GetType()}]"); + + Status = OperationStatus.Downloading; + + ProgressHandle progressHandle = new ProgressHandle(); + + RequestHandle requestHandle = WebRequestManager.Download(modfileObject.download.binary_url, archiveStream, progressHandle); + + while (!requestHandle.task.IsCompleted) + { + if (IsCancelled) + { + requestHandle.cancel(); + return; + } + + DownloadProgress = progressHandle.Progress; + await Task.Yield(); + } + + DownloadProgress = progressHandle.Progress; + + if (requestHandle.task.Result.Succeeded()) + return; + + SetFailed(requestHandle.task.Result.message); + Logger.Log(LogLevel.Error, $"Failed to download mod [{modId}_{modfileObject.id}]"); + } + + async Task VerifyDownload() + { + Status = OperationStatus.Verifying; + + archiveStream.Position = 0; + string md5 = await IOUtil.GenerateMD5Async(archiveStream); + + if (md5.Equals(modfileObject.filehash.md5)) + return; + + SetFailed("Failed to validate downloaded file with MD5. The download may have been corrupted, please try again."); + Logger.Log(LogLevel.Error, $"Failed to download mod [{modId}_{modfileObject.id}]"); + } + + async Task ProcessArchive() + { + Status = OperationStatus.ProcessingArchive; + + stopwatch.Restart(); + + archiveStream.Position = 0; + using ZipInputStream stream = new ZipInputStream(archiveStream); + stream.IsStreamOwner = false; + + while (stream.GetNextEntry() is { } entry) + { + if (stopwatch.ElapsedMilliseconds >= 15) + { + await Task.Yield(); + stopwatch.Restart(); + } + + if (entry.IsDirectory || entry.Name.Contains("__MACOSX")) + continue; + + filesByName[entry.Name] = new ArchiveStreamFile(entry); + } + + stopwatch.Stop(); + } + + void SetFailed(string message) + { + Status = OperationStatus.Failed; + FailedMessage = message; + } + + public void Cancel() + { + Status = OperationStatus.Cancelled; + FailedMessage = "Operation cancelled"; + } + + /// Returns a new array of all file entries in the archive.
Use for extracting files.
+ public IEnumerable GetFiles() => filesByName.Values.ToArray(); + + /// Extracts a file from the archive and optionally removes it.
Use to get a list of files in the archive.
+ public async Task ExtractFileToStream(ArchiveStreamFile file, Stream result, bool removeFromArchive = false) + { + await ExtractFileToStream(file.path, result, removeFromArchive); + } + + /// Extracts a file from the archive and optionally removes it.
Use to get a list of files in the archive.
+ public async Task ExtractFileToStream(string path, Stream result, bool removeFromArchive = false) + { + stopwatch.Restart(); + + using ZipFile file = new ZipFile(archiveStream); + file.IsStreamOwner = false; + + ZipEntry entry = file.GetEntry(path); + if (entry == null) + { + Logger.Log(LogLevel.Error, $"File '{path}' does not exist in archive."); + return; + } + + Stream inputStream = file.GetInputStream(entry); + int bytesRead; + + while ((bytesRead = await inputStream.ReadAsync(buffer, 0, buffer.Length)) > 0) + { + if (stopwatch.ElapsedMilliseconds >= 15) + { + await Task.Yield(); + stopwatch.Restart(); + } + + await result.WriteAsync(buffer, 0, bytesRead); + + if (stopwatch.ElapsedMilliseconds < 15) + { + await Task.Yield(); + stopwatch.Restart(); + } + } + + stopwatch.Stop(); + + if (removeFromArchive) + file.Delete(path); + } + + public void Dispose() + { + if (closeStream) + archiveStream?.Dispose(); + } + + public readonly struct ArchiveStreamFile + { + /// Relative path to the file in the archive. + public readonly string path; + /// The file name and extension. + public readonly string fileName; + public readonly long sizeCompressed; + public readonly long sizeUncompressed; + + internal ArchiveStreamFile(ZipEntry zipEntry) + { + path = zipEntry.Name; + fileName = Path.GetFileName(zipEntry.Name); + sizeCompressed = zipEntry.CompressedSize; + sizeUncompressed = zipEntry.Size; + } + } + } +} diff --git a/Runtime/Utility/DownloadModToStream.cs.meta b/Runtime/Utility/DownloadModToStream.cs.meta new file mode 100644 index 0000000..f51d3ca --- /dev/null +++ b/Runtime/Utility/DownloadModToStream.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 65e96d65b2024957aa462d0c1c5f29c2 +timeCreated: 1698814553 \ No newline at end of file diff --git a/Runtime/Structs/InstalledModExtensions.cs b/Runtime/Utility/InstalledModExtensions.cs similarity index 95% rename from Runtime/Structs/InstalledModExtensions.cs rename to Runtime/Utility/InstalledModExtensions.cs index d0ccd02..72cfa38 100644 --- a/Runtime/Structs/InstalledModExtensions.cs +++ b/Runtime/Utility/InstalledModExtensions.cs @@ -1,5 +1,4 @@ - -namespace ModIO.Implementation +namespace ModIO.Implementation { static class InstalledModExtensions { diff --git a/Runtime/Structs/InstalledModExtensions.cs.meta b/Runtime/Utility/InstalledModExtensions.cs.meta similarity index 100% rename from Runtime/Structs/InstalledModExtensions.cs.meta rename to Runtime/Utility/InstalledModExtensions.cs.meta diff --git a/Runtime/Utility/Utility.cs b/Runtime/Utility/Utility.cs index 7c37be5..e8b36cd 100644 --- a/Runtime/Utility/Utility.cs +++ b/Runtime/Utility/Utility.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.IO; using ModIO.Implementation.Platform; using UnityEngine; @@ -168,5 +169,39 @@ public static void ForceSetPlatformHeader(RestApiPlatform platform) { PlatformConfiguration.RESTAPI_HEADER = platform.ToString(); } + + /// Downloads a mod's file archive into .
Use the returned to track status and extract files.
+ /// The id of the mod to download. + /// The stream the compressed archive will be downloaded into. + /// Should the operation close when it is disposed? + /// Operation handle to access status and results. + /// + /// async void DownloadModToMemory(ModId modId) + /// { + /// using MemoryStream archiveStream = new MemoryStream(); + ///

+ /// DownloadModToStreamOperation op = Utility.DownloadModToStream(modId, archiveStream); + /// while (!op.task.IsCompleted) + /// { + /// if (op.IsDownloading) + /// Debug.Log($"Download progress: {op.DownloadProgress}"); + ///

+ /// await Task.Yield(); + /// } + ///

+ /// List<MemoryStream> fileStreams = new List<MemoryStream>(); + ///

+ /// foreach (DownloadModToStreamOperation.ArchiveStreamFile file in op.GetFiles()) + /// { + /// MemoryStream fileStream = new MemoryStream(); + /// await op.ExtractFileToStream(file, fileStream); + /// fileStreams.Add(fileStream); + /// } + /// } + ///
+ /// + /// + /// + public static DownloadModToStreamOperation DownloadModToStream(ModId modId, Stream archiveStream, bool closeStream = true) => new DownloadModToStreamOperation(modId, archiveStream, closeStream); } } diff --git a/Swedish.txt b/Swedish.txt index 3ee8ced..2901920 100644 --- a/Swedish.txt +++ b/Swedish.txt @@ -15,6 +15,8 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +#this is how you comment. Just remember to make it sharp! + msgid "Play" msgstr "Spela" @@ -477,9 +479,6 @@ msgstr "Anslut med Switch" msgid "Connect with email" msgstr "Anslut med email" -msgid "Back" -msgstr "Backa" - msgid "I agree" msgstr "OK" @@ -611,3 +610,27 @@ msgstr "Connect with device" msgid "Failed to connect account" msgstr "Failed to connect account" + +msgid "{tokenCount} {tokenType}" +msgstr "{tokenCount} {tokenType}" + +msgid "Free" +msgstr "Free" + +msgid "Buy Now" +msgstr "Buy Now" + +msgid "Confirm purchase" +msgstr "Confirm purchase" + +msgid "Insufficient tokens" +msgstr "Insufficient tokens" + +msgid "Purchased" +msgstr "Purchased" + +msgid "Premium" +msgstr "Premium" + +msgid "Listing" +msgstr "Listing" \ No newline at end of file diff --git a/ThirdParty/UiRoundedCorners.meta b/ThirdParty/UiRoundedCorners.meta new file mode 100644 index 0000000..d699e60 --- /dev/null +++ b/ThirdParty/UiRoundedCorners.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ca376c43b995fd347bdde2d21a0c68a2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ThirdParty/UiRoundedCorners/DestroyHelper.cs b/ThirdParty/UiRoundedCorners/DestroyHelper.cs new file mode 100644 index 0000000..d27c8c5 --- /dev/null +++ b/ThirdParty/UiRoundedCorners/DestroyHelper.cs @@ -0,0 +1,17 @@ +using UnityEngine; + +namespace Nobi.UiRoundedCorners { + internal static class DestroyHelper { + internal static void Destroy(Object @object) { +#if UNITY_EDITOR + if (Application.isPlaying) { + Object.Destroy(@object); + } else { + Object.DestroyImmediate(@object); + } +#else + Object.Destroy(@object); +#endif + } + } +} diff --git a/ThirdParty/UiRoundedCorners/DestroyHelper.cs.meta b/ThirdParty/UiRoundedCorners/DestroyHelper.cs.meta new file mode 100644 index 0000000..9ed4ec0 --- /dev/null +++ b/ThirdParty/UiRoundedCorners/DestroyHelper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 374d389d769fe864c8aa8eccfa70b0b2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ThirdParty/UiRoundedCorners/Editor.meta b/ThirdParty/UiRoundedCorners/Editor.meta new file mode 100644 index 0000000..fce16d0 --- /dev/null +++ b/ThirdParty/UiRoundedCorners/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bc55785c2d5655f4e839d5408f397028 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ThirdParty/UiRoundedCorners/Editor/ImageWithIndependentRoundedCornersInspector.cs b/ThirdParty/UiRoundedCorners/Editor/ImageWithIndependentRoundedCornersInspector.cs new file mode 100644 index 0000000..991083b --- /dev/null +++ b/ThirdParty/UiRoundedCorners/Editor/ImageWithIndependentRoundedCornersInspector.cs @@ -0,0 +1,21 @@ +using UnityEditor; +using UnityEngine.UI; + +namespace Nobi.UiRoundedCorners.Editor { + [CustomEditor(typeof(ImageWithIndependentRoundedCorners))] + public class ImageWithIndependentRoundedCornersInspector : UnityEditor.Editor { + private ImageWithIndependentRoundedCorners script; + + private void OnEnable() { + script = (ImageWithIndependentRoundedCorners)target; + } + + public override void OnInspectorGUI() { + base.OnInspectorGUI(); + + if (!script.TryGetComponent(out var _)) { + EditorGUILayout.HelpBox("This script requires an MaskableGraphic (Image or RawImage) component on the same gameobject", MessageType.Warning); + } + } + } +} diff --git a/ThirdParty/UiRoundedCorners/Editor/ImageWithIndependentRoundedCornersInspector.cs.meta b/ThirdParty/UiRoundedCorners/Editor/ImageWithIndependentRoundedCornersInspector.cs.meta new file mode 100644 index 0000000..e9679c4 --- /dev/null +++ b/ThirdParty/UiRoundedCorners/Editor/ImageWithIndependentRoundedCornersInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2364a6676566e7842a1a053d02d5ec5b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ThirdParty/UiRoundedCorners/Editor/ImageWithRoundedCornersInspector.cs b/ThirdParty/UiRoundedCorners/Editor/ImageWithRoundedCornersInspector.cs new file mode 100644 index 0000000..02ddbb2 --- /dev/null +++ b/ThirdParty/UiRoundedCorners/Editor/ImageWithRoundedCornersInspector.cs @@ -0,0 +1,22 @@ +using UnityEditor; +using UnityEngine.UI; + +namespace Nobi.UiRoundedCorners.Editor { + [CustomEditor(typeof(ImageWithRoundedCorners))] + public class ImageWithRoundedCornersInspector : UnityEditor.Editor { + private ImageWithRoundedCorners script; + + private void OnEnable() { + script = (ImageWithRoundedCorners)target; + } + + public override void OnInspectorGUI() { + base.OnInspectorGUI(); + + if (!script.TryGetComponent(out var _)) { + EditorGUILayout.HelpBox("This script requires an MaskableGraphic (Image or RawImage) component on the same gameobject", MessageType.Warning); + } + } + } +} + diff --git a/ThirdParty/UiRoundedCorners/Editor/ImageWithRoundedCornersInspector.cs.meta b/ThirdParty/UiRoundedCorners/Editor/ImageWithRoundedCornersInspector.cs.meta new file mode 100644 index 0000000..ce93b0b --- /dev/null +++ b/ThirdParty/UiRoundedCorners/Editor/ImageWithRoundedCornersInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2b7cf3ef8317dd04eaff6d4b44a16520 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ThirdParty/UiRoundedCorners/Editor/Nobi.UiRoundedCorners.Editor.asmdef b/ThirdParty/UiRoundedCorners/Editor/Nobi.UiRoundedCorners.Editor.asmdef new file mode 100644 index 0000000..edb5a88 --- /dev/null +++ b/ThirdParty/UiRoundedCorners/Editor/Nobi.UiRoundedCorners.Editor.asmdef @@ -0,0 +1,18 @@ +{ + "name": "Nobi.UiRoundedCorners.Editor", + "rootNamespace": "", + "references": [ + "GUID:02fb846f82d73b64f884c961e8616088" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/ThirdParty/UiRoundedCorners/Editor/Nobi.UiRoundedCorners.Editor.asmdef.meta b/ThirdParty/UiRoundedCorners/Editor/Nobi.UiRoundedCorners.Editor.asmdef.meta new file mode 100644 index 0000000..9c4bbe2 --- /dev/null +++ b/ThirdParty/UiRoundedCorners/Editor/Nobi.UiRoundedCorners.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 10725695f79a428429a1a3c374a5a230 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ThirdParty/UiRoundedCorners/ImageWithIndependentRoundedCorners.cs b/ThirdParty/UiRoundedCorners/ImageWithIndependentRoundedCorners.cs new file mode 100644 index 0000000..321c7ae --- /dev/null +++ b/ThirdParty/UiRoundedCorners/ImageWithIndependentRoundedCorners.cs @@ -0,0 +1,156 @@ +using Nobi.UiRoundedCorners; +using UnityEditor; +using UnityEngine; +using UnityEngine.UI; + +namespace Nobi.UiRoundedCorners { + [ExecuteInEditMode] //Required to do validation with OnEnable() + [DisallowMultipleComponent] //You can only have one of these in every object + [RequireComponent(typeof(RectTransform))] + public class ImageWithIndependentRoundedCorners : MonoBehaviour { + private static readonly int prop_halfSize = Shader.PropertyToID("_halfSize"); + private static readonly int prop_radiuses = Shader.PropertyToID("_r"); + private static readonly int prop_rect2props = Shader.PropertyToID("_rect2props"); + + // Vector2.right rotated clockwise by 45 degrees + private static readonly Vector2 wNorm = new Vector2(.7071068f, -.7071068f); + // Vector2.right rotated counter-clockwise by 45 degrees + private static readonly Vector2 hNorm = new Vector2(.7071068f, .7071068f); + + public Vector4 r = new Vector4(40f, 40f, 40f, 40f); + private Material material; + + private const string SHADER_PATH = "UI/RoundedCorners/IndependentRoundedCorners"; + + // xy - position, + // zw - halfSize + [HideInInspector, SerializeField] private Vector4 rect2props; + [HideInInspector, SerializeField] private MaskableGraphic image; + + private void OnValidate() { + Validate(); + Refresh(); + } + + private void OnEnable() { + //You can only add either ImageWithRoundedCorners or ImageWithIndependentRoundedCorners + //It will replace the other component when added into the object. + var other = GetComponent(); + if (other != null) + { + r = Vector4.one * other.radius; //When it does, transfer the radius value to this script + DestroyHelper.Destroy(other); + } + + Validate(); + Refresh(); + } + + private void OnRectTransformDimensionsChange() { + if (enabled && material != null) { + Refresh(); + } + } + + private void OnDestroy() { + image.material = null; //This makes so that when the component is removed, the UI material returns to null + + DestroyHelper.Destroy(material); + image = null; + material = null; + } + + public void Validate() + { + var shader = Shader.Find(SHADER_PATH); + if (shader == null) + { + Debug.LogWarning($"Cannot find the specified shader! {SHADER_PATH}"); + return; + } + if (material == null) { + material = new Material(shader); + } + + if (image == null) { + TryGetComponent(out image); + } + + if (image != null) { + image.material = material; + } + } + + public void Refresh() { + var shader = Shader.Find("UI/RoundedCorners/IndependentRoundedCorners"); + if(shader == null) + return; + + var rect = ((RectTransform)transform).rect; + RecalculateProps(rect.size); + material.SetVector(prop_rect2props, rect2props); + material.SetVector(prop_halfSize, rect.size * .5f); + material.SetVector(prop_radiuses, r); + } + + private void RecalculateProps(Vector2 size) { + // Vector that goes from left to right sides of rect2 + var aVec = new Vector2(size.x, -size.y + r.x + r.z); + + // Project vector aVec to wNorm to get magnitude of rect2 width vector + var halfWidth = Vector2.Dot(aVec, wNorm) * .5f; + rect2props.z = halfWidth; + + + // Vector that goes from bottom to top sides of rect2 + var bVec = new Vector2(size.x, size.y - r.w - r.y); + + // Project vector bVec to hNorm to get magnitude of rect2 height vector + var halfHeight = Vector2.Dot(bVec, hNorm) * .5f; + rect2props.w = halfHeight; + + + // Vector that goes from left to top sides of rect2 + var efVec = new Vector2(size.x - r.x - r.y, 0); + + // Vector that goes from point E to point G, which is top-left of rect2 + var egVec = hNorm * Vector2.Dot(efVec, hNorm); + + // Position of point E relative to center of coord system + var ePoint = new Vector2(r.x - (size.x / 2), size.y / 2); + + // Origin of rect2 relative to center of coord system + // ePoint + egVec == vector to top-left corner of rect2 + // wNorm * halfWidth + hNorm * -halfHeight == vector from top-left corner to center + var origin = ePoint + egVec + wNorm * halfWidth + hNorm * -halfHeight; + rect2props.x = origin.x; + rect2props.y = origin.y; + } + } +} + +/// +/// Display Vector4 as 4 separate fields for each corners. +/// It's way easier to use than w,x,y,z in Vector4. +/// +#if UNITY_EDITOR +[CustomEditor(typeof(ImageWithIndependentRoundedCorners))] +public class Vector4Editor : Editor +{ + public override void OnInspectorGUI() + { + //DrawDefaultInspector(); + + serializedObject.Update(); + + SerializedProperty vector4Prop = serializedObject.FindProperty("r"); + + EditorGUILayout.PropertyField(vector4Prop.FindPropertyRelative("x"), new GUIContent("Top Left Corner")); + EditorGUILayout.PropertyField(vector4Prop.FindPropertyRelative("y"), new GUIContent("Top Right Corner")); + EditorGUILayout.PropertyField(vector4Prop.FindPropertyRelative("w"), new GUIContent("Bottom Left Corner")); + EditorGUILayout.PropertyField(vector4Prop.FindPropertyRelative("z"), new GUIContent("Bottom Right Corner")); + + serializedObject.ApplyModifiedProperties(); + } +} +#endif diff --git a/ThirdParty/UiRoundedCorners/ImageWithIndependentRoundedCorners.cs.meta b/ThirdParty/UiRoundedCorners/ImageWithIndependentRoundedCorners.cs.meta new file mode 100644 index 0000000..5d817fb --- /dev/null +++ b/ThirdParty/UiRoundedCorners/ImageWithIndependentRoundedCorners.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 109c41f08973846429af681aea0a30c4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ThirdParty/UiRoundedCorners/ImageWithOutlineRoundedCorners.cs b/ThirdParty/UiRoundedCorners/ImageWithOutlineRoundedCorners.cs new file mode 100644 index 0000000..7c4362b --- /dev/null +++ b/ThirdParty/UiRoundedCorners/ImageWithOutlineRoundedCorners.cs @@ -0,0 +1,88 @@ +using UnityEngine; +using UnityEngine.UI; + +namespace Nobi.UiRoundedCorners { + [ExecuteInEditMode] //Required to check the OnEnable function + [DisallowMultipleComponent] //You can only have one of these in every object. + [RequireComponent(typeof(RectTransform))] + public class ImageWithOutlineRoundedCorners : MonoBehaviour { + private static readonly int Props = Shader.PropertyToID("_WidthHeightRadius"); + private static readonly int Thick = Shader.PropertyToID("_Thickness"); + + public float radius = 40f; + public float thickness = 5f; + private Material material; + private const string SHADER_PATH = "UI/RoundedCorners/OutlineWithRoundedCorners"; + + [HideInInspector, SerializeField] private MaskableGraphic image; + + private void OnValidate() { + Validate(); + Refresh(); + } + + private void OnDestroy() { + image.material = null; //This makes so that when the component is removed, the UI material returns to null + + DestroyHelper.Destroy(material); + image = null; + material = null; + } + + private void OnEnable() { + //You can only add either ImageWithRoundedCorners or ImageWithIndependentRoundedCorners + //It will replace the other component when added into the object. + var other = GetComponent(); + if (other != null) + { + radius = other.r.x; //When it does, transfer the radius value to this script + DestroyHelper.Destroy(other); + } + + Validate(); + Refresh(); + } + + private void OnRectTransformDimensionsChange() { + if (enabled && material != null) { + Refresh(); + } + } + + public void Validate() + { + var shader = Shader.Find(SHADER_PATH); + if (shader == null) + { + Debug.LogWarning($"Cannot find the specified shader! {SHADER_PATH}"); + return; + } + + if (material == null) + { + material = new Material(shader); + } + + if (image == null) { + TryGetComponent(out image); + } + + if (image != null) { + image.material = material; + } + } + + public void Refresh() { + var shader = Shader.Find(SHADER_PATH); + if(shader == null) + return; + + var rect = ((RectTransform)transform).rect; + + //Multiply radius value by 2 to make the radius value appear consistent with ImageWithIndependentRoundedCorners script. + //Right now, the ImageWithIndependentRoundedCorners appears to have double the radius than this. + material.SetVector(Props, new Vector4(rect.width, rect.height, radius * 2, 0)); + material.SetFloat(Thick, thickness); + } + } +} diff --git a/ThirdParty/UiRoundedCorners/ImageWithOutlineRoundedCorners.cs.meta b/ThirdParty/UiRoundedCorners/ImageWithOutlineRoundedCorners.cs.meta new file mode 100644 index 0000000..a0d62a2 --- /dev/null +++ b/ThirdParty/UiRoundedCorners/ImageWithOutlineRoundedCorners.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 134e3ef2fca249a45986349d3925bbc5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ThirdParty/UiRoundedCorners/ImageWithRoundedCorners.cs b/ThirdParty/UiRoundedCorners/ImageWithRoundedCorners.cs new file mode 100644 index 0000000..f9ea80a --- /dev/null +++ b/ThirdParty/UiRoundedCorners/ImageWithRoundedCorners.cs @@ -0,0 +1,86 @@ +using UnityEngine; +using UnityEngine.UI; + +namespace Nobi.UiRoundedCorners { + [ExecuteInEditMode] //Required to check the OnEnable function + [DisallowMultipleComponent] //You can only have one of these in every object. + [RequireComponent(typeof(RectTransform))] + public class ImageWithRoundedCorners : MonoBehaviour { + private static readonly int Props = Shader.PropertyToID("_WidthHeightRadius"); + + public float radius = 40f; + private Material material; + + private const string SHADER_PATH = "UI/RoundedCorners/RoundedCorners"; + + [HideInInspector, SerializeField] private MaskableGraphic image; + + private void OnValidate() { + Validate(); + Refresh(); + } + + private void OnDestroy() { + image.material = null; //This makes so that when the component is removed, the UI material returns to null + + DestroyHelper.Destroy(material); + image = null; + material = null; + } + + private void OnEnable() { + //You can only add either ImageWithRoundedCorners or ImageWithIndependentRoundedCorners + //It will replace the other component when added into the object. + var other = GetComponent(); + if (other != null) + { + radius = other.r.x; //When it does, transfer the radius value to this script + DestroyHelper.Destroy(other); + } + + Validate(); + Refresh(); + } + + private void OnRectTransformDimensionsChange() { + if (enabled && material != null) { + Refresh(); + } + } + + public void Validate() + { + var shader = Shader.Find(SHADER_PATH); + if (shader == null) + { + Debug.LogWarning($"Cannot find the specified shader! {SHADER_PATH}"); + return; + } + + if (material == null) + { + material = new Material(shader); + } + + if (image == null) { + TryGetComponent(out image); + } + + if (image != null) { + image.material = material; + } + } + + public void Refresh() + { + if(material == null) + return; + + var rect = ((RectTransform)transform).rect; + + //Multiply radius value by 2 to make the radius value appear consistent with ImageWithIndependentRoundedCorners script. + //Right now, the ImageWithIndependentRoundedCorners appears to have double the radius than this. + material.SetVector(Props, new Vector4(rect.width, rect.height, radius * 2, 0)); + } + } +} diff --git a/ThirdParty/UiRoundedCorners/ImageWithRoundedCorners.cs.meta b/ThirdParty/UiRoundedCorners/ImageWithRoundedCorners.cs.meta new file mode 100644 index 0000000..a34d59a --- /dev/null +++ b/ThirdParty/UiRoundedCorners/ImageWithRoundedCorners.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: adb30198aa32dd140b5750692dd48104 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ThirdParty/UiRoundedCorners/IndependentRoundedCorners.shader b/ThirdParty/UiRoundedCorners/IndependentRoundedCorners.shader new file mode 100644 index 0000000..0884cd2 --- /dev/null +++ b/ThirdParty/UiRoundedCorners/IndependentRoundedCorners.shader @@ -0,0 +1,92 @@ +Shader "UI/RoundedCorners/IndependentRoundedCorners" { + + Properties { + [HideInInspector] _MainTex ("Texture", 2D) = "white" {} + + // --- Mask support --- + [HideInInspector] _StencilComp ("Stencil Comparison", Float) = 8 + [HideInInspector] _Stencil ("Stencil ID", Float) = 0 + [HideInInspector] _StencilOp ("Stencil Operation", Float) = 0 + [HideInInspector] _StencilWriteMask ("Stencil Write Mask", Float) = 255 + [HideInInspector] _StencilReadMask ("Stencil Read Mask", Float) = 255 + [HideInInspector] _ColorMask ("Color Mask", Float) = 15 + [HideInInspector] _UseUIAlphaClip ("Use Alpha Clip", Float) = 0 + // Definition in Properties section is required to Mask works properly + _r ("r", Vector) = (0,0,0,0) + _halfSize ("halfSize", Vector) = (0,0,0,0) + _rect2props ("rect2props", Vector) = (0,0,0,0) + // --- + } + + SubShader { + Tags { + "RenderType"="Transparent" + "Queue"="Transparent" + } + + // --- Mask support --- + Stencil { + Ref [_Stencil] + Comp [_StencilComp] + Pass [_StencilOp] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + } + Cull Off + Lighting Off + ZTest [unity_GUIZTestMode] + ColorMask [_ColorMask] + // --- + + Blend SrcAlpha OneMinusSrcAlpha, One OneMinusSrcAlpha + ZWrite Off + + Pass { + CGPROGRAM + + #include "UnityCG.cginc" + #include "UnityUI.cginc" + #include "SDFUtils.cginc" + #include "ShaderSetup.cginc" + + #pragma vertex vert + #pragma fragment frag + + #pragma multi_compile_local _ UNITY_UI_CLIP_RECT + #pragma multi_compile_local _ UNITY_UI_ALPHACLIP + + float4 _r; + float4 _halfSize; + float4 _rect2props; + sampler2D _MainTex; + float4 _ClipRect; + fixed4 _TextureSampleAdd; + + fixed4 frag (v2f i) : SV_Target { + half4 color = (tex2D(_MainTex, i.uv) + _TextureSampleAdd) * i.color; + + #ifdef UNITY_UI_CLIP_RECT + color.a *= UnityGet2DClipping(i.worldPosition.xy, _ClipRect); + #endif + + #ifdef UNITY_UI_ALPHACLIP + clip(color.a - 0.001); + #endif + + if (color.a <= 0) { + return color; + } + + float alpha = CalcAlphaForIndependentCorners(i.uv, _halfSize.xy, _rect2props, _r); + + #ifdef UNITY_UI_ALPHACLIP + clip(alpha - 0.001); + #endif + + return mixAlpha(tex2D(_MainTex, i.uv), i.color, alpha); + } + + ENDCG + } + } +} diff --git a/ThirdParty/UiRoundedCorners/IndependentRoundedCorners.shader.meta b/ThirdParty/UiRoundedCorners/IndependentRoundedCorners.shader.meta new file mode 100644 index 0000000..2ac0868 --- /dev/null +++ b/ThirdParty/UiRoundedCorners/IndependentRoundedCorners.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d3beb88e61f88ca4393acdefb005fa70 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/ThirdParty/UiRoundedCorners/LICENSE b/ThirdParty/UiRoundedCorners/LICENSE new file mode 100644 index 0000000..ba71897 --- /dev/null +++ b/ThirdParty/UiRoundedCorners/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 Kirill Evdokimov + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/ThirdParty/UiRoundedCorners/LICENSE.meta b/ThirdParty/UiRoundedCorners/LICENSE.meta new file mode 100644 index 0000000..d0c2b28 --- /dev/null +++ b/ThirdParty/UiRoundedCorners/LICENSE.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1b43d824145a28946bd5f4edd280b0d8 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ThirdParty/UiRoundedCorners/Nobi.UiRoundedCorners.asmdef b/ThirdParty/UiRoundedCorners/Nobi.UiRoundedCorners.asmdef new file mode 100644 index 0000000..a387804 --- /dev/null +++ b/ThirdParty/UiRoundedCorners/Nobi.UiRoundedCorners.asmdef @@ -0,0 +1,8 @@ +{ + "name": "Nobi.UiRoundedCorners", + "references": [], + "optionalUnityReferences": [], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false +} \ No newline at end of file diff --git a/ThirdParty/UiRoundedCorners/Nobi.UiRoundedCorners.asmdef.meta b/ThirdParty/UiRoundedCorners/Nobi.UiRoundedCorners.asmdef.meta new file mode 100644 index 0000000..48963e8 --- /dev/null +++ b/ThirdParty/UiRoundedCorners/Nobi.UiRoundedCorners.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 02fb846f82d73b64f884c961e8616088 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ThirdParty/UiRoundedCorners/OutlineWithRoundedCorners.shader b/ThirdParty/UiRoundedCorners/OutlineWithRoundedCorners.shader new file mode 100644 index 0000000..124526f --- /dev/null +++ b/ThirdParty/UiRoundedCorners/OutlineWithRoundedCorners.shader @@ -0,0 +1,90 @@ +Shader "UI/RoundedCorners/OutlineWithRoundedCorners" { + Properties { + [HideInInspector] _MainTex ("Texture", 2D) = "white" {} + + // --- Mask support --- + [HideInInspector] _StencilComp ("Stencil Comparison", Float) = 8 + [HideInInspector] _Stencil ("Stencil ID", Float) = 0 + [HideInInspector] _StencilOp ("Stencil Operation", Float) = 0 + [HideInInspector] _StencilWriteMask ("Stencil Write Mask", Float) = 255 + [HideInInspector] _StencilReadMask ("Stencil Read Mask", Float) = 255 + [HideInInspector] _ColorMask ("Color Mask", Float) = 15 + [HideInInspector] _UseUIAlphaClip ("Use Alpha Clip", Float) = 0 + + // Definition in Properties section is required to Mask works properly + _WidthHeightRadius ("WidthHeightRadius", Vector) = (0,0,0,0) + _Thickness ("Thickness", float) = 5 + // --- + } + + SubShader { + Tags { + "RenderType"="Transparent" + "Queue"="Transparent" + } + + // --- Mask support --- + Stencil { + Ref [_Stencil] + Comp [_StencilComp] + Pass [_StencilOp] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + } + Cull Off + Lighting Off + ZTest [unity_GUIZTestMode] + ColorMask [_ColorMask] + // --- + + Blend SrcAlpha OneMinusSrcAlpha, One OneMinusSrcAlpha + ZWrite Off + + Pass { + CGPROGRAM + + #include "UnityCG.cginc" + #include "UnityUI.cginc" + #include "SDFUtils.cginc" + #include "ShaderSetup.cginc" + + #pragma vertex vert + #pragma fragment frag + + #pragma multi_compile_local _ UNITY_UI_CLIP_RECT + #pragma multi_compile_local _ UNITY_UI_ALPHACLIP + + float4 _WidthHeightRadius; + float _Thickness; + sampler2D _MainTex; + fixed4 _TextureSampleAdd; + float4 _ClipRect; + + fixed4 frag (v2f i) : SV_Target { + half4 color = (tex2D(_MainTex, i.uv) + _TextureSampleAdd) * i.color; + + #ifdef UNITY_UI_CLIP_RECT + color.a *= UnityGet2DClipping(i.worldPosition.xy, _ClipRect); + #endif + + #ifdef UNITY_UI_ALPHACLIP + clip(color.a - 0.001); + #endif + + if (color.a <= 0) { + return color; + } + + float alpha = CalcAlphaInverted(i.uv, _WidthHeightRadius.xy, _WidthHeightRadius.z, _Thickness); + + #ifdef UNITY_UI_ALPHACLIP + clip(alpha - 0.001); + #endif + + return mixAlpha(tex2D(_MainTex, i.uv), i.color, alpha); + } + + ENDCG + } + } +} diff --git a/ThirdParty/UiRoundedCorners/OutlineWithRoundedCorners.shader.meta b/ThirdParty/UiRoundedCorners/OutlineWithRoundedCorners.shader.meta new file mode 100644 index 0000000..0137903 --- /dev/null +++ b/ThirdParty/UiRoundedCorners/OutlineWithRoundedCorners.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c18f3ccd926dcb44ba70947ca4cf4c19 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/ThirdParty/UiRoundedCorners/RoundedCorners.shader b/ThirdParty/UiRoundedCorners/RoundedCorners.shader new file mode 100644 index 0000000..3465c68 --- /dev/null +++ b/ThirdParty/UiRoundedCorners/RoundedCorners.shader @@ -0,0 +1,88 @@ +Shader "UI/RoundedCorners/RoundedCorners" { + Properties { + [HideInInspector] _MainTex ("Texture", 2D) = "white" {} + + // --- Mask support --- + [HideInInspector] _StencilComp ("Stencil Comparison", Float) = 8 + [HideInInspector] _Stencil ("Stencil ID", Float) = 0 + [HideInInspector] _StencilOp ("Stencil Operation", Float) = 0 + [HideInInspector] _StencilWriteMask ("Stencil Write Mask", Float) = 255 + [HideInInspector] _StencilReadMask ("Stencil Read Mask", Float) = 255 + [HideInInspector] _ColorMask ("Color Mask", Float) = 15 + [HideInInspector] _UseUIAlphaClip ("Use Alpha Clip", Float) = 0 + + // Definition in Properties section is required to Mask works properly + _WidthHeightRadius ("WidthHeightRadius", Vector) = (0,0,0,0) + // --- + } + + SubShader { + Tags { + "RenderType"="Transparent" + "Queue"="Transparent" + } + + // --- Mask support --- + Stencil { + Ref [_Stencil] + Comp [_StencilComp] + Pass [_StencilOp] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + } + Cull Off + Lighting Off + ZTest [unity_GUIZTestMode] + ColorMask [_ColorMask] + // --- + + Blend SrcAlpha OneMinusSrcAlpha, One OneMinusSrcAlpha + ZWrite Off + + Pass { + CGPROGRAM + + #include "UnityCG.cginc" + #include "UnityUI.cginc" + #include "SDFUtils.cginc" + #include "ShaderSetup.cginc" + + #pragma vertex vert + #pragma fragment frag + + #pragma multi_compile_local _ UNITY_UI_CLIP_RECT + #pragma multi_compile_local _ UNITY_UI_ALPHACLIP + + float4 _WidthHeightRadius; + sampler2D _MainTex; + fixed4 _TextureSampleAdd; + float4 _ClipRect; + + fixed4 frag (v2f i) : SV_Target { + half4 color = (tex2D(_MainTex, i.uv) + _TextureSampleAdd) * i.color; + + #ifdef UNITY_UI_CLIP_RECT + color.a *= UnityGet2DClipping(i.worldPosition.xy, _ClipRect); + #endif + + #ifdef UNITY_UI_ALPHACLIP + clip(color.a - 0.001); + #endif + + if (color.a <= 0) { + return color; + } + + float alpha = CalcAlpha(i.uv, _WidthHeightRadius.xy, _WidthHeightRadius.z); + + #ifdef UNITY_UI_ALPHACLIP + clip(alpha - 0.001); + #endif + + return mixAlpha(tex2D(_MainTex, i.uv), i.color, alpha); + } + + ENDCG + } + } +} diff --git a/ThirdParty/UiRoundedCorners/RoundedCorners.shader.meta b/ThirdParty/UiRoundedCorners/RoundedCorners.shader.meta new file mode 100644 index 0000000..5c67278 --- /dev/null +++ b/ThirdParty/UiRoundedCorners/RoundedCorners.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 0bd2ec5d73751e34a814274a454bec41 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/ThirdParty/UiRoundedCorners/SDFUtils.cginc b/ThirdParty/UiRoundedCorners/SDFUtils.cginc new file mode 100644 index 0000000..866c63b --- /dev/null +++ b/ThirdParty/UiRoundedCorners/SDFUtils.cginc @@ -0,0 +1,96 @@ +// SDF Function for rectangle +float rectangle(float2 samplePosition, float2 halfSize){ + // X component represents signed distance to closest vertical edge of rectangle + // Same for Y but for closest horizontal edge + // HalfSize represents two distances from each axis of 2d space to a сorresponding edge + float2 distanceToEdge = abs(samplePosition) - halfSize; + // max(n, 0) to remove distances that signed with minus (distances inside rectangle) + // length to calculate distance from outside (distances that > 0) to rectangle + float outsideDistance = length(max(distanceToEdge, 0)); + // max(x,y) is a cheap way to calculate distance to closest edge inside rectangle + // with min we just make sure that inside distances would not impact on outside distances + float insideDistance = min(max(distanceToEdge.x, distanceToEdge.y), 0); + return outsideDistance + insideDistance; +} + +// An extension of rectangle() function to modify signed distance (effect as a wrap around rectangle) +float roundedRectangle(float2 samplePosition, float absoluteRound, float2 halfSize){ + // subtrancting value from final distance effects like a wrap around rectangle, so + // the solution is to decrease actual rectangle with `absoluteRound` value + // and then make an effect of wrap with size of `absoluteRound` + return rectangle(samplePosition, halfSize - absoluteRound) - absoluteRound; +} + +// Smoothstep function with antialiasing +float AntialiasedCutoff(float distance){ + float distanceChange = fwidth(distance) * 1; + return smoothstep(distanceChange, -distanceChange, distance); +} + +float CalcAlpha(float2 samplePosition, float2 size, float radius){ + // -.5 = translate origin of samplePositions from (0, 0) to (.5, .5) + // because for Image component (0,0) is bottom-right, not a center + // * size = scale samplePositions to localSpace of Image with this size + float2 samplePositionTranslated = (samplePosition - .5) * size; + float distToRect = roundedRectangle(samplePositionTranslated, radius * .5, size * .5); + return AntialiasedCutoff(distToRect); +} + +float CalcAlphaInverted(float2 samplePosition, float2 size, float radius, float thickness){ + float2 samplePositionTranslated = (samplePosition - .5) * size; + + // Compute distance for the outer boundary + float distToOuterRect = roundedRectangle(samplePositionTranslated, radius * .5, size * .5); + + // Compute distance for the inner boundary by reducing the size by the thickness + float distToInnerRect = roundedRectangle(samplePositionTranslated, (radius-thickness) * .5, (size-thickness) * .5); + + // The alpha should be 1.0 in the region between distToInnerRect and distToOuterRect and 0.0 elsewhere + // Use smoothstep for outer and 1.0 - smoothstep for inner to invert and then multiply the two + return AntialiasedCutoff(distToOuterRect) * (1.0 - AntialiasedCutoff(distToInnerRect)); +} + +inline float2 translate(float2 samplePosition, float2 offset){ + return samplePosition - offset; +} + +float intersect(float shape1, float shape2){ + return max(shape1, shape2); +} + +float2 rotate(float2 samplePosition, float rotation){ + const float PI = 3.14159; + float angle = rotation * PI * 2 * -1; + float sine, cosine; + sincos(angle, sine, cosine); + return float2(cosine * samplePosition.x + sine * samplePosition.y, cosine * samplePosition.y - sine * samplePosition.x); +} + +float circle(float2 position, float radius){ + return length(position) - radius; +} + +float CalcAlphaForIndependentCorners(float2 samplePosition, float2 halfSize, float4 rect2props, float4 r){ + + samplePosition = (samplePosition - .5) * halfSize * 2; + + float r1 = rectangle(samplePosition, halfSize); + + float2 r2Position = rotate(translate(samplePosition, rect2props.xy), .125); + float r2 = rectangle(r2Position, rect2props.zw); + + float2 circle0Position = translate(samplePosition, float2(-halfSize.x + r.x, halfSize.y - r.x)); + float c0 = circle(circle0Position, r.x); + + float2 circle1Position = translate(samplePosition, float2(halfSize.x - r.y, halfSize.y - r.y)); + float c1 = circle(circle1Position, r.y); + + float2 circle2Position = translate(samplePosition, float2(halfSize.x - r.z, -halfSize.y + r.z)); + float c2 = circle(circle2Position, r.z); + + float2 circle3Position = translate(samplePosition, -halfSize + r.w); + float c3 = circle(circle3Position, r.w); + + float dist = max(r1,min(min(min(min(r2, c0), c1), c2), c3)); + return AntialiasedCutoff(dist); +} \ No newline at end of file diff --git a/ThirdParty/UiRoundedCorners/SDFUtils.cginc.meta b/ThirdParty/UiRoundedCorners/SDFUtils.cginc.meta new file mode 100644 index 0000000..053ac15 --- /dev/null +++ b/ThirdParty/UiRoundedCorners/SDFUtils.cginc.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 209beda86bef4cdf945cf90c8999e832 +timeCreated: 1575732888 \ No newline at end of file diff --git a/ThirdParty/UiRoundedCorners/ShaderSetup.cginc b/ThirdParty/UiRoundedCorners/ShaderSetup.cginc new file mode 100644 index 0000000..40eaae8 --- /dev/null +++ b/ThirdParty/UiRoundedCorners/ShaderSetup.cginc @@ -0,0 +1,32 @@ +struct appdata { + float4 vertex : POSITION; + float2 uv : TEXCOORD0; + float4 color : COLOR; // set from Image component property + UNITY_VERTEX_INPUT_INSTANCE_ID +}; + +struct v2f { + float2 uv : TEXCOORD0; + float4 vertex : SV_POSITION; + float4 color : COLOR; + float4 worldPosition : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO +}; + +v2f vert (appdata v) { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_OUTPUT(v2f, o); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + o.worldPosition = v.vertex; + o.vertex = UnityObjectToClipPos(v.vertex); + o.uv = v.uv; + o.color = v.color; + return o; +} + +inline fixed4 mixAlpha(fixed4 mainTexColor, fixed4 color, float sdfAlpha){ + fixed4 col = mainTexColor * color; + col.a = min(col.a, sdfAlpha); + return col; +} \ No newline at end of file diff --git a/ThirdParty/UiRoundedCorners/ShaderSetup.cginc.meta b/ThirdParty/UiRoundedCorners/ShaderSetup.cginc.meta new file mode 100644 index 0000000..622b91b --- /dev/null +++ b/ThirdParty/UiRoundedCorners/ShaderSetup.cginc.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: c8b27b6dc4af4c65a0d1531a5c3a9880 +timeCreated: 1575827487 \ No newline at end of file diff --git a/Tools/create-docs.sh b/Tools/create-docs.sh deleted file mode 100755 index 533dff0..0000000 --- a/Tools/create-docs.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash -# Create the folder structure of the docs -mkdir -p out/docs/public/unity - -# Copy md docs -cp README.md out/docs/public/unity/getting-started.md diff --git a/UI/Color Scheme/MultiTargetDropdown.cs b/UI/Color Scheme/MultiTargetDropdown.cs index e26f1c6..5f38035 100644 --- a/UI/Color Scheme/MultiTargetDropdown.cs +++ b/UI/Color Scheme/MultiTargetDropdown.cs @@ -14,6 +14,25 @@ public class MultiTargetDropdown : TMP_Dropdown public List childDropdowns = new List(); GameObject border; + string[] m_TextCode; + + protected override void OnEnable() + { + if (m_TextCode == null) + { + m_TextCode = new string[options.Count]; + + for (int i = 0; i < options.Count; ++i) + { + m_TextCode[i] = options[i].text; + } + } + + for (int i = 0; i < options.Count; ++i) + { + options[i].text = TranslationManager.Instance.Get(m_TextCode[i]); + } + } public static MultiTargetDropdown currentMultiTargetDropdown; @@ -34,7 +53,7 @@ public override void OnDeselect(BaseEventData eventData) base.OnDeselect(eventData); currentMultiTargetDropdown = null; } - + #if UNITY_EDITOR protected override void Reset() { @@ -212,7 +231,7 @@ void TriggerAnimation(Animator targetAnimator, AnimationTriggers trigger, this.animator.ResetTrigger(trigger.disabledTrigger); this.animator.SetTrigger(triggerName); } - + protected override TMP_Dropdown.DropdownItem CreateItem( TMP_Dropdown.DropdownItem itemTemplate) { diff --git a/UI/Editor/ButtonAttribute.cs b/UI/Editor/ButtonAttribute.cs deleted file mode 100644 index 4c5a06d..0000000 --- a/UI/Editor/ButtonAttribute.cs +++ /dev/null @@ -1,7 +0,0 @@ -using System; - -namespace ModIOBrowser -{ - [AttributeUsage(AttributeTargets.Method)] - public class ExposeMethodInEditorAttribute : Attribute { } -} diff --git a/UI/Editor/ButtonAttribute.cs.meta b/UI/Editor/ButtonAttribute.cs.meta deleted file mode 100644 index c68206c..0000000 --- a/UI/Editor/ButtonAttribute.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e8f3cbfe99a5f50488c707b730e3c28d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/UI/Editor/MonoBehaviourCustomEditor.cs b/UI/Editor/MonoBehaviourCustomEditor.cs deleted file mode 100644 index 17c9fde..0000000 --- a/UI/Editor/MonoBehaviourCustomEditor.cs +++ /dev/null @@ -1,43 +0,0 @@ -#if UNITY_EDITOR - -using System.Reflection; -using UnityEditor; -using UnityEngine; - -namespace ModIOBrowser -{ - [CanEditMultipleObjects] - [CustomEditor(typeof(MonoBehaviour), true)] - public class MonoBehaviourCustomEditor : Editor - { - public override void OnInspectorGUI() - { - DrawDefaultInspector(); - - foreach(var method in target.GetType().GetMethods(BindingFlags.NonPublic|BindingFlags.Public|BindingFlags.Instance)) - { - var attributes = method.GetCustomAttributes(typeof(ExposeMethodInEditorAttribute), true); - if(attributes.Length > 0) - { - string buttonName = method.Name[0].ToString(); - foreach(var item in method.Name.Substring(1)) - { - if(char.IsUpper(item)) - { - buttonName += " " + item.ToString(); - } - else - buttonName += item.ToString(); - } - - if(GUILayout.Button(buttonName)) - { - ((MonoBehaviour)target).Invoke(method.Name, 0f); - } - } - } - } - } -} - -#endif diff --git a/UI/Editor/MonoBehaviourCustomEditor.cs.meta b/UI/Editor/MonoBehaviourCustomEditor.cs.meta deleted file mode 100644 index 165c496..0000000 --- a/UI/Editor/MonoBehaviourCustomEditor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: c945121050a51174080bf3756ce28792 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/UI/Examples/Example.unity b/UI/Examples/Example.unity index d40ba11..09f6278 100644 --- a/UI/Examples/Example.unity +++ b/UI/Examples/Example.unity @@ -320,6 +320,49 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &806183078 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 806183080} + - component: {fileID: 806183079} + m_Layer: 0 + m_Name: UnityMainThreadDispatcher + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &806183079 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 806183078} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8ff1690309412f049932e4eb8f2f227b, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!4 &806183080 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 806183078} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1061966328 GameObject: m_ObjectHideFlags: 0 @@ -578,6 +621,11 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 0} m_Modifications: + - target: {fileID: 3821350690394784548, guid: c80114238dd6fc5488b9336fd65b5c82, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} - target: {fileID: 6982984101525869207, guid: c80114238dd6fc5488b9336fd65b5c82, type: 3} propertyPath: m_AnchorMax.y @@ -603,6 +651,56 @@ PrefabInstance: propertyPath: m_AnchoredPosition.y value: 0 objectReference: {fileID: 0} + - target: {fileID: 7183562815496087993, guid: c80114238dd6fc5488b9336fd65b5c82, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7183562815509748491, guid: c80114238dd6fc5488b9336fd65b5c82, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7183562815509748491, guid: c80114238dd6fc5488b9336fd65b5c82, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7183562815509748491, guid: c80114238dd6fc5488b9336fd65b5c82, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7183562815509748491, guid: c80114238dd6fc5488b9336fd65b5c82, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7183562815579565198, guid: c80114238dd6fc5488b9336fd65b5c82, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7183562815579565198, guid: c80114238dd6fc5488b9336fd65b5c82, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7183562815579565198, guid: c80114238dd6fc5488b9336fd65b5c82, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7183562815579565198, guid: c80114238dd6fc5488b9336fd65b5c82, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7183562815840021785, guid: c80114238dd6fc5488b9336fd65b5c82, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} - target: {fileID: 7183562815992702188, guid: c80114238dd6fc5488b9336fd65b5c82, type: 3} propertyPath: m_AnchorMax.y @@ -628,6 +726,16 @@ PrefabInstance: propertyPath: m_AnchoredPosition.y value: 0 objectReference: {fileID: 0} + - target: {fileID: 7183562816016592639, guid: c80114238dd6fc5488b9336fd65b5c82, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7183562816016592639, guid: c80114238dd6fc5488b9336fd65b5c82, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} - target: {fileID: 7183562816072626964, guid: c80114238dd6fc5488b9336fd65b5c82, type: 3} propertyPath: m_AnchorMax.y @@ -663,6 +771,11 @@ PrefabInstance: propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[1].m_Target value: objectReference: {fileID: 1519110691} + - target: {fileID: 7183562816092791216, guid: c80114238dd6fc5488b9336fd65b5c82, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} - target: {fileID: 7183562816615436227, guid: c80114238dd6fc5488b9336fd65b5c82, type: 3} propertyPath: m_Name @@ -773,6 +886,46 @@ PrefabInstance: propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} + - target: {fileID: 7183562816802668697, guid: c80114238dd6fc5488b9336fd65b5c82, + type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7183562816802668697, guid: c80114238dd6fc5488b9336fd65b5c82, + type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[1].m_Mode + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7183562816802668697, guid: c80114238dd6fc5488b9336fd65b5c82, + type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 7183562815888032900} + - target: {fileID: 7183562816802668697, guid: c80114238dd6fc5488b9336fd65b5c82, + type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[1].m_CallState + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 7183562816802668697, guid: c80114238dd6fc5488b9336fd65b5c82, + type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName + value: Play + objectReference: {fileID: 0} + - target: {fileID: 7183562816802668697, guid: c80114238dd6fc5488b9336fd65b5c82, + type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[1].m_MethodName + value: + objectReference: {fileID: 0} + - target: {fileID: 7183562816802668697, guid: c80114238dd6fc5488b9336fd65b5c82, + type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_TargetAssemblyTypeName + value: Plugins.mod.io.UI.Examples.ExampleTitleScene, modio.UI + objectReference: {fileID: 0} + - target: {fileID: 7183562816802668697, guid: c80114238dd6fc5488b9336fd65b5c82, + type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[1].m_Arguments.m_ObjectArgumentAssemblyTypeName + value: + objectReference: {fileID: 0} - target: {fileID: 7183562816802668702, guid: c80114238dd6fc5488b9336fd65b5c82, type: 3} propertyPath: m_AnchorMax.y @@ -823,6 +976,26 @@ PrefabInstance: propertyPath: m_AnchoredPosition.y value: 0 objectReference: {fileID: 0} + - target: {fileID: 7183562817182820739, guid: c80114238dd6fc5488b9336fd65b5c82, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7183562817182820739, guid: c80114238dd6fc5488b9336fd65b5c82, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7183562817182820739, guid: c80114238dd6fc5488b9336fd65b5c82, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7183562817182820739, guid: c80114238dd6fc5488b9336fd65b5c82, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} - target: {fileID: 7183562817345107312, guid: c80114238dd6fc5488b9336fd65b5c82, type: 3} propertyPath: m_SizeDelta.y @@ -830,3 +1003,15 @@ PrefabInstance: objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c80114238dd6fc5488b9336fd65b5c82, type: 3} +--- !u!114 &7183562815888032900 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 7183562815738721469, guid: c80114238dd6fc5488b9336fd65b5c82, + type: 3} + m_PrefabInstance: {fileID: 7183562815888032899} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6311378238ed164439495924f4b3034e, type: 3} + m_Name: + m_EditorClassIdentifier: diff --git a/UI/Examples/ExampleInputCapture.cs b/UI/Examples/ExampleInputCapture.cs index b6f5c93..89c70c9 100644 --- a/UI/Examples/ExampleInputCapture.cs +++ b/UI/Examples/ExampleInputCapture.cs @@ -43,6 +43,30 @@ public class ExampleInputCapture : MonoBehaviour }; public string verticalControllerInput = "Vertical"; + [ContextMenu("Set to controller default")] + public void SetToControllerDefault() + { + Cancel = KeyCode.JoystickButton1; + Alternate = KeyCode.JoystickButton2; + Options = KeyCode.JoystickButton3; + TabLeft = KeyCode.JoystickButton4; + TabRight = KeyCode.JoystickButton5; + Search = KeyCode.JoystickButton9; + Menu = KeyCode.JoystickButton7; + } + + [ContextMenu("Set to keyboard default")] + public void SetToKeyboardDefault() + { + Cancel = KeyCode.Escape; + Alternate = KeyCode.Alpha1; + Options = KeyCode.Alpha2; + TabLeft = KeyCode.LeftCurlyBracket; + TabRight = KeyCode.RightCurlyBracket; + Search = KeyCode.Alpha3; + Menu = KeyCode.Alpha4; + } + void Update() { if(!Browser.IsOpen) return; diff --git a/UI/Examples/ExampleTitleScene.cs b/UI/Examples/ExampleTitleScene.cs index 4cd2cb3..2ab7d7f 100644 --- a/UI/Examples/ExampleTitleScene.cs +++ b/UI/Examples/ExampleTitleScene.cs @@ -10,6 +10,11 @@ using UnityEngine.EventSystems; using UnityEngine.UI; +#if UNITY_PS5 || UNITY_PS4 +using Sony.NP; +using PSNSample; +#endif + namespace Plugins.mod.io.UI.Examples { @@ -34,7 +39,7 @@ IEnumerator SetupTranslationDropDown() while(!TranslationManager.SingletonIsInstantiated()) { yield return new WaitForSeconds(0.1f); - } + } languageSelectionDropdown.gameObject.SetActive(true); languageSelectionDropdown.ClearOptions(); diff --git a/UI/Examples/ModIOBrowser.prefab b/UI/Examples/ModIOBrowser.prefab index 46702e2..160167d 100644 --- a/UI/Examples/ModIOBrowser.prefab +++ b/UI/Examples/ModIOBrowser.prefab @@ -1,19 +1,5 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: ---- !u!114 &8349791448163938663 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 21915061759306078} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} - m_Name: - m_EditorClassIdentifier: - m_HorizontalFit: 2 - m_VerticalFit: 2 --- !u!1 &8989088974132902752 GameObject: m_ObjectHideFlags: 0 @@ -69,6 +55,23 @@ MonoBehaviour: autoInitialize: 1 uiConfig: {fileID: 11400000, guid: c192283aaab7e584480ceadb08c3b4ee, type: 2} homePanel: {fileID: 1234396549239151596} + browserRowSearchFilters: + - isSortAscending: 1 + sortBy: 2 + revenueType: 2 + stock: 0 + - isSortAscending: 1 + sortBy: 4 + revenueType: 2 + stock: 0 + - isSortAscending: 0 + sortBy: 3 + revenueType: 2 + stock: 0 + - isSortAscending: 0 + sortBy: 6 + revenueType: 2 + stock: 0 SingletonAwakener: {fileID: 5279305294225125357} colorScheme: {fileID: 8989088974132902757} BrowserCanvas: {fileID: 8989088974461564258} @@ -172,6 +175,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -223,7 +227,6 @@ RectTransform: - {fileID: 8989088974283087999} - {fileID: 8989088974029530189} - {fileID: 8989088974764450388} - - {fileID: 8989088973446767647} - {fileID: 8989088974781053212} - {fileID: 1893516735634251278} - {fileID: 8989088974637467835} @@ -284,6 +287,7 @@ MonoBehaviour: m_FallbackScreenDPI: 96 m_DefaultSpriteDPI: 96 m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 --- !u!114 &8989088974461564259 MonoBehaviour: m_ObjectHideFlags: 0 @@ -344,7 +348,7 @@ PrefabInstance: - target: {fileID: 3099736033961590444, guid: 54d3625bf28508944853cce5c940c30c, type: 3} propertyPath: m_RootOrder - value: 15 + value: 14 objectReference: {fileID: 0} - target: {fileID: 3099736033961590444, guid: 54d3625bf28508944853cce5c940c30c, type: 3} @@ -448,12 +452,6 @@ PrefabInstance: objectReference: {fileID: 8989088974132902757} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 54d3625bf28508944853cce5c940c30c, type: 3} ---- !u!1 &3248977626930042382 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 3099736033961590443, guid: 54d3625bf28508944853cce5c940c30c, - type: 3} - m_PrefabInstance: {fileID: 437648027396171941} - m_PrefabAsset: {fileID: 0} --- !u!1 &523472227001641726 stripped GameObject: m_CorrespondingSourceObject: {fileID: 94973307852309083, guid: 54d3625bf28508944853cce5c940c30c, @@ -466,6 +464,12 @@ RectTransform: type: 3} m_PrefabInstance: {fileID: 437648027396171941} m_PrefabAsset: {fileID: 0} +--- !u!1 &3248977626930042382 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 3099736033961590443, guid: 54d3625bf28508944853cce5c940c30c, + type: 3} + m_PrefabInstance: {fileID: 437648027396171941} + m_PrefabAsset: {fileID: 0} --- !u!1001 &486699777932171572 PrefabInstance: m_ObjectHideFlags: 0 @@ -663,6 +667,16 @@ PrefabInstance: propertyPath: singletons.Array.data[10] value: objectReference: {fileID: 8989088974680782485} + - target: {fileID: 4676641786142563895, guid: d2543bf02915aa745bef70de010359c2, + type: 3} + propertyPath: singletons.Array.data[11] + value: + objectReference: {fileID: 0} + - target: {fileID: 4676641786142563895, guid: d2543bf02915aa745bef70de010359c2, + type: 3} + propertyPath: singletons.Array.data[12] + value: + objectReference: {fileID: 8989088974764450387} - target: {fileID: 4778570498850984549, guid: d2543bf02915aa745bef70de010359c2, type: 3} propertyPath: m_Name @@ -762,12 +776,6 @@ PrefabInstance: objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 65c74c8b969a6574f919233163cda9d9, type: 3} ---- !u!4 &2156061094568982260 stripped -Transform: - m_CorrespondingSourceObject: {fileID: 1022597431898343917, guid: 65c74c8b969a6574f919233163cda9d9, - type: 3} - m_PrefabInstance: {fileID: 1430773410708193049} - m_PrefabAsset: {fileID: 0} --- !u!114 &7376382230776530698 stripped MonoBehaviour: m_CorrespondingSourceObject: {fileID: 8468188248645416979, guid: 65c74c8b969a6574f919233163cda9d9, @@ -780,6 +788,12 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: abcfba95a5a23e141b14a3ae260ab189, type: 3} m_Name: m_EditorClassIdentifier: +--- !u!4 &2156061094568982260 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 1022597431898343917, guid: 65c74c8b969a6574f919233163cda9d9, + type: 3} + m_PrefabInstance: {fileID: 1430773410708193049} + m_PrefabAsset: {fileID: 0} --- !u!1001 &1877921627258965659 PrefabInstance: m_ObjectHideFlags: 0 @@ -797,6 +811,11 @@ PrefabInstance: propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target value: objectReference: {fileID: 5576515969151178355} + - target: {fileID: 20451694572036571, guid: a358e4ee54a35874e85a5115d9b91b58, + type: 3} + propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_TargetAssemblyTypeName + value: ModIOBrowser.Implementation.SearchResults, modio.UI + objectReference: {fileID: 0} - target: {fileID: 1655163093905552322, guid: a358e4ee54a35874e85a5115d9b91b58, type: 3} propertyPath: scheme @@ -965,21 +984,21 @@ GameObject: type: 3} m_PrefabInstance: {fileID: 1877921627258965659} m_PrefabAsset: {fileID: 0} ---- !u!1 &3328724869292898985 stripped +--- !u!1 &1893516736350351233 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 3764365408090289202, guid: a358e4ee54a35874e85a5115d9b91b58, + m_CorrespondingSourceObject: {fileID: 20451694917722394, guid: a358e4ee54a35874e85a5115d9b91b58, type: 3} m_PrefabInstance: {fileID: 1877921627258965659} m_PrefabAsset: {fileID: 0} ---- !u!1 &1893516734520461365 stripped +--- !u!1 &3328724869292898985 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 20451694296090286, guid: a358e4ee54a35874e85a5115d9b91b58, + m_CorrespondingSourceObject: {fileID: 3764365408090289202, guid: a358e4ee54a35874e85a5115d9b91b58, type: 3} m_PrefabInstance: {fileID: 1877921627258965659} m_PrefabAsset: {fileID: 0} ---- !u!1 &1893516734505421756 stripped +--- !u!1 &1893516734520461365 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 20451694282229031, guid: a358e4ee54a35874e85a5115d9b91b58, + m_CorrespondingSourceObject: {fileID: 20451694296090286, guid: a358e4ee54a35874e85a5115d9b91b58, type: 3} m_PrefabInstance: {fileID: 1877921627258965659} m_PrefabAsset: {fileID: 0} @@ -989,27 +1008,21 @@ GameObject: type: 3} m_PrefabInstance: {fileID: 1877921627258965659} m_PrefabAsset: {fileID: 0} ---- !u!1 &8989088974029530188 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 7399448335370840791, guid: a358e4ee54a35874e85a5115d9b91b58, - type: 3} - m_PrefabInstance: {fileID: 1877921627258965659} - m_PrefabAsset: {fileID: 0} --- !u!224 &8989088974029530189 stripped RectTransform: m_CorrespondingSourceObject: {fileID: 7399448335370840790, guid: a358e4ee54a35874e85a5115d9b91b58, type: 3} m_PrefabInstance: {fileID: 1877921627258965659} m_PrefabAsset: {fileID: 0} ---- !u!1 &4840592677501763395 stripped +--- !u!1 &1893516734505421756 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 6422848446705840600, guid: a358e4ee54a35874e85a5115d9b91b58, + m_CorrespondingSourceObject: {fileID: 20451694282229031, guid: a358e4ee54a35874e85a5115d9b91b58, type: 3} m_PrefabInstance: {fileID: 1877921627258965659} m_PrefabAsset: {fileID: 0} ---- !u!1 &1893516736350351233 stripped +--- !u!1 &8989088974029530188 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 20451694917722394, guid: a358e4ee54a35874e85a5115d9b91b58, + m_CorrespondingSourceObject: {fileID: 7399448335370840791, guid: a358e4ee54a35874e85a5115d9b91b58, type: 3} m_PrefabInstance: {fileID: 1877921627258965659} m_PrefabAsset: {fileID: 0} @@ -1025,6 +1038,12 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: b55ab1eaffd41c24da914363d6dc169b, type: 3} m_Name: m_EditorClassIdentifier: +--- !u!1 &4840592677501763395 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 6422848446705840600, guid: a358e4ee54a35874e85a5115d9b91b58, + type: 3} + m_PrefabInstance: {fileID: 1877921627258965659} + m_PrefabAsset: {fileID: 0} --- !u!1001 &2860124194257464133 PrefabInstance: m_ObjectHideFlags: 0 @@ -1032,6 +1051,21 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 8989088974132902754} m_Modifications: + - target: {fileID: 831390455187149096, guid: ce4f233ac71f0ec4cb6bcdf3b0a37791, + type: 3} + propertyPath: translationsTextAssets.Array.size + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 831390455187149096, guid: ce4f233ac71f0ec4cb6bcdf3b0a37791, + type: 3} + propertyPath: translationsTextAssets.Array.data[0] + value: + objectReference: {fileID: 4900000, guid: c5dd3fa88a173d14ca72b04e14daf5d4, type: 3} + - target: {fileID: 831390455187149096, guid: ce4f233ac71f0ec4cb6bcdf3b0a37791, + type: 3} + propertyPath: translationsTextAssets.Array.data[1] + value: + objectReference: {fileID: 4900000, guid: 537b5c01e60e20244b052bb739c690b8, type: 3} - target: {fileID: 839962838998309421, guid: ce4f233ac71f0ec4cb6bcdf3b0a37791, type: 3} propertyPath: m_RootOrder @@ -1125,7 +1159,7 @@ PrefabInstance: - target: {fileID: 3802382007037501061, guid: d745b8f4ef0816244ba1585f4f34293b, type: 3} propertyPath: m_RootOrder - value: 8 + value: 7 objectReference: {fileID: 0} - target: {fileID: 3802382007037501061, guid: d745b8f4ef0816244ba1585f4f34293b, type: 3} @@ -1249,15 +1283,9 @@ PrefabInstance: objectReference: {fileID: 8989088974132902757} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: d745b8f4ef0816244ba1585f4f34293b, type: 3} ---- !u!1 &5095037789043063184 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 7509449899451644187, guid: d745b8f4ef0816244ba1585f4f34293b, - type: 3} - m_PrefabInstance: {fileID: 3351761392141205643} - m_PrefabAsset: {fileID: 0} ---- !u!1 &3463848345469516931 stripped +--- !u!1 &1893516735634251279 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 2202777596087434248, guid: d745b8f4ef0816244ba1585f4f34293b, + m_CorrespondingSourceObject: {fileID: 3802382007037501060, guid: d745b8f4ef0816244ba1585f4f34293b, type: 3} m_PrefabInstance: {fileID: 3351761392141205643} m_PrefabAsset: {fileID: 0} @@ -1273,15 +1301,21 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!224 &1893516735634251278 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 3802382007037501061, guid: d745b8f4ef0816244ba1585f4f34293b, +--- !u!1 &5095037789043063184 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 7509449899451644187, guid: d745b8f4ef0816244ba1585f4f34293b, type: 3} m_PrefabInstance: {fileID: 3351761392141205643} m_PrefabAsset: {fileID: 0} ---- !u!1 &1893516735634251279 stripped +--- !u!1 &3463848345469516931 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 3802382007037501060, guid: d745b8f4ef0816244ba1585f4f34293b, + m_CorrespondingSourceObject: {fileID: 2202777596087434248, guid: d745b8f4ef0816244ba1585f4f34293b, + type: 3} + m_PrefabInstance: {fileID: 3351761392141205643} + m_PrefabAsset: {fileID: 0} +--- !u!224 &1893516735634251278 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 3802382007037501061, guid: d745b8f4ef0816244ba1585f4f34293b, type: 3} m_PrefabInstance: {fileID: 3351761392141205643} m_PrefabAsset: {fileID: 0} @@ -1302,11 +1336,21 @@ PrefabInstance: propertyPath: scheme value: objectReference: {fileID: 8989088974132902757} + - target: {fileID: 146680028725652592, guid: e7c972a3b0c92ba4f8be9938d0c63a43, + type: 3} + propertyPath: m_Material + value: + objectReference: {fileID: 0} - target: {fileID: 327911496839598646, guid: e7c972a3b0c92ba4f8be9938d0c63a43, type: 3} propertyPath: scheme value: objectReference: {fileID: 8989088974132902757} + - target: {fileID: 328851281575151252, guid: e7c972a3b0c92ba4f8be9938d0c63a43, + type: 3} + propertyPath: m_Name + value: Row 1 text + objectReference: {fileID: 0} - target: {fileID: 433141317274427940, guid: e7c972a3b0c92ba4f8be9938d0c63a43, type: 3} propertyPath: m_Name @@ -1317,6 +1361,11 @@ PrefabInstance: propertyPath: scheme value: objectReference: {fileID: 8989088974132902757} + - target: {fileID: 961077494286650393, guid: e7c972a3b0c92ba4f8be9938d0c63a43, + type: 3} + propertyPath: headerText + value: + objectReference: {fileID: 0} - target: {fileID: 1230197134381729914, guid: e7c972a3b0c92ba4f8be9938d0c63a43, type: 3} propertyPath: m_AnchorMax.y @@ -1342,6 +1391,11 @@ PrefabInstance: propertyPath: scheme value: objectReference: {fileID: 8989088974132902757} + - target: {fileID: 1352001165938647406, guid: e7c972a3b0c92ba4f8be9938d0c63a43, + type: 3} + propertyPath: m_Name + value: Row 3 text + objectReference: {fileID: 0} - target: {fileID: 1403451539240919143, guid: e7c972a3b0c92ba4f8be9938d0c63a43, type: 3} propertyPath: m_Name @@ -1382,6 +1436,26 @@ PrefabInstance: propertyPath: scheme value: objectReference: {fileID: 8989088974132902757} + - target: {fileID: 1780266890080839772, guid: e7c972a3b0c92ba4f8be9938d0c63a43, + type: 3} + propertyPath: m_Name + value: Row 4 text + objectReference: {fileID: 0} + - target: {fileID: 1802401722035639100, guid: e7c972a3b0c92ba4f8be9938d0c63a43, + type: 3} + propertyPath: m_Material + value: + objectReference: {fileID: 0} + - target: {fileID: 1802401722468381944, guid: e7c972a3b0c92ba4f8be9938d0c63a43, + type: 3} + propertyPath: m_Material + value: + objectReference: {fileID: 0} + - target: {fileID: 1802401723612970914, guid: e7c972a3b0c92ba4f8be9938d0c63a43, + type: 3} + propertyPath: m_Material + value: + objectReference: {fileID: 0} - target: {fileID: 2023597310369919779, guid: e7c972a3b0c92ba4f8be9938d0c63a43, type: 3} propertyPath: m_Delegates.Array.data[0].callback.m_PersistentCalls.m_Calls.Array.data[0].m_Target @@ -1392,11 +1466,31 @@ PrefabInstance: propertyPath: m_Delegates.Array.data[1].callback.m_PersistentCalls.m_Calls.Array.data[0].m_Target value: objectReference: {fileID: 7376382230776530698} + - target: {fileID: 2251121041795955683, guid: e7c972a3b0c92ba4f8be9938d0c63a43, + type: 3} + propertyPath: headerText + value: + objectReference: {fileID: 0} - target: {fileID: 2257175534051030449, guid: e7c972a3b0c92ba4f8be9938d0c63a43, type: 3} propertyPath: scheme value: objectReference: {fileID: 8989088974132902757} + - target: {fileID: 2401922752797295982, guid: e7c972a3b0c92ba4f8be9938d0c63a43, + type: 3} + propertyPath: m_Material + value: + objectReference: {fileID: 0} + - target: {fileID: 2401922753433330346, guid: e7c972a3b0c92ba4f8be9938d0c63a43, + type: 3} + propertyPath: m_Material + value: + objectReference: {fileID: 0} + - target: {fileID: 2401922753942670900, guid: e7c972a3b0c92ba4f8be9938d0c63a43, + type: 3} + propertyPath: m_Material + value: + objectReference: {fileID: 0} - target: {fileID: 2481775387260960443, guid: e7c972a3b0c92ba4f8be9938d0c63a43, type: 3} propertyPath: BrowserPanelHeaderBackground @@ -1411,22 +1505,27 @@ PrefabInstance: type: 3} propertyPath: BrowserPanelModListRows.Array.data[0] value: - objectReference: {fileID: 4775361429902235488} + objectReference: {fileID: 0} - target: {fileID: 2481775387260960443, guid: e7c972a3b0c92ba4f8be9938d0c63a43, type: 3} propertyPath: BrowserPanelModListRows.Array.data[1] value: - objectReference: {fileID: 4469279936824551758} + objectReference: {fileID: 0} - target: {fileID: 2481775387260960443, guid: e7c972a3b0c92ba4f8be9938d0c63a43, type: 3} propertyPath: BrowserPanelModListRows.Array.data[2] value: - objectReference: {fileID: 1175854959818829365} + objectReference: {fileID: 0} - target: {fileID: 2481775387260960443, guid: e7c972a3b0c92ba4f8be9938d0c63a43, type: 3} propertyPath: BrowserPanelModListRows.Array.data[3] value: - objectReference: {fileID: 3201472362784923316} + objectReference: {fileID: 0} + - target: {fileID: 2522303128527752034, guid: e7c972a3b0c92ba4f8be9938d0c63a43, + type: 3} + propertyPath: headerText + value: + objectReference: {fileID: 0} - target: {fileID: 2710601352341768161, guid: e7c972a3b0c92ba4f8be9938d0c63a43, type: 3} propertyPath: scheme @@ -1492,6 +1591,16 @@ PrefabInstance: propertyPath: m_AnchorMin.y value: 1 objectReference: {fileID: 0} + - target: {fileID: 4056221102521404262, guid: e7c972a3b0c92ba4f8be9938d0c63a43, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -16.39746 + objectReference: {fileID: 0} + - target: {fileID: 4206131570596699622, guid: e7c972a3b0c92ba4f8be9938d0c63a43, + type: 3} + propertyPath: m_Material + value: + objectReference: {fileID: 0} - target: {fileID: 4380556625283861586, guid: e7c972a3b0c92ba4f8be9938d0c63a43, type: 3} propertyPath: scheme @@ -1527,6 +1636,11 @@ PrefabInstance: propertyPath: m_Delegates.Array.data[1].callback.m_PersistentCalls.m_Calls.Array.data[0].m_Target value: objectReference: {fileID: 7376382230776530698} + - target: {fileID: 5165047951847368633, guid: e7c972a3b0c92ba4f8be9938d0c63a43, + type: 3} + propertyPath: m_Material + value: + objectReference: {fileID: 0} - target: {fileID: 5346609901548097610, guid: e7c972a3b0c92ba4f8be9938d0c63a43, type: 3} propertyPath: scheme @@ -1690,17 +1804,22 @@ PrefabInstance: - target: {fileID: 5760055838030722348, guid: e7c972a3b0c92ba4f8be9938d0c63a43, type: 3} propertyPath: m_AnchorMin.y - value: 0.5979151 + value: 0 objectReference: {fileID: 0} - target: {fileID: 5760055838370208910, guid: e7c972a3b0c92ba4f8be9938d0c63a43, type: 3} propertyPath: m_Size - value: 0.4020849 + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5760055838370208910, guid: e7c972a3b0c92ba4f8be9938d0c63a43, + type: 3} + propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_TargetAssemblyTypeName + value: ModIOBrowser.Implementation.Home, modio.UI objectReference: {fileID: 0} - target: {fileID: 5760055838395833916, guid: e7c972a3b0c92ba4f8be9938d0c63a43, type: 3} propertyPath: m_SizeDelta.y - value: 2686 + value: 994 objectReference: {fileID: 0} - target: {fileID: 5760055838864409643, guid: e7c972a3b0c92ba4f8be9938d0c63a43, type: 3} @@ -1720,7 +1839,7 @@ PrefabInstance: - target: {fileID: 5760055838864409643, guid: e7c972a3b0c92ba4f8be9938d0c63a43, type: 3} propertyPath: m_AnchoredPosition.y - value: -2646 + value: -954 objectReference: {fileID: 0} - target: {fileID: 5760055839024060862, guid: e7c972a3b0c92ba4f8be9938d0c63a43, type: 3} @@ -1810,7 +1929,7 @@ PrefabInstance: - target: {fileID: 6661404417012533100, guid: e7c972a3b0c92ba4f8be9938d0c63a43, type: 3} propertyPath: m_AnchoredPosition.y - value: -20 + value: -36.39746 objectReference: {fileID: 0} - target: {fileID: 6677660644696604223, guid: e7c972a3b0c92ba4f8be9938d0c63a43, type: 3} @@ -1852,6 +1971,11 @@ PrefabInstance: propertyPath: scheme value: objectReference: {fileID: 8989088974132902757} + - target: {fileID: 6970245048652602738, guid: e7c972a3b0c92ba4f8be9938d0c63a43, + type: 3} + propertyPath: m_Name + value: Row 2 text + objectReference: {fileID: 0} - target: {fileID: 7000493217150169880, guid: e7c972a3b0c92ba4f8be9938d0c63a43, type: 3} propertyPath: m_Name @@ -1952,6 +2076,11 @@ PrefabInstance: propertyPath: m_AnchoredPosition.y value: -1516.5 objectReference: {fileID: 0} + - target: {fileID: 8148420632553304631, guid: e7c972a3b0c92ba4f8be9938d0c63a43, + type: 3} + propertyPath: headerText + value: + objectReference: {fileID: 0} - target: {fileID: 8159661877114048582, guid: e7c972a3b0c92ba4f8be9938d0c63a43, type: 3} propertyPath: scheme @@ -1967,20 +2096,13 @@ PrefabInstance: propertyPath: m_Delegates.Array.data[1].callback.m_PersistentCalls.m_Calls.Array.data[0].m_Target value: objectReference: {fileID: 7376382230776530698} + - target: {fileID: 9222208111481607727, guid: e7c972a3b0c92ba4f8be9938d0c63a43, + type: 3} + propertyPath: m_Material + value: + objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e7c972a3b0c92ba4f8be9938d0c63a43, type: 3} ---- !u!1 &8989088974670517170 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 5760055837242226405, guid: e7c972a3b0c92ba4f8be9938d0c63a43, - type: 3} - m_PrefabInstance: {fileID: 3697592250992239959} - m_PrefabAsset: {fileID: 0} ---- !u!224 &8989088974670517171 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 5760055837242226404, guid: e7c972a3b0c92ba4f8be9938d0c63a43, - type: 3} - m_PrefabInstance: {fileID: 3697592250992239959} - m_PrefabAsset: {fileID: 0} --- !u!114 &1234396549239151596 stripped MonoBehaviour: m_CorrespondingSourceObject: {fileID: 2481775387260960443, guid: e7c972a3b0c92ba4f8be9938d0c63a43, @@ -1993,54 +2115,18 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: f9a181712313aa74597d2fd0cad977f4, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!114 &1345671315508899556 stripped -MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 2449030627395505075, guid: e7c972a3b0c92ba4f8be9938d0c63a43, - type: 3} - m_PrefabInstance: {fileID: 3697592250992239959} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 811030f917147504589eb74c563a0d3a, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!114 &3201472362784923316 stripped -MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 2251121041795955683, guid: e7c972a3b0c92ba4f8be9938d0c63a43, - type: 3} - m_PrefabInstance: {fileID: 3697592250992239959} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 7c24c539ef8622a49a05be42a385d095, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!114 &1175854959818829365 stripped -MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 2522303128527752034, guid: e7c972a3b0c92ba4f8be9938d0c63a43, +--- !u!224 &8989088974670517171 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 5760055837242226404, guid: e7c972a3b0c92ba4f8be9938d0c63a43, type: 3} m_PrefabInstance: {fileID: 3697592250992239959} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 7c24c539ef8622a49a05be42a385d095, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!114 &4469279936824551758 stripped -MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 961077494286650393, guid: e7c972a3b0c92ba4f8be9938d0c63a43, +--- !u!1 &8989088974670517170 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 5760055837242226405, guid: e7c972a3b0c92ba4f8be9938d0c63a43, type: 3} m_PrefabInstance: {fileID: 3697592250992239959} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 7c24c539ef8622a49a05be42a385d095, type: 3} - m_Name: - m_EditorClassIdentifier: --- !u!1 &1893516736281489272 stripped GameObject: m_CorrespondingSourceObject: {fileID: 2960945230090701359, guid: e7c972a3b0c92ba4f8be9938d0c63a43, @@ -2077,24 +2163,24 @@ GameObject: type: 3} m_PrefabInstance: {fileID: 3697592250992239959} m_PrefabAsset: {fileID: 0} ---- !u!114 &4775361429902235488 stripped +--- !u!1 &8111701777903851331 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 4882730228293317140, guid: e7c972a3b0c92ba4f8be9938d0c63a43, + type: 3} + m_PrefabInstance: {fileID: 3697592250992239959} + m_PrefabAsset: {fileID: 0} +--- !u!114 &1345671315508899556 stripped MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 8148420632553304631, guid: e7c972a3b0c92ba4f8be9938d0c63a43, + m_CorrespondingSourceObject: {fileID: 2449030627395505075, guid: e7c972a3b0c92ba4f8be9938d0c63a43, type: 3} m_PrefabInstance: {fileID: 3697592250992239959} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 0} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 7c24c539ef8622a49a05be42a385d095, type: 3} + m_Script: {fileID: 11500000, guid: 811030f917147504589eb74c563a0d3a, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!1 &8111701777903851331 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 4882730228293317140, guid: e7c972a3b0c92ba4f8be9938d0c63a43, - type: 3} - m_PrefabInstance: {fileID: 3697592250992239959} - m_PrefabAsset: {fileID: 0} --- !u!1001 &3983697154900495466 PrefabInstance: m_ObjectHideFlags: 0 @@ -2120,7 +2206,7 @@ PrefabInstance: - target: {fileID: 5473922759698932873, guid: b6b79b4f8e6f7204caf690ec4a93fdfc, type: 3} propertyPath: m_RootOrder - value: 11 + value: 10 objectReference: {fileID: 0} - target: {fileID: 5473922759698932873, guid: b6b79b4f8e6f7204caf690ec4a93fdfc, type: 3} @@ -3033,6 +3119,11 @@ PrefabInstance: propertyPath: m_Name value: ModDetails Panel objectReference: {fileID: 0} + - target: {fileID: 3273039434983351812, guid: d54a705255921934c9d7e49fdc181f47, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 3273039434997191342, guid: d54a705255921934c9d7e49fdc181f47, type: 3} propertyPath: m_SizeDelta.y @@ -3360,9 +3451,9 @@ PrefabInstance: objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: d54a705255921934c9d7e49fdc181f47, type: 3} ---- !u!1 &763285129751173082 stripped +--- !u!1 &8989088974764450387 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 6576450648925541261, guid: d54a705255921934c9d7e49fdc181f47, + m_CorrespondingSourceObject: {fileID: 3273039434983351812, guid: d54a705255921934c9d7e49fdc181f47, type: 3} m_PrefabInstance: {fileID: 5896202355328681047} m_PrefabAsset: {fileID: 0} @@ -3378,21 +3469,27 @@ GameObject: type: 3} m_PrefabInstance: {fileID: 5896202355328681047} m_PrefabAsset: {fileID: 0} ---- !u!1 &8989088974647900553 stripped +--- !u!1 &8989088973867553284 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 3273039434906648030, guid: d54a705255921934c9d7e49fdc181f47, + m_CorrespondingSourceObject: {fileID: 3273039434092746323, guid: d54a705255921934c9d7e49fdc181f47, type: 3} m_PrefabInstance: {fileID: 5896202355328681047} m_PrefabAsset: {fileID: 0} ---- !u!1 &8989088973867553284 stripped +--- !u!1 &8989088974266968825 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 3273039434092746323, guid: d54a705255921934c9d7e49fdc181f47, + m_CorrespondingSourceObject: {fileID: 3273039434490064558, guid: d54a705255921934c9d7e49fdc181f47, type: 3} m_PrefabInstance: {fileID: 5896202355328681047} m_PrefabAsset: {fileID: 0} ---- !u!1 &8989088974266968825 stripped +--- !u!1 &763285129751173082 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 3273039434490064558, guid: d54a705255921934c9d7e49fdc181f47, + m_CorrespondingSourceObject: {fileID: 6576450648925541261, guid: d54a705255921934c9d7e49fdc181f47, + type: 3} + m_PrefabInstance: {fileID: 5896202355328681047} + m_PrefabAsset: {fileID: 0} +--- !u!1 &8989088974647900553 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 3273039434906648030, guid: d54a705255921934c9d7e49fdc181f47, type: 3} m_PrefabInstance: {fileID: 5896202355328681047} m_PrefabAsset: {fileID: 0} @@ -3486,7 +3583,7 @@ PrefabInstance: - target: {fileID: 6163454308962251714, guid: 8c6ca06ea3133cd4f8c7798a423b65f8, type: 3} propertyPath: ControllerButtonIcons.Array.size - value: 23 + value: 24 objectReference: {fileID: 0} - target: {fileID: 6163454308962251714, guid: 8c6ca06ea3133cd4f8c7798a423b65f8, type: 3} @@ -3502,7 +3599,7 @@ PrefabInstance: type: 3} propertyPath: ControllerButtonIcons.Array.data[2] value: - objectReference: {fileID: 1893516735102037498} + objectReference: {fileID: 6950018146090014768} - target: {fileID: 6163454308962251714, guid: 8c6ca06ea3133cd4f8c7798a423b65f8, type: 3} propertyPath: ControllerButtonIcons.Array.data[3] @@ -3603,20 +3700,30 @@ PrefabInstance: propertyPath: ControllerButtonIcons.Array.data[22] value: objectReference: {fileID: 4640771623417470035} + - target: {fileID: 6163454308962251714, guid: 8c6ca06ea3133cd4f8c7798a423b65f8, + type: 3} + propertyPath: ControllerButtonIcons.Array.data[23] + value: + objectReference: {fileID: 7156451344820862894} + - target: {fileID: 6163454308962251714, guid: 8c6ca06ea3133cd4f8c7798a423b65f8, + type: 3} + propertyPath: ControllerButtonIcons.Array.data[24] + value: + objectReference: {fileID: 7156451344820862894} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 8c6ca06ea3133cd4f8c7798a423b65f8, type: 3} ---- !u!4 &1980296656040563514 stripped -Transform: - m_CorrespondingSourceObject: {fileID: 5190045006183204375, guid: 8c6ca06ea3133cd4f8c7798a423b65f8, - type: 3} - m_PrefabInstance: {fileID: 6016196942305301805} - m_PrefabAsset: {fileID: 0} --- !u!1 &4863312031803210161 stripped GameObject: m_CorrespondingSourceObject: {fileID: 1152965179246734492, guid: 8c6ca06ea3133cd4f8c7798a423b65f8, type: 3} m_PrefabInstance: {fileID: 6016196942305301805} m_PrefabAsset: {fileID: 0} +--- !u!4 &1980296656040563514 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 5190045006183204375, guid: 8c6ca06ea3133cd4f8c7798a423b65f8, + type: 3} + m_PrefabInstance: {fileID: 6016196942305301805} + m_PrefabAsset: {fileID: 0} --- !u!1001 &6269981554021496266 PrefabInstance: m_ObjectHideFlags: 0 @@ -3749,6 +3856,11 @@ PrefabInstance: propertyPath: uninstallConfirmationPanelFileSize value: objectReference: {fileID: 8989088974966039233} + - target: {fileID: 5567694271374581542, guid: 984b45bb8f473594a90406837fcc03f6, + type: 3} + propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_TargetAssemblyTypeName + value: ModIOBrowser.Implementation.Collection, modio.UI + objectReference: {fileID: 0} - target: {fileID: 5634869264469495778, guid: 984b45bb8f473594a90406837fcc03f6, type: 3} propertyPath: scheme @@ -3764,6 +3876,11 @@ PrefabInstance: propertyPath: scheme value: objectReference: {fileID: 8989088974132902757} + - target: {fileID: 6878629681347413742, guid: 984b45bb8f473594a90406837fcc03f6, + type: 3} + propertyPath: m_Options.m_Options.Array.size + value: 3 + objectReference: {fileID: 0} - target: {fileID: 6878629682095833423, guid: 984b45bb8f473594a90406837fcc03f6, type: 3} propertyPath: scheme @@ -3776,18 +3893,6 @@ PrefabInstance: objectReference: {fileID: 8989088974132902757} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 984b45bb8f473594a90406837fcc03f6, type: 3} ---- !u!1 &8989088974680782485 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 3151635505209770847, guid: 984b45bb8f473594a90406837fcc03f6, - type: 3} - m_PrefabInstance: {fileID: 6269981554021496266} - m_PrefabAsset: {fileID: 0} ---- !u!224 &8989088974680782486 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 3151635505209770844, guid: 984b45bb8f473594a90406837fcc03f6, - type: 3} - m_PrefabInstance: {fileID: 6269981554021496266} - m_PrefabAsset: {fileID: 0} --- !u!114 &1410451707985475524 stripped MonoBehaviour: m_CorrespondingSourceObject: {fileID: 4940903284276904462, guid: 984b45bb8f473594a90406837fcc03f6, @@ -3800,12 +3905,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 25058e2ef49af6545a955cef5bced6cb, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!1 &6263020595006076978 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 137864518997446136, guid: 984b45bb8f473594a90406837fcc03f6, - type: 3} - m_PrefabInstance: {fileID: 6269981554021496266} - m_PrefabAsset: {fileID: 0} --- !u!114 &1815057015430150696 stripped MonoBehaviour: m_CorrespondingSourceObject: {fileID: 5634869264469495778, guid: 984b45bb8f473594a90406837fcc03f6, @@ -3818,182 +3917,24 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d5ce6686d7065cf4986b2ed3e2773c96, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!1001 &6353855248690981509 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 8989088974461564262} - m_Modifications: - - target: {fileID: 2635385768219430501, guid: 4e3560bff46556f4b8dcdd3e31f54a32, - type: 3} - propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target - value: - objectReference: {fileID: 8989088974132902753} - - target: {fileID: 2635385768219430501, guid: 4e3560bff46556f4b8dcdd3e31f54a32, - type: 3} - propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[1].m_Target - value: - objectReference: {fileID: 7376382230776530698} - - target: {fileID: 2635385768219430554, guid: 4e3560bff46556f4b8dcdd3e31f54a32, - type: 3} - propertyPath: m_Pivot.x - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 2635385768219430554, guid: 4e3560bff46556f4b8dcdd3e31f54a32, - type: 3} - propertyPath: m_Pivot.y - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 2635385768219430554, guid: 4e3560bff46556f4b8dcdd3e31f54a32, - type: 3} - propertyPath: m_RootOrder - value: 6 - objectReference: {fileID: 0} - - target: {fileID: 2635385768219430554, guid: 4e3560bff46556f4b8dcdd3e31f54a32, - type: 3} - propertyPath: m_AnchorMax.x - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 2635385768219430554, guid: 4e3560bff46556f4b8dcdd3e31f54a32, - type: 3} - propertyPath: m_AnchorMax.y - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 2635385768219430554, guid: 4e3560bff46556f4b8dcdd3e31f54a32, - type: 3} - propertyPath: m_AnchorMin.x - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 2635385768219430554, guid: 4e3560bff46556f4b8dcdd3e31f54a32, - type: 3} - propertyPath: m_AnchorMin.y - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 2635385768219430554, guid: 4e3560bff46556f4b8dcdd3e31f54a32, - type: 3} - propertyPath: m_SizeDelta.x - value: 48 - objectReference: {fileID: 0} - - target: {fileID: 2635385768219430554, guid: 4e3560bff46556f4b8dcdd3e31f54a32, - type: 3} - propertyPath: m_SizeDelta.y - value: 48 - objectReference: {fileID: 0} - - target: {fileID: 2635385768219430554, guid: 4e3560bff46556f4b8dcdd3e31f54a32, - type: 3} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 2635385768219430554, guid: 4e3560bff46556f4b8dcdd3e31f54a32, - type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 2635385768219430554, guid: 4e3560bff46556f4b8dcdd3e31f54a32, - type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 2635385768219430554, guid: 4e3560bff46556f4b8dcdd3e31f54a32, - type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 2635385768219430554, guid: 4e3560bff46556f4b8dcdd3e31f54a32, - type: 3} - propertyPath: m_LocalRotation.x - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 2635385768219430554, guid: 4e3560bff46556f4b8dcdd3e31f54a32, - type: 3} - propertyPath: m_LocalRotation.y - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 2635385768219430554, guid: 4e3560bff46556f4b8dcdd3e31f54a32, - type: 3} - propertyPath: m_LocalRotation.z - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 2635385768219430554, guid: 4e3560bff46556f4b8dcdd3e31f54a32, - type: 3} - propertyPath: m_AnchoredPosition.x - value: -80 - objectReference: {fileID: 0} - - target: {fileID: 2635385768219430554, guid: 4e3560bff46556f4b8dcdd3e31f54a32, - type: 3} - propertyPath: m_AnchoredPosition.y - value: -40 - objectReference: {fileID: 0} - - target: {fileID: 2635385768219430554, guid: 4e3560bff46556f4b8dcdd3e31f54a32, - type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 2635385768219430554, guid: 4e3560bff46556f4b8dcdd3e31f54a32, - type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 2635385768219430554, guid: 4e3560bff46556f4b8dcdd3e31f54a32, - type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 2635385768219430555, guid: 4e3560bff46556f4b8dcdd3e31f54a32, - type: 3} - propertyPath: m_Name - value: Log in & settings - objectReference: {fileID: 0} - - target: {fileID: 7422655373767724808, guid: 4e3560bff46556f4b8dcdd3e31f54a32, - type: 3} - propertyPath: m_Delegates.Array.data[0].callback.m_PersistentCalls.m_Calls.Array.data[0].m_Target - value: - objectReference: {fileID: 7376382230776530698} - m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: 4e3560bff46556f4b8dcdd3e31f54a32, type: 3} ---- !u!224 &8989088973446767647 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 2635385768219430554, guid: 4e3560bff46556f4b8dcdd3e31f54a32, - type: 3} - m_PrefabInstance: {fileID: 6353855248690981509} - m_PrefabAsset: {fileID: 0} ---- !u!114 &8989088974616621303 stripped -MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 2635385769247464050, guid: 4e3560bff46556f4b8dcdd3e31f54a32, +--- !u!1 &6263020595006076978 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 137864518997446136, guid: 984b45bb8f473594a90406837fcc03f6, type: 3} - m_PrefabInstance: {fileID: 6353855248690981509} + m_PrefabInstance: {fileID: 6269981554021496266} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!114 &1893516735333817471 stripped -MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 4785763858246432506, guid: 4e3560bff46556f4b8dcdd3e31f54a32, +--- !u!1 &8989088974680782485 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 3151635505209770847, guid: 984b45bb8f473594a90406837fcc03f6, type: 3} - m_PrefabInstance: {fileID: 6353855248690981509} + m_PrefabInstance: {fileID: 6269981554021496266} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!114 &7700590130810735432 stripped -MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 3670592316288033229, guid: 4e3560bff46556f4b8dcdd3e31f54a32, +--- !u!224 &8989088974680782486 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 3151635505209770844, guid: 984b45bb8f473594a90406837fcc03f6, type: 3} - m_PrefabInstance: {fileID: 6353855248690981509} + m_PrefabInstance: {fileID: 6269981554021496266} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: --- !u!1001 &6741842186263786144 PrefabInstance: m_ObjectHideFlags: 0 @@ -4019,7 +3960,7 @@ PrefabInstance: - target: {fileID: 2391549340146156331, guid: b453efa2342c8cd42bacda122d59b301, type: 3} propertyPath: m_RootOrder - value: 12 + value: 11 objectReference: {fileID: 0} - target: {fileID: 2391549340146156331, guid: b453efa2342c8cd42bacda122d59b301, type: 3} @@ -4111,6 +4052,11 @@ PrefabInstance: propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} + - target: {fileID: 2391549340436633847, guid: b453efa2342c8cd42bacda122d59b301, + type: 3} + propertyPath: m_text + value: + objectReference: {fileID: 0} - target: {fileID: 2469945915458081697, guid: b453efa2342c8cd42bacda122d59b301, type: 3} propertyPath: scheme @@ -4176,8 +4122,15 @@ PrefabInstance: propertyPath: scheme value: objectReference: {fileID: 8989088974132902757} - m_RemovedComponents: [] + m_RemovedComponents: + - {fileID: 686795022750109565, guid: b453efa2342c8cd42bacda122d59b301, type: 3} m_SourcePrefab: {fileID: 100100000, guid: b453efa2342c8cd42bacda122d59b301, type: 3} +--- !u!1 &8989088973532279178 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 2391549340146156330, guid: b453efa2342c8cd42bacda122d59b301, + type: 3} + m_PrefabInstance: {fileID: 6741842186263786144} + m_PrefabAsset: {fileID: 0} --- !u!224 &8989088973532279179 stripped RectTransform: m_CorrespondingSourceObject: {fileID: 2391549340146156331, guid: b453efa2342c8cd42bacda122d59b301, @@ -4190,12 +4143,6 @@ GameObject: type: 3} m_PrefabInstance: {fileID: 6741842186263786144} m_PrefabAsset: {fileID: 0} ---- !u!1 &8989088973532279178 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 2391549340146156330, guid: b453efa2342c8cd42bacda122d59b301, - type: 3} - m_PrefabInstance: {fileID: 6741842186263786144} - m_PrefabAsset: {fileID: 0} --- !u!1001 &8018839883092652917 PrefabInstance: m_ObjectHideFlags: 0 @@ -4266,7 +4213,7 @@ PrefabInstance: - target: {fileID: 1936326553840626492, guid: 8d555f103a7dc374c9fe923c5a06f8d3, type: 3} propertyPath: m_RootOrder - value: 14 + value: 13 objectReference: {fileID: 0} - target: {fileID: 1936326553840626492, guid: 8d555f103a7dc374c9fe923c5a06f8d3, type: 3} @@ -4395,18 +4342,18 @@ PrefabInstance: objectReference: {fileID: 8989088974132902757} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 8d555f103a7dc374c9fe923c5a06f8d3, type: 3} ---- !u!224 &8473402708461312073 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 1936326553840626492, guid: 8d555f103a7dc374c9fe923c5a06f8d3, - type: 3} - m_PrefabInstance: {fileID: 8018839883092652917} - m_PrefabAsset: {fileID: 0} --- !u!1 &5471285212197136237 stripped GameObject: m_CorrespondingSourceObject: {fileID: 2640600915461231640, guid: 8d555f103a7dc374c9fe923c5a06f8d3, type: 3} m_PrefabInstance: {fileID: 8018839883092652917} m_PrefabAsset: {fileID: 0} +--- !u!224 &8473402708461312073 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 1936326553840626492, guid: 8d555f103a7dc374c9fe923c5a06f8d3, + type: 3} + m_PrefabInstance: {fileID: 8018839883092652917} + m_PrefabAsset: {fileID: 0} --- !u!1001 &8116026125585663092 PrefabInstance: m_ObjectHideFlags: 0 @@ -4432,7 +4379,7 @@ PrefabInstance: - target: {fileID: 873207984212787039, guid: 4ebcda84dcabb7c478414af24f21764b, type: 3} propertyPath: m_RootOrder - value: 13 + value: 12 objectReference: {fileID: 0} - target: {fileID: 873207984212787039, guid: 4ebcda84dcabb7c478414af24f21764b, type: 3} @@ -4527,18 +4474,18 @@ PrefabInstance: m_RemovedComponents: - {fileID: 873207985097786796, guid: 4ebcda84dcabb7c478414af24f21764b, type: 3} m_SourcePrefab: {fileID: 100100000, guid: 4ebcda84dcabb7c478414af24f21764b, type: 3} ---- !u!224 &8989088974196407083 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 873207984212787039, guid: 4ebcda84dcabb7c478414af24f21764b, - type: 3} - m_PrefabInstance: {fileID: 8116026125585663092} - m_PrefabAsset: {fileID: 0} --- !u!1 &8989088974196407082 stripped GameObject: m_CorrespondingSourceObject: {fileID: 873207984212787038, guid: 4ebcda84dcabb7c478414af24f21764b, type: 3} m_PrefabInstance: {fileID: 8116026125585663092} m_PrefabAsset: {fileID: 0} +--- !u!224 &8989088974196407083 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 873207984212787039, guid: 4ebcda84dcabb7c478414af24f21764b, + type: 3} + m_PrefabInstance: {fileID: 8116026125585663092} + m_PrefabAsset: {fileID: 0} --- !u!1001 &8896866077704013097 PrefabInstance: m_ObjectHideFlags: 0 @@ -4586,14 +4533,44 @@ PrefabInstance: propertyPath: m_SizeDelta.y value: 76 objectReference: {fileID: 0} - - target: {fileID: 560606090239388176, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + - target: {fileID: 560606089867562705, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, type: 3} - propertyPath: scheme - value: - objectReference: {fileID: 8989088974132902757} - - target: {fileID: 560606090239388176, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 560606090235584822, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, type: 3} - propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target + propertyPath: m_SizeDelta.x + value: 495.9917 + objectReference: {fileID: 0} + - target: {fileID: 560606090235584822, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 560606090235584822, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -12.379 + objectReference: {fileID: 0} + - target: {fileID: 560606090235584969, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 8989088974132902753} + - target: {fileID: 560606090235584969, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[1].m_Target + value: + objectReference: {fileID: 7376382230776530698} + - target: {fileID: 560606090239388176, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: scheme + value: + objectReference: {fileID: 8989088974132902757} + - target: {fileID: 560606090239388176, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target value: objectReference: {fileID: 1234396549239151596} - target: {fileID: 560606090239388177, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, @@ -4746,11 +4723,116 @@ PrefabInstance: propertyPath: m_AnchoredPosition.y value: -60 objectReference: {fileID: 0} + - target: {fileID: 562619462984882778, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_AnchoredPosition.x + value: -524 + objectReference: {fileID: 0} + - target: {fileID: 562619462984882778, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -30 + objectReference: {fileID: 0} - target: {fileID: 562619463613292778, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, type: 3} propertyPath: m_SizeDelta.x value: 112.38 objectReference: {fileID: 0} + - target: {fileID: 988896386800685474, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_Material + value: + objectReference: {fileID: 0} + - target: {fileID: 1393303373016408450, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1591409641904946996, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 1591409641904946996, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 1591409641904946996, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 171.3055 + objectReference: {fileID: 0} + - target: {fileID: 1591409641904946996, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -24 + objectReference: {fileID: 0} + - target: {fileID: 1646717901353490419, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 1646717901353490419, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 1646717901353490419, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 323.1317 + objectReference: {fileID: 0} + - target: {fileID: 1646717901353490419, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -9.620499 + objectReference: {fileID: 0} + - target: {fileID: 2535239095076763265, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2535239095076763265, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2535239095076763265, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2535239095076763265, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3375936234974478591, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_Material + value: + objectReference: {fileID: 0} + - target: {fileID: 4246028985604802022, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4246028985604802022, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4246028985604802022, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 368.1317 + objectReference: {fileID: 0} + - target: {fileID: 4246028985604802022, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -37.6205 + objectReference: {fileID: 0} - target: {fileID: 4730910680235919201, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, type: 3} propertyPath: m_AnchorMax.y @@ -4766,6 +4848,31 @@ PrefabInstance: propertyPath: m_AnchoredPosition.y value: -60 objectReference: {fileID: 0} + - target: {fileID: 4924678067125657764, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_Delegates.Array.data[0].callback.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 7376382230776530698} + - target: {fileID: 5068241131894300839, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5068241131894300839, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5068241131894300839, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 64.682495 + objectReference: {fileID: 0} + - target: {fileID: 5068241131894300839, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -20 + objectReference: {fileID: 0} - target: {fileID: 5092890575640994308, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, type: 3} propertyPath: m_AnchorMax.y @@ -4786,6 +4893,31 @@ PrefabInstance: propertyPath: m_AnchoredPosition.y value: -20 objectReference: {fileID: 0} + - target: {fileID: 5142903950628767386, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: type + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 5695135102441973699, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5695135102441973699, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5695135102441973699, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 379.1317 + objectReference: {fileID: 0} + - target: {fileID: 5695135102441973699, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -37.6205 + objectReference: {fileID: 0} - target: {fileID: 6287728955139665166, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, type: 3} propertyPath: m_AnchorMax.y @@ -4836,6 +4968,57 @@ PrefabInstance: propertyPath: m_AnchoredPosition.y value: -20 objectReference: {fileID: 0} + - target: {fileID: 6330961717762556469, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6330961717762556469, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6330961717762556469, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 159.3055 + objectReference: {fileID: 0} + - target: {fileID: 6330961717762556469, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6465563698864372916, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_Sprite + value: + objectReference: {fileID: 21300000, guid: 91a797609e9a1bf4eafc93d15a99087f, + type: 3} + - target: {fileID: 6465563698864372916, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_Material + value: + objectReference: {fileID: 0} + - target: {fileID: 6727707990429294451, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6727707990429294451, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6727707990429294451, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 357.1317 + objectReference: {fileID: 0} + - target: {fileID: 6727707990429294451, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -37.6205 + objectReference: {fileID: 0} - target: {fileID: 7007350329050589388, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, type: 3} propertyPath: m_AnchorMax.y @@ -4876,16 +5059,143 @@ PrefabInstance: propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target value: objectReference: {fileID: 5576515969151178355} - - target: {fileID: 9210249928777495307, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + - target: {fileID: 7255435821290005748, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, type: 3} - propertyPath: m_Name - value: Cue (Home Back) + propertyPath: m_AnchorMax.y + value: 1 objectReference: {fileID: 0} - m_RemovedComponents: [] + - target: {fileID: 7255435821290005748, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7255435821290005748, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 83.65275 + objectReference: {fileID: 0} + - target: {fileID: 7255435821290005748, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -24 + objectReference: {fileID: 0} + - target: {fileID: 7782945172804304016, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: Wallet + value: + objectReference: {fileID: 0} + - target: {fileID: 7782945172804304016, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: WalletBalance + value: + objectReference: {fileID: 0} + - target: {fileID: 8062494020531976192, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8062494020531976192, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8062494020531976192, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 453.1317 + objectReference: {fileID: 0} + - target: {fileID: 8062494020531976192, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -37.6205 + objectReference: {fileID: 0} + - target: {fileID: 8312772368833659750, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: scheme + value: + objectReference: {fileID: 8989088974132902757} + - target: {fileID: 8312772368833659750, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 5576515969151178355} + - target: {fileID: 8312772368833659750, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName + value: Open + objectReference: {fileID: 0} + - target: {fileID: 8312772368833659750, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_TargetAssemblyTypeName + value: ModIOBrowser.Implementation.SearchPanel, modio.UI + objectReference: {fileID: 0} + - target: {fileID: 8847214380725033238, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8847214380725033238, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8847214380725033238, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_SizeDelta.x + value: 214.1655 + objectReference: {fileID: 0} + - target: {fileID: 8847214380725033238, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 154.96619 + objectReference: {fileID: 0} + - target: {fileID: 8847214380725033238, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -37.6205 + objectReference: {fileID: 0} + - target: {fileID: 9136428307853343160, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_Type + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9136428307853343160, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_Sprite + value: + objectReference: {fileID: 21300000, guid: 04ac989bccda5f643a7a8cfa7a47aa49, + type: 3} + - target: {fileID: 9136428307853343160, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + propertyPath: m_Material + value: + objectReference: {fileID: 0} + m_RemovedComponents: + - {fileID: 7736356375049826069, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, type: 3} + - {fileID: 3585114578929046476, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, type: 3} + - {fileID: 930637906393483067, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, type: 3} m_SourcePrefab: {fileID: 100100000, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, type: 3} ---- !u!224 &8989088974283087999 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 560606090467960150, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, +--- !u!114 &1893516735333817471 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 7007350327746828630, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + m_PrefabInstance: {fileID: 8896866077704013097} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &8989088974207088660 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 560606090551311677, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + m_PrefabInstance: {fileID: 8896866077704013097} + m_PrefabAsset: {fileID: 0} +--- !u!1 &6753836796470259977 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 2792924766965019680, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, type: 3} m_PrefabInstance: {fileID: 8896866077704013097} m_PrefabAsset: {fileID: 0} @@ -4901,33 +5211,51 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!1 &335910751553992226 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 9210249928777495307, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, +--- !u!224 &8989088974283087999 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 560606090467960150, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, type: 3} m_PrefabInstance: {fileID: 8896866077704013097} m_PrefabAsset: {fileID: 0} ---- !u!1 &21915061759306078 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 8878247632055676023, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, +--- !u!114 &8989088974616621303 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 560606089064887774, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, type: 3} m_PrefabInstance: {fileID: 8896866077704013097} m_PrefabAsset: {fileID: 0} ---- !u!1 &6753836796470259977 stripped + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &6950018146090014768 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 2792924766965019680, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + m_CorrespondingSourceObject: {fileID: 1948765754777378073, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, type: 3} m_PrefabInstance: {fileID: 8896866077704013097} m_PrefabAsset: {fileID: 0} ---- !u!1 &1893516735102037498 stripped +--- !u!114 &7700590130810735432 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 1271696677494787681, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + type: 3} + m_PrefabInstance: {fileID: 8896866077704013097} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &7156451344820862894 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 7007350329050589395, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + m_CorrespondingSourceObject: {fileID: 1740876670579817095, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, type: 3} m_PrefabInstance: {fileID: 8896866077704013097} m_PrefabAsset: {fileID: 0} ---- !u!1 &8989088974207088660 stripped +--- !u!1 &335910751553992226 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 560606090551311677, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, + m_CorrespondingSourceObject: {fileID: 9210249928777495307, guid: 6b45abbbd75a04c4eba1c3b9ad9e5ad7, type: 3} m_PrefabInstance: {fileID: 8896866077704013097} m_PrefabAsset: {fileID: 0} @@ -4956,7 +5284,7 @@ PrefabInstance: - target: {fileID: 22805387498254737, guid: 0a464bb150d6dbe46b938abf56a57201, type: 3} propertyPath: m_RootOrder - value: 9 + value: 8 objectReference: {fileID: 0} - target: {fileID: 22805387498254737, guid: 0a464bb150d6dbe46b938abf56a57201, type: 3} @@ -5070,9 +5398,15 @@ PrefabInstance: objectReference: {fileID: 1410451707985475524} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 0a464bb150d6dbe46b938abf56a57201, type: 3} ---- !u!114 &8989088974966039233 stripped +--- !u!224 &8989088974637467835 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 22805387498254737, guid: 0a464bb150d6dbe46b938abf56a57201, + type: 3} + m_PrefabInstance: {fileID: 9002323654564509994} + m_PrefabAsset: {fileID: 0} +--- !u!114 &1893516735381758481 stripped MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 22805388228484075, guid: 0a464bb150d6dbe46b938abf56a57201, + m_CorrespondingSourceObject: {fileID: 7397640514918816571, guid: 0a464bb150d6dbe46b938abf56a57201, type: 3} m_PrefabInstance: {fileID: 9002323654564509994} m_PrefabAsset: {fileID: 0} @@ -5082,9 +5416,9 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!114 &1893516735381758481 stripped +--- !u!114 &8989088974966039233 stripped MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 7397640514918816571, guid: 0a464bb150d6dbe46b938abf56a57201, + m_CorrespondingSourceObject: {fileID: 22805388228484075, guid: 0a464bb150d6dbe46b938abf56a57201, type: 3} m_PrefabInstance: {fileID: 9002323654564509994} m_PrefabAsset: {fileID: 0} @@ -5094,9 +5428,9 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!224 &8989088974637467835 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 22805387498254737, guid: 0a464bb150d6dbe46b938abf56a57201, +--- !u!1 &6263020594378363610 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 3027568656160205808, guid: 0a464bb150d6dbe46b938abf56a57201, type: 3} m_PrefabInstance: {fileID: 9002323654564509994} m_PrefabAsset: {fileID: 0} @@ -5106,12 +5440,6 @@ GameObject: type: 3} m_PrefabInstance: {fileID: 9002323654564509994} m_PrefabAsset: {fileID: 0} ---- !u!1 &6263020594378363610 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 3027568656160205808, guid: 0a464bb150d6dbe46b938abf56a57201, - type: 3} - m_PrefabInstance: {fileID: 9002323654564509994} - m_PrefabAsset: {fileID: 0} --- !u!1001 &9002439468039494841 PrefabInstance: m_ObjectHideFlags: 0 @@ -5137,7 +5465,7 @@ PrefabInstance: - target: {fileID: 22727128957527461, guid: 767ce36082d6519459c23650a28a5f29, type: 3} propertyPath: m_RootOrder - value: 7 + value: 6 objectReference: {fileID: 0} - target: {fileID: 22727128957527461, guid: 767ce36082d6519459c23650a28a5f29, type: 3} @@ -5257,12 +5585,36 @@ GameObject: type: 3} m_PrefabInstance: {fileID: 9002439468039494841} m_PrefabAsset: {fileID: 0} +--- !u!1 &8989088974781053211 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 22727128957527458, guid: 767ce36082d6519459c23650a28a5f29, + type: 3} + m_PrefabInstance: {fileID: 9002439468039494841} + m_PrefabAsset: {fileID: 0} +--- !u!224 &8989088974781053212 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 22727128957527461, guid: 767ce36082d6519459c23650a28a5f29, + type: 3} + m_PrefabInstance: {fileID: 9002439468039494841} + m_PrefabAsset: {fileID: 0} --- !u!1 &4937160983271311031 stripped GameObject: m_CorrespondingSourceObject: {fileID: 4065421421365254670, guid: 767ce36082d6519459c23650a28a5f29, type: 3} m_PrefabInstance: {fileID: 9002439468039494841} m_PrefabAsset: {fileID: 0} +--- !u!1 &1893516735354700757 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 7397172900146470764, guid: 767ce36082d6519459c23650a28a5f29, + type: 3} + m_PrefabInstance: {fileID: 9002439468039494841} + m_PrefabAsset: {fileID: 0} +--- !u!1 &8989088974003534252 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 22727130323297557, guid: 767ce36082d6519459c23650a28a5f29, + type: 3} + m_PrefabInstance: {fileID: 9002439468039494841} + m_PrefabAsset: {fileID: 0} --- !u!1 &8989088973366545821 stripped GameObject: m_CorrespondingSourceObject: {fileID: 22727129952653604, guid: 767ce36082d6519459c23650a28a5f29, @@ -5287,30 +5639,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: f256e83bf0cc2d2429e619e70800b638, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!1 &1893516735354700757 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 7397172900146470764, guid: 767ce36082d6519459c23650a28a5f29, - type: 3} - m_PrefabInstance: {fileID: 9002439468039494841} - m_PrefabAsset: {fileID: 0} ---- !u!1 &8989088974781053211 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 22727128957527458, guid: 767ce36082d6519459c23650a28a5f29, - type: 3} - m_PrefabInstance: {fileID: 9002439468039494841} - m_PrefabAsset: {fileID: 0} ---- !u!224 &8989088974781053212 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 22727128957527461, guid: 767ce36082d6519459c23650a28a5f29, - type: 3} - m_PrefabInstance: {fileID: 9002439468039494841} - m_PrefabAsset: {fileID: 0} ---- !u!1 &8989088974003534252 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 22727130323297557, guid: 767ce36082d6519459c23650a28a5f29, - type: 3} - m_PrefabInstance: {fileID: 9002439468039494841} - m_PrefabAsset: {fileID: 0} --- !u!1001 &9111109284383726520 PrefabInstance: m_ObjectHideFlags: 0 @@ -5351,7 +5679,7 @@ PrefabInstance: - target: {fileID: 202241233251530204, guid: e504c2c7b46822f4a9fd6549967f71b8, type: 3} propertyPath: m_RootOrder - value: 10 + value: 9 objectReference: {fileID: 0} - target: {fileID: 202241233251530204, guid: e504c2c7b46822f4a9fd6549967f71b8, type: 3} @@ -5605,27 +5933,27 @@ PrefabInstance: objectReference: {fileID: 8989088974132902757} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e504c2c7b46822f4a9fd6549967f71b8, type: 3} ---- !u!1 &6263020594179064106 stripped +--- !u!1 &8989088973629451875 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 2926092444486032018, guid: e504c2c7b46822f4a9fd6549967f71b8, + m_CorrespondingSourceObject: {fileID: 202241233251530203, guid: e504c2c7b46822f4a9fd6549967f71b8, type: 3} m_PrefabInstance: {fileID: 9111109284383726520} m_PrefabAsset: {fileID: 0} ---- !u!1 &3463848346240956164 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 5648400314868477116, guid: e504c2c7b46822f4a9fd6549967f71b8, +--- !u!224 &8989088973629451876 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 202241233251530204, guid: e504c2c7b46822f4a9fd6549967f71b8, type: 3} m_PrefabInstance: {fileID: 9111109284383726520} m_PrefabAsset: {fileID: 0} ---- !u!1 &6263020594268687145 stripped +--- !u!1 &1893516734596061666 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 2926092444445692049, guid: e504c2c7b46822f4a9fd6549967f71b8, + m_CorrespondingSourceObject: {fileID: 7221019452671754842, guid: e504c2c7b46822f4a9fd6549967f71b8, type: 3} m_PrefabInstance: {fileID: 9111109284383726520} m_PrefabAsset: {fileID: 0} ---- !u!1 &1893516736268411314 stripped +--- !u!1 &6263020593954170217 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 7221019454488820234, guid: e504c2c7b46822f4a9fd6549967f71b8, + m_CorrespondingSourceObject: {fileID: 2926092443703885521, guid: e504c2c7b46822f4a9fd6549967f71b8, type: 3} m_PrefabInstance: {fileID: 9111109284383726520} m_PrefabAsset: {fileID: 0} @@ -5635,21 +5963,27 @@ GameObject: type: 3} m_PrefabInstance: {fileID: 9111109284383726520} m_PrefabAsset: {fileID: 0} ---- !u!1 &6263020593954170217 stripped +--- !u!1 &6263020594179064106 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 2926092443703885521, guid: e504c2c7b46822f4a9fd6549967f71b8, + m_CorrespondingSourceObject: {fileID: 2926092444486032018, guid: e504c2c7b46822f4a9fd6549967f71b8, type: 3} m_PrefabInstance: {fileID: 9111109284383726520} m_PrefabAsset: {fileID: 0} ---- !u!1 &8989088973629451875 stripped +--- !u!1 &1893516736268411314 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 202241233251530203, guid: e504c2c7b46822f4a9fd6549967f71b8, + m_CorrespondingSourceObject: {fileID: 7221019454488820234, guid: e504c2c7b46822f4a9fd6549967f71b8, type: 3} m_PrefabInstance: {fileID: 9111109284383726520} m_PrefabAsset: {fileID: 0} ---- !u!1 &1893516734596061666 stripped +--- !u!1 &3463848346240956164 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 7221019452671754842, guid: e504c2c7b46822f4a9fd6549967f71b8, + m_CorrespondingSourceObject: {fileID: 5648400314868477116, guid: e504c2c7b46822f4a9fd6549967f71b8, + type: 3} + m_PrefabInstance: {fileID: 9111109284383726520} + m_PrefabAsset: {fileID: 0} +--- !u!1 &6263020594268687145 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 2926092444445692049, guid: e504c2c7b46822f4a9fd6549967f71b8, type: 3} m_PrefabInstance: {fileID: 9111109284383726520} m_PrefabAsset: {fileID: 0} @@ -5671,9 +6005,3 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 2c4cf586272b55a4497783f1478c1c6b, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!224 &8989088973629451876 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 202241233251530204, guid: e504c2c7b46822f4a9fd6549967f71b8, - type: 3} - m_PrefabInstance: {fileID: 9111109284383726520} - m_PrefabAsset: {fileID: 0} diff --git a/UI/Examples/Steam.meta b/UI/Examples/Steam.meta new file mode 100644 index 0000000..854f7c5 --- /dev/null +++ b/UI/Examples/Steam.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5ad12223122514df99ceddab63902bbb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UI/Examples/Steam/Facepunch.meta b/UI/Examples/Steam/Facepunch.meta new file mode 100644 index 0000000..6656e04 --- /dev/null +++ b/UI/Examples/Steam/Facepunch.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ab47f990e1ad04d82b639afc51960ce9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UI/Examples/Steam/Facepunch/FacepunchExample.cs b/UI/Examples/Steam/Facepunch/FacepunchExample.cs new file mode 100644 index 0000000..23d1688 --- /dev/null +++ b/UI/Examples/Steam/Facepunch/FacepunchExample.cs @@ -0,0 +1,49 @@ + +#if UNITY_FACEPUNCH +using Steamworks; +#endif +using System; +using UnityEngine; +using ModIOBrowser; + +public class FacepunchExample : MonoBehaviour +{ + [SerializeField] int appId; +#if UNITY_FACEPUNCH + void Awake() + { + try + { + SteamClient.Init((uint)appId, true); + } + catch(System.Exception e) + { + Debug.Log(e); + } + + DontDestroyOnLoad(this.gameObject); + } + + void Start() + { + async void CallbackOnReceiveCode(Action action) + { + byte[] encryptedAppTicket = await SteamUser.RequestEncryptedAppTicketAsync(); + string base64Ticket = ModIO.Util.Utility.EncodeEncryptedSteamAppTicket(encryptedAppTicket, (uint)encryptedAppTicket.Length); + action?.Invoke(base64Ticket); + } + + Browser.SetupSteamAuthenticationOption(CallbackOnReceiveCode); + } + + void OnDisable() + { + SteamClient.Shutdown(); + } + + void Update() + { + SteamClient.RunCallbacks(); + } +#endif +} diff --git a/UI/Examples/Steam/Facepunch/FacepunchExample.cs.meta b/UI/Examples/Steam/Facepunch/FacepunchExample.cs.meta new file mode 100644 index 0000000..4d2c6fe --- /dev/null +++ b/UI/Examples/Steam/Facepunch/FacepunchExample.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 35e60eeffbde3a24ab9eadfba3b9b941 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UI/Examples/Steam/Steamworks.meta b/UI/Examples/Steam/Steamworks.meta new file mode 100644 index 0000000..b9c90ae --- /dev/null +++ b/UI/Examples/Steam/Steamworks.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8bdfa2f69fce1438fa27b0191b7558cf +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UI/Examples/Steam/Steamworks/SteamworksExample.cs b/UI/Examples/Steam/Steamworks/SteamworksExample.cs new file mode 100644 index 0000000..f0f1548 --- /dev/null +++ b/UI/Examples/Steam/Steamworks/SteamworksExample.cs @@ -0,0 +1,33 @@ +#if UNITY_STEAMWORKS +using Steamworks; +#endif +using System; +using UnityEngine; +using ModIOBrowser; + +public class SteamworksExample : MonoBehaviour +{ +#if UNITY_STEAMWORKS + void Start() + { + var hresult = SteamUser.RequestEncryptedAppTicket(null, 0); + CallResult encryptedAppTicketResponseCallResult = CallResult.Create(OnEncryptedAppTicketResponseCallResult); + encryptedAppTicketResponseCallResult.Set(hresult, (response, failure) => + { + int cbMaxTicket = 1024; + byte[] pTicket = new byte[1024]; + if (SteamUser.GetEncryptedAppTicket(pTicket, cbMaxTicket, out uint pcbTicket)) + { + string base64Ticket = ModIO.Util.Utility.EncodeEncryptedSteamAppTicket(pTicket, pcbTicket); + + void CallbackOnReceiveCode(Action action) + { + action?.Invoke(base64Ticket); + } + + Browser.SetupSteamAuthenticationOption(CallbackOnReceiveCode); + } + }); + } +#endif +} diff --git a/UI/Examples/Steam/Steamworks/SteamworksExample.cs.meta b/UI/Examples/Steam/Steamworks/SteamworksExample.cs.meta new file mode 100644 index 0000000..addf9a1 --- /dev/null +++ b/UI/Examples/Steam/Steamworks/SteamworksExample.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bd30443ee53888c468ac235817f3437f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UI/ListItems/CollectionModListItem.cs b/UI/ListItems/CollectionModListItem.cs index efe630e..16e65e9 100644 --- a/UI/ListItems/CollectionModListItem.cs +++ b/UI/ListItems/CollectionModListItem.cs @@ -15,7 +15,7 @@ namespace ModIOBrowser.Implementation ///
internal class CollectionModListItem : ListItem, ISelectHandler, IDeselectHandler { - CollectionProfile profile; + new CollectionProfile profile; [SerializeField] Button listItemButton; [SerializeField] Image image; @@ -299,7 +299,7 @@ void Hydrate() imageBackground.gameObject.SetActive(false); title.text = profile.modProfile.name; fileSize.text = Utility.GenerateHumanReadableStringForBytes(profile.modProfile.archiveFileSize); - ModIOUnity.DownloadTexture(profile.modProfile.logoImage_320x180, SetIcon); + ModIOUnity.DownloadTexture(profile.modProfile.logoImage320x180, SetIcon); gameObject.SetActive(true); transform.SetAsLastSibling(); SetDisabledStateOverlay(); diff --git a/UI/ListItems/DownloadQueueListItem.cs b/UI/ListItems/DownloadQueueListItem.cs index 6f69ef3..e8e8630 100644 --- a/UI/ListItems/DownloadQueueListItem.cs +++ b/UI/ListItems/DownloadQueueListItem.cs @@ -19,7 +19,6 @@ internal class DownloadQueueListItem : ListItem, IDeselectHandler, ISelectHandle [SerializeField] GameObject loadingIcon; [SerializeField] GameObject failedToLoadIcon; [SerializeField] GameObject failedToLoadMod; - public ModProfile profile; public static DownloadQueueListItem currentDownloadQueueListItem; @@ -28,7 +27,7 @@ public void OpenModDetailsForThisProfile() { Details.Instance.Open(profile, delegate { DownloadQueue.Instance.OpenDownloadQueuePanel(); }); } - + #region Overrides public override void SetViewportRestraint(RectTransform content, RectTransform viewport) { @@ -46,8 +45,8 @@ public override void Setup(SubscribedMod mod) gameObject.SetActive(true); failedToLoadIcon.SetActive(false); loadingIcon.SetActive(true); - ModIOUnity.DownloadTexture(mod.modProfile.logoImage_320x180, SetIcon); - + ModIOUnity.DownloadTexture(mod.modProfile.logoImage320x180, SetIcon); + LayoutRebuilder.ForceRebuildLayoutImmediate(modName.transform.parent as RectTransform); } #endregion // Overrides @@ -68,7 +67,7 @@ void SetIcon(ResultAnd textureAnd) } loadingIcon.SetActive(false); } - + public void Unsubscribe() { Mods.UnsubscribeFromEvent(profile); diff --git a/UI/ListItems/FeaturedModListItem.cs b/UI/ListItems/FeaturedModListItem.cs index be3363b..0559f28 100644 --- a/UI/ListItems/FeaturedModListItem.cs +++ b/UI/ListItems/FeaturedModListItem.cs @@ -1,5 +1,7 @@ -using System.Collections; +using System; +using System.Collections; using ModIO; +using TMPro; using UnityEngine; using UnityEngine.UI; @@ -15,6 +17,7 @@ internal class FeaturedModListItem : ListItem [SerializeField] Image image; [SerializeField] GameObject background; [SerializeField] GameObject failedToLoad; + [SerializeField] TMP_Text featuredSelectedName; public SubscribedProgressTab progressTab; public int rowIndex; @@ -26,7 +29,7 @@ internal class FeaturedModListItem : ListItem IEnumerator transition; internal static int transitionCount = 0; - + internal Translation featuredSelectedPriceTranslation = null; #region Overrides public override void PlaceholderSetup() { @@ -36,14 +39,16 @@ public override void PlaceholderSetup() failedToLoad.SetActive(false); } - public override void Setup(ModProfile profile) + public override void Setup(ModProfile modProfile) { base.Setup(); - progressTab.Setup(profile); + profile = modProfile; + featuredSelectedName.text = modProfile.name; + progressTab.Setup(modProfile); image.color = Color.clear; background.SetActive(false); failedToLoad.SetActive(false); - ModIOUnity.DownloadTexture(profile.logoImage_640x360, SetIcon); + ModIOUnity.DownloadTexture(modProfile.logoImage640x360, SetIcon); } #endregion // Overrides @@ -122,10 +127,10 @@ IEnumerator Transition(Vector2 start, RectTransform end) float delta = animationCurve.Evaluate(timePassed / transitionTime); Vector3 positionNow = start + distance * delta; - + //preserve the Y position, we are only swiping horizontally positionNow.y = transform.position.y; - + transform.position = positionNow; rectTransform.sizeDelta = startingSize + growth * delta; diff --git a/UI/ListItems/HomeModListItem.cs b/UI/ListItems/HomeModListItem.cs index 1cd06eb..d77b122 100644 --- a/UI/ListItems/HomeModListItem.cs +++ b/UI/ListItems/HomeModListItem.cs @@ -19,12 +19,12 @@ namespace ModIOBrowser.Implementation internal class HomeModListItem : ListItem, IDeselectHandler, ISelectHandler, IPointerEnterHandler { public Image image; - public TMP_Text title; + public TMP_Text titleTxt; public GameObject loadingIcon; public GameObject failedToLoadIcon; public Action imageLoaded; - public ModProfile profile; public SubscribedProgressTab progressTab; + internal Translation priceTranslation = null; internal static Dictionary listItems = new Dictionary(); @@ -57,7 +57,7 @@ void RemoveFromStaticDictionaryCache() listItems.Remove(profile.id); } } - + #region MonoBehaviour void OnDestroy() { @@ -78,7 +78,7 @@ public void OnPointerEnter(PointerEventData eventData) { // When using mouse we want to disable the viewport restraint from moving the screen InputNavigation.Instance.mouseNavigation = true; - + EventSystem.current.SetSelectedGameObject(null); InputNavigation.Instance.Select(selectable, true); } @@ -92,23 +92,24 @@ public override void PlaceholderSetup() image.color = Color.clear; loadingIcon.SetActive(true); failedToLoadIcon.SetActive(false); - title.text = string.Empty; + titleTxt.text = string.Empty; //downloads.text = string.Empty; } - public override void Setup(ModProfile profile) + public override void Setup(ModProfile modProfile) { base.Setup(); - this.profile = profile; + profile = modProfile; image.color = Color.clear; loadingIcon.SetActive(true); failedToLoadIcon.SetActive(false); - title.text = profile.name; + titleTxt.text = modProfile.name; + //downloads.text = GenerateHumanReadableString(profile.stats.downloadsTotal); - ModIOUnity.DownloadTexture(profile.logoImage_320x180, SetIcon); + ModIOUnity.DownloadTexture(modProfile.logoImage320x180, SetIcon); gameObject.SetActive(true); - progressTab.Setup(profile); + progressTab.Setup(modProfile); AddToStaticDictionaryCache(); } diff --git a/UI/ListItems/ListItem.cs b/UI/ListItems/ListItem.cs index 5fc68fe..b3a584f 100644 --- a/UI/ListItems/ListItem.cs +++ b/UI/ListItems/ListItem.cs @@ -30,6 +30,8 @@ internal class ListItem : MonoBehaviour public ColorScheme scheme; + [HideInInspector] public ModProfile profile; + protected virtual void Awake() { LastCreatedListItem = this; @@ -92,16 +94,18 @@ public virtual void DeSelect() { } public virtual void PlaceholderSetup() { isPlaceholder = true; } public virtual void Setup() { isPlaceholder = false; } public virtual void Setup(string title) { isPlaceholder = false; } + public virtual void Setup(RevenueType revenueType) { isPlaceholder = false; } public virtual void Setup(string tagName, string tagCategory) { isPlaceholder = false; } - public virtual void Setup(ModProfile profile) { isPlaceholder = false; } + public virtual void Setup(ModProfile modProfile) { isPlaceholder = false; } public virtual void Setup(SubscribedMod mod) { isPlaceholder = false; } public virtual void Setup(InstalledMod profile) { isPlaceholder = false; } public virtual void Setup(CollectionProfile profile) { isPlaceholder = false; } - public virtual void Setup(ModProfile profile, bool subscriptionStatus, string progressStatus) { isPlaceholder = false; } + public virtual void Setup(ModProfile modProfile, bool subscriptionStatus, string progressStatus) { isPlaceholder = false; } public virtual void Setup(Action onClick) { isPlaceholder = false; } public virtual void Setup(string title, Action onClick) { isPlaceholder = false; } + public virtual void Refresh() { this.Setup(profile); } - public void RedrawRectTransform() + public void RedrawRectTransform() { LayoutRebuilder.ForceRebuildLayoutImmediate(transform as RectTransform); } diff --git a/UI/ListItems/SearchResultListItem.cs b/UI/ListItems/SearchResultListItem.cs index 935e785..5acde9c 100644 --- a/UI/ListItems/SearchResultListItem.cs +++ b/UI/ListItems/SearchResultListItem.cs @@ -23,7 +23,6 @@ internal class SearchResultListItem : ListItem, IDeselectHandler, ISelectHandler public GameObject loadingIcon; public GameObject failedToLoadIcon; public Action imageLoaded; - public ModProfile profile; public SubscribedProgressTab progressTab; internal static Dictionary listItems = new Dictionary(); @@ -63,7 +62,7 @@ void OnDestroy() { RemoveFromStaticDictionaryCache(); } - + public void OnSelect(BaseEventData eventData) { SelectionOverlayHandler.Instance.MoveSelection(this); @@ -78,14 +77,14 @@ public void OnPointerEnter(PointerEventData eventData) { // When using mouse we want to disable the viewport restraint from moving the screen InputNavigation.Instance.mouseNavigation = true; - + EventSystem.current.SetSelectedGameObject(null); InputNavigation.Instance.Select(selectable, true); } #endregion // MonoBehaviour #region Overrides - + public override void PlaceholderSetup() { base.PlaceholderSetup(); @@ -96,19 +95,19 @@ public override void PlaceholderSetup() gameObject.SetActive(true); } - public override void Setup(ModProfile profile) + public override void Setup(ModProfile modProfile) { base.Setup(); - this.profile = profile; + this.profile = modProfile; image.color = Color.clear; loadingIcon.SetActive(true); failedToLoadIcon.SetActive(false); - title.text = profile.name; + title.text = modProfile.name; //downloads.text = GenerateHumanReadableString(profile.stats.downloadsTotal); - ModIOUnity.DownloadTexture(profile.logoImage_320x180, SetIcon); + ModIOUnity.DownloadTexture(modProfile.logoImage320x180, SetIcon); gameObject.SetActive(true); - progressTab.Setup(profile); + progressTab.Setup(modProfile); AddToStaticDictionaryCache(); } @@ -116,12 +115,12 @@ public override void Setup(ModProfile profile) public override void SetViewportRestraint(RectTransform content, RectTransform viewport) { base.SetViewportRestraint(content, viewport); - + viewportRestraint.PercentPaddingVertical = 0.3f; } - + #endregion // Overrides - + public void SetAsLastRowItem() { viewportRestraint.PercentPaddingVertical = 0.375f; diff --git a/UI/ListItems/TagListItem.cs b/UI/ListItems/TagListItem.cs index b573e78..cea980b 100644 --- a/UI/ListItems/TagListItem.cs +++ b/UI/ListItems/TagListItem.cs @@ -33,8 +33,6 @@ public override void SetViewportRestraint(RectTransform content, RectTransform v public override void Setup(string tagName, string tagCategory) { - base.Setup(); - this.tagName = tagName; this.tagCategory = tagCategory; @@ -54,6 +52,39 @@ public override void Setup(string tagName, string tagCategory) } } + // This method is used for setting up the Free / Premium filter options (not connected to actual tags) + public override void Setup(RevenueType revenueType) + { + title.text = revenueType == RevenueType.Free + ? TranslationManager.Instance.Get("Free") + : TranslationManager.Instance.Get("Premium"); + + transform.SetAsLastSibling(); + gameObject.SetActive(true); + + toggle.onValueChanged.RemoveAllListeners(); + + SearchPanel.searchFilterFree = true; + SearchPanel.searchFilterPremium = true; + toggle.isOn = true; + + toggle.onValueChanged.AddListener(x => + { + if (revenueType == RevenueType.Free) + SearchPanel.searchFilterFree = x; + + if (revenueType == RevenueType.Paid) + SearchPanel.searchFilterPremium = x; + }); + + // This might exist if we recycled this object. + // We destroy it because the other Setup() method gets invoked after this, which will set it up + if(jumpToComponent != null) + { + Destroy(jumpToComponent); + } + } + /// /// Use this for setting up the JumpTo component on selection /// diff --git a/UI/Overlays/HomeModListItem_Overlay.cs b/UI/Overlays/HomeModListItem_Overlay.cs index 44e055a..e446a66 100644 --- a/UI/Overlays/HomeModListItem_Overlay.cs +++ b/UI/Overlays/HomeModListItem_Overlay.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using ModIO; using TMPro; using UnityEngine; @@ -13,14 +14,14 @@ internal class HomeModListItem_Overlay : MonoBehaviour, IPointerExitHandler [SerializeField] Image image; [SerializeField] GameObject failedToLoadIcon; [SerializeField] GameObject loadingIcon; - [SerializeField] TMP_Text title; + [SerializeField] TMP_Text titleTxt; [SerializeField] TMP_Text subscribeButtonText; [SerializeField] Transform contextMenuPosition; public HomeModListItem listItemToReplicate; public HomeModListItem lastListItemToReplicate; - [SerializeField] SubscribedProgressTab progressTab; + internal Translation subscribeButtonTextTranslation = null; void LateUpdate() { @@ -33,7 +34,7 @@ void LateUpdate() // Mimics the look of a BrowserModListItem public void Setup(HomeModListItem listItem) { - // If we are already displaying this list item in the overlay, bail + // If we are already displaying this list item in the overlay, bail lastListItemToReplicate = listItemToReplicate; listItemToReplicate = listItem; @@ -46,15 +47,15 @@ public void Setup(HomeModListItem listItem) loadingIcon.SetActive(listItemToReplicate.loadingIcon.activeSelf); animator.Play("Inflate"); SetSubscribeButtonText(); - + MimicProgressBar(); - + // Set if the list item is still waiting for the image to download. The action will // get invoked when the download finishes. listItemToReplicate.imageLoaded = ReloadImage; - + image.sprite = listItemToReplicate.image.sprite; - title.text = listItemToReplicate.title.text; + titleTxt.text = listItemToReplicate.titleTxt.text; } void MimicProgressBar() @@ -70,16 +71,16 @@ public void SubscribeButton() if(Collection.Instance.IsSubscribed(listItemToReplicate.profile.id)) { // We are pre-emptively changing the text here to make the UI feel more responsive - subscribeButtonText.text = "Subscribe"; + Translation.Get(subscribeButtonTextTranslation, "Unsubscribe", subscribeButtonText); Mods.UnsubscribeFromEvent(listItemToReplicate.profile, UpdateSubscribeButton); } else { // We are pre-emptively changing the text here to make the UI feel more responsive - subscribeButtonText.text = "Unsubscribe"; + Translation.Get(subscribeButtonTextTranslation, "Subscribe", subscribeButtonText); Mods.SubscribeToEvent(listItemToReplicate.profile, UpdateSubscribeButton); } - + LayoutRebuilder.ForceRebuildLayoutImmediate(subscribeButtonText.transform.parent as RectTransform); } @@ -92,7 +93,7 @@ public void ShowMoreOptions() { List options = new List(); - //TODO If not subscribed add force uninstall and subscribe options + //TODO If not subscribed add force uninstall and subscribe options // Add Vote up option to context menu options.Add(new ContextMenuOption @@ -100,7 +101,7 @@ public void ShowMoreOptions() nameTranslationReference = "Vote up", action = delegate { - ModIOUnity.RateMod(listItemToReplicate.profile.id, ModRating.Positive, delegate { }); + Home.RateMod(listItemToReplicate.profile.id, ModRating.Positive); ModioContextMenu.Instance.Close(); } }); @@ -111,7 +112,7 @@ public void ShowMoreOptions() nameTranslationReference = "Vote down", action = delegate { - ModIOUnity.RateMod(listItemToReplicate.profile.id, ModRating.Negative, delegate { }); + Home.RateMod(listItemToReplicate.profile.id, ModRating.Negative); ModioContextMenu.Instance.Close(); } }); @@ -131,7 +132,7 @@ public void ShowMoreOptions() // Open context menu ModioContextMenu.Instance.Open(contextMenuPosition, options, listItemToReplicate.selectable); } - + public void UpdateSubscribeButton() { SetSubscribeButtonText(); @@ -140,15 +141,16 @@ public void UpdateSubscribeButton() public void SetSubscribeButtonText() { listItemToReplicate?.progressTab?.Setup(listItemToReplicate.profile); - + if(Collection.Instance.IsSubscribed(listItemToReplicate.profile.id)) { - subscribeButtonText.text = "Unsubscribe"; - } - else + Translation.Get(subscribeButtonTextTranslation, "Unsubscribe", subscribeButtonText); + } + else { - subscribeButtonText.text = "Subscribe"; + Translation.Get(subscribeButtonTextTranslation, "Subscribe", subscribeButtonText); } + LayoutRebuilder.ForceRebuildLayoutImmediate(subscribeButtonText.transform.parent as RectTransform); } @@ -158,7 +160,7 @@ void ReloadImage() failedToLoadIcon.SetActive(listItemToReplicate.failedToLoadIcon.activeSelf); loadingIcon.SetActive(listItemToReplicate.loadingIcon.activeSelf); } - + public void OnPointerExit(PointerEventData eventData) { if (!ModioContextMenu.Instance.gameObject.activeSelf) diff --git a/UI/Overlays/SearchResultListItem_Overlay.cs b/UI/Overlays/SearchResultListItem_Overlay.cs index b81ee66..59c8e3d 100644 --- a/UI/Overlays/SearchResultListItem_Overlay.cs +++ b/UI/Overlays/SearchResultListItem_Overlay.cs @@ -33,7 +33,7 @@ void LateUpdate() MimicProgressBar(); } } - + // Mimics the look of a SearchResultListItem public void Setup(SearchResultListItem listItem) { @@ -54,17 +54,17 @@ public void Setup(SearchResultListItem listItem) loadingIcon.SetActive(listItemToReplicate.loadingIcon.activeSelf); animator.Play("Inflate"); SetSubscribeButtonText(); - + MimicProgressBar(); - + // Set if the list item is still waiting for the image to download. The action will // get invoked when the download finishes. listItemToReplicate.imageLoaded = ReloadImage; - + image.sprite = listItemToReplicate.image.sprite; title.text = listItemToReplicate.title.text; } - + void MimicProgressBar() { if (listItemToReplicate != null) @@ -78,16 +78,16 @@ public void SubscribeButton() if(Collection.Instance.IsSubscribed(listItemToReplicate.profile.id)) { // We are pre-emptively changing the text here to make the UI feel more responsive - Translation.Get(subscribeButtonTextTranslation, "Subscribe", subscribeButtonText); + Translation.Get(subscribeButtonTextTranslation, "Unsubscribe", subscribeButtonText); Mods.UnsubscribeFromEvent(listItemToReplicate.profile, UpdateSubscribeButton); } else { // We are pre-emptively changing the text here to make the UI feel more responsive - Translation.Get(subscribeButtonTextTranslation, "Unsubscribe", subscribeButtonText); + Translation.Get(subscribeButtonTextTranslation, "Subscribe", subscribeButtonText); Mods.SubscribeToEvent(listItemToReplicate.profile, UpdateSubscribeButton); } - + LayoutRebuilder.ForceRebuildLayoutImmediate(subscribeButtonText.transform.parent as RectTransform); } @@ -95,12 +95,12 @@ public void OpenModDetailsForThisModProfile() { listItemToReplicate?.OpenModDetailsForThisProfile(); } - + public void ShowMoreOptions() { List options = new List(); - //TODO If not subscribed add force uninstall and subscribe options + //TODO If not subscribed add force uninstall and subscribe options // Add Vote up option to context menu options.Add(new ContextMenuOption @@ -108,7 +108,7 @@ public void ShowMoreOptions() nameTranslationReference = "Vote up", action = delegate { - ModIOUnity.RateMod(listItemToReplicate.profile.id, ModRating.Positive, delegate { }); + Home.RateMod(listItemToReplicate.profile.id, ModRating.Positive); ModioContextMenu.Instance.Close(); } }); @@ -119,7 +119,7 @@ public void ShowMoreOptions() nameTranslationReference = "Vote down", action = delegate { - ModIOUnity.RateMod(listItemToReplicate.profile.id, ModRating.Negative, delegate { }); + Home.RateMod(listItemToReplicate.profile.id, ModRating.Negative); ModioContextMenu.Instance.Close(); } }); @@ -148,12 +148,16 @@ public void UpdateSubscribeButton() public void SetSubscribeButtonText() { listItemToReplicate?.progressTab?.Setup(listItemToReplicate.profile); - - if(Collection.Instance.IsSubscribed(listItemToReplicate.profile.id)) + + if(!Collection.Instance.IsPurchased(listItemToReplicate.profile)) + { + Translation.Get(subscribeButtonTextTranslation, "Buy Now", subscribeButtonText); + } + else if(Collection.Instance.IsSubscribed(listItemToReplicate.profile.id)) { Translation.Get(subscribeButtonTextTranslation, "Unsubscribe", subscribeButtonText); - } - else + } + else { Translation.Get(subscribeButtonTextTranslation, "Subscribe", subscribeButtonText); } @@ -165,7 +169,7 @@ void ReloadImage() failedToLoadIcon.SetActive(listItemToReplicate.failedToLoadIcon.activeSelf); loadingIcon.SetActive(listItemToReplicate.loadingIcon.activeSelf); } - + public void OnPointerExit(PointerEventData eventData) { if (!ModioContextMenu.Instance.ContextMenu.activeSelf) diff --git a/UI/Prefabs/Collections/Mod Collection.prefab b/UI/Prefabs/Collections/Mod Collection.prefab index f394dc2..78f0118 100644 --- a/UI/Prefabs/Collections/Mod Collection.prefab +++ b/UI/Prefabs/Collections/Mod Collection.prefab @@ -1,24 +1,5 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: ---- !u!114 &6269981553373584433 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 137864518997446136} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 78a172db96e209b41a0f30a5676688e3, type: 3} - m_Name: - m_EditorClassIdentifier: - PercentPaddingHorizontal: 0.05 - PercentPaddingVertical: 0.3 - adjustHorizontally: 0 - adjustVertically: 1 - Viewport: {fileID: 3151635505209770844} - DefaultViewportContainer: {fileID: 5567694270593401296} - HorizontalViewportContainer: {fileID: 0} --- !u!1 &3151635504395830646 GameObject: m_ObjectHideFlags: 0 @@ -84,6 +65,7 @@ MonoBehaviour: m_ChildControlHeight: 0 m_ChildScaleWidth: 0 m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 --- !u!114 &3151635504395830644 MonoBehaviour: m_ObjectHideFlags: 0 @@ -161,6 +143,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -346,6 +329,7 @@ MonoBehaviour: CollectionPanelSecondDropDownFilter: {fileID: 6878629680744723261} CollectionPanelHeaderBackground: {fileID: 3151635506126467888} defaultCollectionSelection: {fileID: 5634869264469495778} + purchasedMods: [] pendingSubscriptions: [] uninstallConfirmationPanel: {fileID: 0} uninstallConfirmationPanelModName: {fileID: 0} @@ -412,6 +396,7 @@ MonoBehaviour: m_ChildControlHeight: 0 m_ChildScaleWidth: 0 m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 --- !u!114 &3151635506019421428 MonoBehaviour: m_ObjectHideFlags: 0 @@ -545,6 +530,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 0.12941177, g: 0.16078432, b: 0.27058825, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -572,198 +558,6 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: type: 1 ---- !u!33 &5567694271606475182 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5528126483349401153} - m_Mesh: {fileID: 0} ---- !u!114 &5567694271606475181 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5528126483349401153} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 0 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_text: 'Sort by:' - m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_fontSharedMaterials: [] - m_fontMaterial: {fileID: 0} - m_fontMaterials: [] - m_fontColor32: - serializedVersion: 2 - rgba: 4292330689 - m_fontColor: {r: 0.75686276, g: 0.76862746, b: 0.84313726, a: 1} - m_enableVertexGradient: 0 - m_colorMode: 3 - m_fontColorGradient: - topLeft: {r: 1, g: 1, b: 1, a: 1} - topRight: {r: 1, g: 1, b: 1, a: 1} - bottomLeft: {r: 1, g: 1, b: 1, a: 1} - bottomRight: {r: 1, g: 1, b: 1, a: 1} - m_fontColorGradientPreset: {fileID: 0} - m_spriteAsset: {fileID: 0} - m_tintAllSprites: 0 - m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: -1183493901 - m_overrideHtmlColors: 0 - m_faceColor: - serializedVersion: 2 - rgba: 4294967295 - m_fontSize: 12 - m_fontSizeBase: 12 - m_fontWeight: 400 - m_enableAutoSizing: 0 - m_fontSizeMin: 18 - m_fontSizeMax: 72 - m_fontStyle: 0 - m_HorizontalAlignment: 1 - m_VerticalAlignment: 512 - m_textAlignment: 65535 - m_characterSpacing: 0 - m_wordSpacing: 0 - m_lineSpacing: 0 - m_lineSpacingMax: 0 - m_paragraphSpacing: 0 - m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 - m_wordWrappingRatios: 0.4 - m_overflowMode: 0 - m_linkedTextComponent: {fileID: 0} - parentLinkedComponent: {fileID: 0} - m_enableKerning: 1 - m_enableExtraPadding: 0 - checkPaddingRequired: 0 - m_isRichText: 1 - m_parseCtrlCharacters: 1 - m_isOrthographic: 1 - m_isCullingEnabled: 0 - m_horizontalMapping: 0 - m_verticalMapping: 0 - m_uvLineOffset: 0 - m_geometrySortingOrder: 0 - m_IsTextObjectScaleStatic: 0 - m_VertexBufferAutoSizeReduction: 1 - m_useMaxVisibleDescender: 1 - m_pageToDisplay: 1 - m_margin: {x: 0, y: 0, z: 0, w: 0} - m_isUsingLegacyAnimationComponent: 0 - m_isVolumetricText: 0 - m_hasFontAssetChanged: 0 - m_baseMaterial: {fileID: 0} - m_maskOffset: {x: 0, y: 0, z: 0, w: 0} ---- !u!33 &3151635504698816116 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5528126484086840210} - m_Mesh: {fileID: 0} ---- !u!114 &3151635504698816117 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5528126484086840210} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 0 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_text: 'Filter by:' - m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_fontSharedMaterials: [] - m_fontMaterial: {fileID: 0} - m_fontMaterials: [] - m_fontColor32: - serializedVersion: 2 - rgba: 4292330689 - m_fontColor: {r: 0.75686276, g: 0.76862746, b: 0.84313726, a: 1} - m_enableVertexGradient: 0 - m_colorMode: 3 - m_fontColorGradient: - topLeft: {r: 1, g: 1, b: 1, a: 1} - topRight: {r: 1, g: 1, b: 1, a: 1} - bottomLeft: {r: 1, g: 1, b: 1, a: 1} - bottomRight: {r: 1, g: 1, b: 1, a: 1} - m_fontColorGradientPreset: {fileID: 0} - m_spriteAsset: {fileID: 0} - m_tintAllSprites: 0 - m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: -1183493901 - m_overrideHtmlColors: 0 - m_faceColor: - serializedVersion: 2 - rgba: 4294967295 - m_fontSize: 12 - m_fontSizeBase: 12 - m_fontWeight: 400 - m_enableAutoSizing: 0 - m_fontSizeMin: 18 - m_fontSizeMax: 72 - m_fontStyle: 0 - m_HorizontalAlignment: 1 - m_VerticalAlignment: 512 - m_textAlignment: 65535 - m_characterSpacing: 0 - m_wordSpacing: 0 - m_lineSpacing: 0 - m_lineSpacingMax: 0 - m_paragraphSpacing: 0 - m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 - m_wordWrappingRatios: 0.4 - m_overflowMode: 0 - m_linkedTextComponent: {fileID: 0} - parentLinkedComponent: {fileID: 0} - m_enableKerning: 1 - m_enableExtraPadding: 0 - checkPaddingRequired: 0 - m_isRichText: 1 - m_parseCtrlCharacters: 1 - m_isOrthographic: 1 - m_isCullingEnabled: 0 - m_horizontalMapping: 0 - m_verticalMapping: 0 - m_uvLineOffset: 0 - m_geometrySortingOrder: 0 - m_IsTextObjectScaleStatic: 0 - m_VertexBufferAutoSizeReduction: 1 - m_useMaxVisibleDescender: 1 - m_pageToDisplay: 1 - m_margin: {x: 0, y: 0, z: 0, w: 0} - m_isUsingLegacyAnimationComponent: 0 - m_isVolumetricText: 0 - m_hasFontAssetChanged: 0 - m_baseMaterial: {fileID: 0} - m_maskOffset: {x: 0, y: 0, z: 0, w: 0} --- !u!1 &5567694270438232457 GameObject: m_ObjectHideFlags: 0 @@ -886,6 +680,7 @@ MonoBehaviour: m_ChildControlHeight: 0 m_ChildScaleWidth: 0 m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 --- !u!114 &5567694270593401295 MonoBehaviour: m_ObjectHideFlags: 0 @@ -961,6 +756,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 0.75686276, g: 0.76862746, b: 0.84313726, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -1097,6 +893,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 0.003921569} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -1173,6 +970,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 0} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -1201,6 +999,7 @@ MonoBehaviour: m_EditorClassIdentifier: m_Navigation: m_Mode: 0 + m_WrapAround: 0 m_SelectOnUp: {fileID: 0} m_SelectOnDown: {fileID: 0} m_SelectOnLeft: {fileID: 0} @@ -1236,6 +1035,7 @@ MonoBehaviour: m_PersistentCalls: m_Calls: - m_Target: {fileID: 4940903284276904462} + m_TargetAssemblyTypeName: ModIOBrowser.Implementation.Collection, modio.UI m_MethodName: OnScrollValueChange m_Mode: 1 m_Arguments: @@ -1282,61 +1082,8 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &6269981554072213852 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6878629680744723256} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 78a172db96e209b41a0f30a5676688e3, type: 3} - m_Name: - m_EditorClassIdentifier: - PercentPaddingHorizontal: 0.05 - PercentPaddingVertical: 0.3 - adjustHorizontally: 0 - adjustVertically: 1 - Viewport: {fileID: 3151635505209770844} - DefaultViewportContainer: {fileID: 5567694270593401296} - HorizontalViewportContainer: {fileID: 0} ---- !u!114 &6269981552436245065 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6878629681347413739} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 78a172db96e209b41a0f30a5676688e3, type: 3} - m_Name: - m_EditorClassIdentifier: - PercentPaddingHorizontal: 0.05 - PercentPaddingVertical: 0.3 - adjustHorizontally: 0 - adjustVertically: 1 - Viewport: {fileID: 3151635505209770844} - DefaultViewportContainer: {fileID: 5567694270593401296} - HorizontalViewportContainer: {fileID: 0} ---- !u!114 &8275668409451314581 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9095449701689612657} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} - m_Name: - m_EditorClassIdentifier: - reference: Enter keyword - text: {fileID: 9095449701689612660} - translatedLanguageFontPairingOverrides: {fileID: 0} ---- !u!1001 &3151635504411107861 -PrefabInstance: +--- !u!1001 &3151635504411107861 +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: @@ -1767,6 +1514,122 @@ GameObject: type: 3} m_PrefabInstance: {fileID: 3151635504411107861} m_PrefabAsset: {fileID: 0} +--- !u!33 &5567694271606475182 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5528126483349401153} + m_Mesh: {fileID: 0} +--- !u!114 &5567694271606475181 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5528126483349401153} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: 'Sort by:' + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4292330689 + m_fontColor: {r: 0.75686276, g: 0.76862746, b: 0.84313726, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 12 + m_fontSizeBase: 12 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 1 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!114 &6269981554072213852 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6878629680744723256} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 78a172db96e209b41a0f30a5676688e3, type: 3} + m_Name: + m_EditorClassIdentifier: + PercentPaddingHorizontal: 0.05 + PercentPaddingVertical: 0.3 + adjustHorizontally: 0 + adjustVertically: 1 + Viewport: {fileID: 3151635505209770844} + DefaultViewportContainer: {fileID: 5567694270593401296} + HorizontalViewportContainer: {fileID: 0} --- !u!1001 &3151635504595376929 PrefabInstance: m_ObjectHideFlags: 0 @@ -2011,6 +1874,25 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} m_Name: m_EditorClassIdentifier: +--- !u!114 &6269981553373584433 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 137864518997446136} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 78a172db96e209b41a0f30a5676688e3, type: 3} + m_Name: + m_EditorClassIdentifier: + PercentPaddingHorizontal: 0.05 + PercentPaddingVertical: 0.3 + adjustHorizontally: 0 + adjustVertically: 1 + Viewport: {fileID: 3151635505209770844} + DefaultViewportContainer: {fileID: 5567694270593401296} + HorizontalViewportContainer: {fileID: 0} --- !u!1001 &3151635504747403206 PrefabInstance: m_ObjectHideFlags: 0 @@ -2263,11 +2145,31 @@ PrefabInstance: propertyPath: m_Navigation.m_SelectOnRight value: objectReference: {fileID: 6878629680744723261} + - target: {fileID: 8415282165173031208, guid: 50b3a7c8f9573ab4bb339bf803ddeff7, + type: 3} + propertyPath: m_Options.m_Options.Array.size + value: 4 + objectReference: {fileID: 0} - target: {fileID: 8415282165173031208, guid: 50b3a7c8f9573ab4bb339bf803ddeff7, type: 3} propertyPath: m_Options.m_Options.Array.data[0].m_Text + value: All mods + objectReference: {fileID: 0} + - target: {fileID: 8415282165173031208, guid: 50b3a7c8f9573ab4bb339bf803ddeff7, + type: 3} + propertyPath: m_Options.m_Options.Array.data[1].m_Text value: Subscribed objectReference: {fileID: 0} + - target: {fileID: 8415282165173031208, guid: 50b3a7c8f9573ab4bb339bf803ddeff7, + type: 3} + propertyPath: m_Options.m_Options.Array.data[2].m_Text + value: Unsubscribed + objectReference: {fileID: 0} + - target: {fileID: 8415282165173031208, guid: 50b3a7c8f9573ab4bb339bf803ddeff7, + type: 3} + propertyPath: m_Options.m_Options.Array.data[3].m_Text + value: Purchased + objectReference: {fileID: 0} - target: {fileID: 8415282165173031208, guid: 50b3a7c8f9573ab4bb339bf803ddeff7, type: 3} propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.size @@ -2457,6 +2359,12 @@ PrefabInstance: m_RemovedComponents: - {fileID: 7846642549727048830, guid: 50b3a7c8f9573ab4bb339bf803ddeff7, type: 3} m_SourcePrefab: {fileID: 100100000, guid: 50b3a7c8f9573ab4bb339bf803ddeff7, type: 3} +--- !u!1 &5528126484086840210 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 7425031109443226708, guid: 50b3a7c8f9573ab4bb339bf803ddeff7, + type: 3} + m_PrefabInstance: {fileID: 3151635504747403206} + m_PrefabAsset: {fileID: 0} --- !u!1 &6878629681347413739 stripped GameObject: m_CorrespondingSourceObject: {fileID: 8415282165173031213, guid: 50b3a7c8f9573ab4bb339bf803ddeff7, @@ -2481,12 +2389,122 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: f7f173c11dfda5a4c9a9860f473a14b7, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!1 &5528126484086840210 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 7425031109443226708, guid: 50b3a7c8f9573ab4bb339bf803ddeff7, - type: 3} - m_PrefabInstance: {fileID: 3151635504747403206} +--- !u!33 &3151635504698816116 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5528126484086840210} + m_Mesh: {fileID: 0} +--- !u!114 &3151635504698816117 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5528126484086840210} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: 'Filter by:' + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4292330689 + m_fontColor: {r: 0.75686276, g: 0.76862746, b: 0.84313726, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 12 + m_fontSizeBase: 12 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 1 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!114 &6269981552436245065 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6878629681347413739} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 78a172db96e209b41a0f30a5676688e3, type: 3} + m_Name: + m_EditorClassIdentifier: + PercentPaddingHorizontal: 0.05 + PercentPaddingVertical: 0.3 + adjustHorizontally: 0 + adjustVertically: 1 + Viewport: {fileID: 3151635505209770844} + DefaultViewportContainer: {fileID: 5567694270593401296} + HorizontalViewportContainer: {fileID: 0} --- !u!1001 &5729318027836886428 PrefabInstance: m_ObjectHideFlags: 0 @@ -2777,3 +2795,18 @@ RectTransform: type: 3} m_PrefabInstance: {fileID: 5729318027836886428} m_PrefabAsset: {fileID: 0} +--- !u!114 &8275668409451314581 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9095449701689612657} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} + m_Name: + m_EditorClassIdentifier: + reference: Enter keyword + text: {fileID: 9095449701689612660} + translatedLanguageFontPairingOverrides: {fileID: 0} diff --git a/UI/Prefabs/Details/ModDetails Panel.prefab b/UI/Prefabs/Details/ModDetails Panel.prefab index e69d0c3..bc4e41c 100644 --- a/UI/Prefabs/Details/ModDetails Panel.prefab +++ b/UI/Prefabs/Details/ModDetails Panel.prefab @@ -1,89 +1,5 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: ---- !u!114 &3273039433874646090 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 520514034766852762} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_ChildAlignment: 4 - m_Spacing: 16 - m_ChildForceExpandWidth: 0 - m_ChildForceExpandHeight: 1 - m_ChildControlWidth: 0 - m_ChildControlHeight: 0 - m_ChildScaleWidth: 0 - m_ChildScaleHeight: 0 ---- !u!114 &33805108375542221 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 520514034879861290} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Padding: - m_Left: 24 - m_Right: 24 - m_Top: 0 - m_Bottom: 0 - m_ChildAlignment: 4 - m_Spacing: 12 - m_ChildForceExpandWidth: 1 - m_ChildForceExpandHeight: 1 - m_ChildControlWidth: 0 - m_ChildControlHeight: 0 - m_ChildScaleWidth: 0 - m_ChildScaleHeight: 0 ---- !u!114 &3223107712590027654 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 520514034879861290} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} - m_Name: - m_EditorClassIdentifier: - m_HorizontalFit: 2 - m_VerticalFit: 0 ---- !u!114 &5446149088514084159 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 520514034879861290} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} - m_Name: - m_EditorClassIdentifier: - m_IgnoreLayout: 1 - m_MinWidth: -1 - m_MinHeight: -1 - m_PreferredWidth: -1 - m_PreferredHeight: -1 - m_FlexibleWidth: -1 - m_FlexibleHeight: -1 - m_LayoutPriority: 1 --- !u!1 &1038177363568333866 GameObject: m_ObjectHideFlags: 0 @@ -145,6 +61,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 0, g: 0, b: 0, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -234,6 +151,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 0, g: 0, b: 0, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -351,6 +269,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -486,6 +405,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -578,6 +498,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 0.02745098, g: 0.75686276, b: 0.84705883, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -650,6 +571,7 @@ MonoBehaviour: m_ChildControlHeight: 0 m_ChildScaleWidth: 0 m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 --- !u!1 &3273039433536499527 GameObject: m_ObjectHideFlags: 0 @@ -683,9 +605,9 @@ RectTransform: m_Father: {fileID: 3273039435399851238} m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 299, y: -162} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 290, y: 36} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &3273039433536499523 @@ -724,6 +646,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -834,10 +757,10 @@ RectTransform: m_Father: {fileID: 5446149088473426953} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 672, y: -950} - m_SizeDelta: {x: 1344, y: 140.58} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 672, y: 0} + m_SizeDelta: {x: 1344, y: 0} m_Pivot: {x: 0.5, y: 1} --- !u!114 &3273039433540793757 MonoBehaviour: @@ -878,6 +801,7 @@ MonoBehaviour: m_ChildControlHeight: 0 m_ChildScaleWidth: 0 m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 --- !u!1 &3273039433562646512 GameObject: m_ObjectHideFlags: 0 @@ -912,10 +836,10 @@ RectTransform: m_Father: {fileID: 3273039434947570076} m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 270.4, y: -90} - m_SizeDelta: {x: 540.8, y: 36} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 36} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &3273039433562646525 CanvasRenderer: @@ -953,6 +877,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -1076,9 +1001,9 @@ RectTransform: m_Father: {fileID: 3273039433540793759} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 672, y: -140.58} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 672, y: 0} m_SizeDelta: {x: 1200, y: 0} m_Pivot: {x: 0.5, y: 0} --- !u!222 &3273039433638421052 @@ -1131,6 +1056,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -1279,6 +1205,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -1385,9 +1312,9 @@ RectTransform: m_Father: {fileID: 3273039434782283537} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 93.955, y: -24} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 24, y: 24} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &3273039433724756457 @@ -1413,6 +1340,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -1465,10 +1393,10 @@ RectTransform: m_Father: {fileID: 3273039434997191342} m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 270.4, y: -580} - m_SizeDelta: {x: 540.8, y: 96} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 96} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &3273039433727197904 CanvasRenderer: @@ -1493,6 +1421,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 0.05490196, g: 0.0627451, b: 0.105882354, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -1580,6 +1509,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -1631,9 +1561,9 @@ RectTransform: m_Father: {fileID: 3273039435399851238} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 299, y: -90} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 290, y: 36} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &3273039433793820299 @@ -1672,6 +1602,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -1815,9 +1746,9 @@ RectTransform: m_Father: {fileID: 3273039435399851238} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 299, y: -54} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 290, y: 36} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &3273039433942063904 @@ -1856,6 +1787,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -2004,6 +1936,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -2113,9 +2046,9 @@ RectTransform: m_Father: {fileID: 3273039434832831089} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 422, y: -16} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 32, y: 32} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &3273039434092746335 @@ -2141,6 +2074,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -2169,6 +2103,7 @@ MonoBehaviour: m_EditorClassIdentifier: m_Navigation: m_Mode: 0 + m_WrapAround: 0 m_SelectOnUp: {fileID: 0} m_SelectOnDown: {fileID: 0} m_SelectOnLeft: {fileID: 0} @@ -2199,6 +2134,7 @@ MonoBehaviour: m_PersistentCalls: m_Calls: - m_Target: {fileID: 3899680651762377189} + m_TargetAssemblyTypeName: m_MethodName: GalleryImageTransition m_Mode: 6 m_Arguments: @@ -2255,9 +2191,9 @@ RectTransform: m_Father: {fileID: 3273039434376076649} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 93.955, y: -24} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 24, y: 24} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &3273039434252582420 @@ -2283,6 +2219,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -2358,6 +2295,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 0.75686276, g: 0.76862746, b: 0.84313726, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -2419,10 +2357,10 @@ RectTransform: m_Father: {fileID: 3273039434947570076} m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 270.4, y: -126} - m_SizeDelta: {x: 540.8, y: 36} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 36} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &3273039434322680726 CanvasRenderer: @@ -2460,6 +2398,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -2584,9 +2523,9 @@ RectTransform: m_Father: {fileID: 3273039434433629359} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 515.3334, y: -24} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 48, y: 48} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &3273039434364840429 @@ -2612,6 +2551,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -2640,6 +2580,7 @@ MonoBehaviour: m_EditorClassIdentifier: m_Navigation: m_Mode: 4 + m_WrapAround: 0 m_SelectOnUp: {fileID: 5252292763611017344} m_SelectOnDown: {fileID: 3273039434906648025} m_SelectOnLeft: {fileID: 3273039434376076631} @@ -2671,6 +2612,7 @@ MonoBehaviour: m_PersistentCalls: m_Calls: - m_Target: {fileID: 3899680651762377189} + m_TargetAssemblyTypeName: m_MethodName: ReportButtonPress m_Mode: 1 m_Arguments: @@ -2836,9 +2778,9 @@ RectTransform: m_Father: {fileID: 3273039434433629359} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 361.4, y: -24} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 230, y: 48} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &3273039434376076629 @@ -2864,6 +2806,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -2892,6 +2835,7 @@ MonoBehaviour: m_EditorClassIdentifier: m_Navigation: m_Mode: 4 + m_WrapAround: 0 m_SelectOnUp: {fileID: 5252292763611017344} m_SelectOnDown: {fileID: 3273039434906648025} m_SelectOnLeft: {fileID: 3273039434782283549} @@ -2923,6 +2867,7 @@ MonoBehaviour: m_PersistentCalls: m_Calls: - m_Target: {fileID: 3899680651762377189} + m_TargetAssemblyTypeName: m_MethodName: RateNegativeButtonPress m_Mode: 1 m_Arguments: @@ -3113,6 +3058,7 @@ MonoBehaviour: m_ChildControlHeight: 0 m_ChildScaleWidth: 0 m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 --- !u!1 &3273039434385168591 GameObject: m_ObjectHideFlags: 0 @@ -3187,6 +3133,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -3294,9 +3241,9 @@ RectTransform: m_Father: {fileID: 3273039435399851238} m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 299, y: -126} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 290, y: 36} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &3273039434419188258 @@ -3335,6 +3282,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -3471,6 +3419,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 0.02745098, g: 0.75686276, b: 0.84705883, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -3552,10 +3501,10 @@ RectTransform: m_Father: {fileID: 3273039434997191342} m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 270.4, y: -248} - m_SizeDelta: {x: 540.8, y: 48} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 48} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &3273039434433629358 MonoBehaviour: @@ -3582,6 +3531,7 @@ MonoBehaviour: m_ChildControlHeight: 0 m_ChildScaleWidth: 0 m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 --- !u!1 &3273039434490064558 GameObject: m_ObjectHideFlags: 0 @@ -3617,9 +3567,9 @@ RectTransform: m_Father: {fileID: 3273039434832831089} m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 678, y: -16} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 32, y: 32} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &3273039434490064554 @@ -3645,6 +3595,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -3673,6 +3624,7 @@ MonoBehaviour: m_EditorClassIdentifier: m_Navigation: m_Mode: 0 + m_WrapAround: 0 m_SelectOnUp: {fileID: 0} m_SelectOnDown: {fileID: 0} m_SelectOnLeft: {fileID: 0} @@ -3703,6 +3655,7 @@ MonoBehaviour: m_PersistentCalls: m_Calls: - m_Target: {fileID: 3899680651762377189} + m_TargetAssemblyTypeName: m_MethodName: GalleryImageTransition m_Mode: 6 m_Arguments: @@ -3761,10 +3714,10 @@ RectTransform: m_Father: {fileID: 3273039434947570076} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 270.4, y: -18} - m_SizeDelta: {x: 540.8, y: 36} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 36} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &3273039434642358940 CanvasRenderer: @@ -3802,6 +3755,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -3924,10 +3878,10 @@ RectTransform: m_Father: {fileID: 3273039434997191342} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 270.4, y: 0} - m_SizeDelta: {x: 540.8, y: 80} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 80} m_Pivot: {x: 0.5, y: 1} --- !u!222 &3273039434652287840 CanvasRenderer: @@ -3965,6 +3919,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -4073,10 +4028,10 @@ RectTransform: m_Father: {fileID: 3273039434947570076} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 270.4, y: -54} - m_SizeDelta: {x: 540.8, y: 36} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 36} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &3273039434708071198 CanvasRenderer: @@ -4114,6 +4069,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -4241,9 +4197,9 @@ RectTransform: m_Father: {fileID: 3273039434433629359} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 116.46667, y: -24} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 230, y: 48} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &3273039434782283550 @@ -4269,6 +4225,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -4297,6 +4254,7 @@ MonoBehaviour: m_EditorClassIdentifier: m_Navigation: m_Mode: 4 + m_WrapAround: 0 m_SelectOnUp: {fileID: 5252292763611017344} m_SelectOnDown: {fileID: 3273039434906648025} m_SelectOnLeft: {fileID: 3273039434906648025} @@ -4328,6 +4286,7 @@ MonoBehaviour: m_PersistentCalls: m_Calls: - m_Target: {fileID: 3899680651762377189} + m_TargetAssemblyTypeName: m_MethodName: RatePositiveButtonPress m_Mode: 1 m_Arguments: @@ -4518,6 +4477,7 @@ MonoBehaviour: m_ChildControlHeight: 0 m_ChildScaleWidth: 0 m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 --- !u!1 &3273039434832831090 GameObject: m_ObjectHideFlags: 0 @@ -4584,6 +4544,7 @@ MonoBehaviour: m_ChildControlHeight: 0 m_ChildScaleWidth: 0 m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 --- !u!1 &3273039434906648030 GameObject: m_ObjectHideFlags: 0 @@ -4644,6 +4605,7 @@ MonoBehaviour: m_EditorClassIdentifier: m_Navigation: m_Mode: 4 + m_WrapAround: 0 m_SelectOnUp: {fileID: 0} m_SelectOnDown: {fileID: 3273039434906648025} m_SelectOnLeft: {fileID: 5252292763153535024} @@ -4711,10 +4673,10 @@ RectTransform: m_Father: {fileID: 3273039434997191342} m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 270.4, y: -402} - m_SizeDelta: {x: 540.8, y: 180} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 270.4, y: 0} + m_SizeDelta: {x: 540.8, y: 0} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &3273039434947570074 MonoBehaviour: @@ -4741,6 +4703,7 @@ MonoBehaviour: m_ChildControlHeight: 0 m_ChildScaleWidth: 0 m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 --- !u!114 &3273039434947570075 MonoBehaviour: m_ObjectHideFlags: 0 @@ -4900,6 +4863,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -4956,7 +4920,7 @@ RectTransform: m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 1, y: 1} m_AnchoredPosition: {x: -32, y: -200} - m_SizeDelta: {x: -64, y: 668} + m_SizeDelta: {x: -64, y: 0} m_Pivot: {x: 0.5, y: 1} --- !u!114 &3273039434997191340 MonoBehaviour: @@ -4983,6 +4947,7 @@ MonoBehaviour: m_ChildControlHeight: 0 m_ChildScaleWidth: 0 m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 --- !u!114 &3273039434997191341 MonoBehaviour: m_ObjectHideFlags: 0 @@ -5057,6 +5022,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 0} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -5108,11 +5074,11 @@ RectTransform: m_Father: {fileID: 3273039434947570076} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 220, y: -50} + m_AnchorMin: {x: 1, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 440, y: 100} - m_Pivot: {x: 0.5, y: 0.5} + m_Pivot: {x: 1, y: 1} --- !u!114 &3273039435399851236 MonoBehaviour: m_ObjectHideFlags: 0 @@ -5158,6 +5124,7 @@ MonoBehaviour: m_ChildControlHeight: 0 m_ChildScaleWidth: 0 m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 --- !u!1 &3273039435438669275 GameObject: m_ObjectHideFlags: 0 @@ -5191,9 +5158,9 @@ RectTransform: m_Father: {fileID: 3273039435399851238} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 299, y: -18} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 290, y: 36} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &3273039435438669255 @@ -5232,6 +5199,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -5366,6 +5334,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 0} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -5413,9 +5382,9 @@ RectTransform: m_Father: {fileID: 5446149088473426953} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 672, y: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 1344, y: 920} m_Pivot: {x: 0.5, y: 1} --- !u!1 &3273039435503992161 @@ -5452,8 +5421,8 @@ RectTransform: m_Father: {fileID: 3273039433540793759} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} m_AnchoredPosition: {x: 672, y: 0} m_SizeDelta: {x: 1200, y: 0} m_Pivot: {x: 0.5, y: 0} @@ -5507,6 +5476,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -5615,10 +5585,10 @@ RectTransform: m_Father: {fileID: 3273039434947570076} m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 270.4, y: -162} - m_SizeDelta: {x: 540.8, y: 36} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 36} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &3273039435546211894 CanvasRenderer: @@ -5656,6 +5626,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -5805,6 +5776,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 0.05490196, g: 0.0627451, b: 0.105882354, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -5890,9 +5862,9 @@ RectTransform: m_Father: {fileID: 3273039434832831089} m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 606, y: -16} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 32, y: 32} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &6421430249175359233 @@ -5917,6 +5889,7 @@ MonoBehaviour: m_EditorClassIdentifier: m_Navigation: m_Mode: 0 + m_WrapAround: 0 m_SelectOnUp: {fileID: 0} m_SelectOnDown: {fileID: 0} m_SelectOnLeft: {fileID: 0} @@ -5947,6 +5920,7 @@ MonoBehaviour: m_PersistentCalls: m_Calls: - m_Target: {fileID: 3899680651762377189} + m_TargetAssemblyTypeName: m_MethodName: GalleryImageTransition m_Mode: 6 m_Arguments: @@ -6018,6 +5992,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 0, g: 0, b: 0, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -6124,10 +6099,10 @@ RectTransform: m_Father: {fileID: 3273039434782283537} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 135, y: -24} - m_SizeDelta: {x: 26.09, y: 32} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 135, y: 0} + m_SizeDelta: {x: 0, y: 32} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &5446149087825392623 CanvasRenderer: @@ -6179,6 +6154,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -6288,10 +6264,10 @@ RectTransform: m_Father: {fileID: 3273039433540793759} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 672, y: -90.58} - m_SizeDelta: {x: 1200, y: 40.58} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 672, y: 0} + m_SizeDelta: {x: 1200, y: 0} m_Pivot: {x: 0.5, y: 0} --- !u!222 &5446149087856158327 CanvasRenderer: @@ -6343,6 +6319,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -6464,9 +6441,9 @@ RectTransform: m_Father: {fileID: 3273039434832831089} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 550, y: -16} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 100} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &5446149087887404624 @@ -6508,6 +6485,7 @@ MonoBehaviour: m_ChildControlHeight: 0 m_ChildScaleWidth: 0 m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 --- !u!1 &5446149088050845366 GameObject: m_ObjectHideFlags: 0 @@ -6574,6 +6552,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -6635,10 +6614,10 @@ RectTransform: m_Father: {fileID: 3273039434376076649} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 135, y: -24} - m_SizeDelta: {x: 26.09, y: 32} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 135, y: 0} + m_SizeDelta: {x: 0, y: 32} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &5446149088219727747 CanvasRenderer: @@ -6690,6 +6669,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -6826,6 +6806,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 0.02745098, g: 0.75686276, b: 0.84705883, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -6935,6 +6916,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 0.02745098, g: 0.75686276, b: 0.84705883, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -7022,7 +7004,7 @@ RectTransform: m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 1, y: 1} m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 1290.58} + m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 1} --- !u!114 &5446149088473426959 MonoBehaviour: @@ -7063,6 +7045,7 @@ MonoBehaviour: m_ChildControlHeight: 0 m_ChildScaleWidth: 0 m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 --- !u!222 &5446149088473426957 CanvasRenderer: m_ObjectHideFlags: 0 @@ -7086,6 +7069,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 0} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -7161,6 +7145,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 0.2} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -7236,6 +7221,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 0.02745098, g: 0.75686276, b: 0.84705883, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -7324,6 +7310,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 0.49411765, g: 0.9372549, b: 0.54901963, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -7415,6 +7402,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 0.02745098, g: 0.75686276, b: 0.84705883, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -7522,6 +7510,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -7649,10 +7638,10 @@ RectTransform: m_Father: {fileID: 3273039434997191342} m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 0, y: -668} - m_SizeDelta: {x: 540.8, y: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0, y: 1} --- !u!114 &5716021520946579898 MonoBehaviour: @@ -7668,84 +7657,26 @@ MonoBehaviour: m_EditorClassIdentifier: cellHeight: 40 padding: {x: 8, y: 8} ---- !u!114 &4620276559427926392 -MonoBehaviour: +--- !u!1 &6001479263781637860 +GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5881243081133148216} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} - m_Name: - m_EditorClassIdentifier: - m_HorizontalFit: 2 - m_VerticalFit: 2 ---- !u!114 &7282946988715402075 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5881243081133148216} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} - m_Name: - m_EditorClassIdentifier: - reference: Back - text: {fileID: 6617076927635740882} - translatedLanguageFontPairingOverrides: {fileID: 0} ---- !u!114 &4027036492104793175 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5881243082662799496} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} - m_Name: - m_EditorClassIdentifier: - reference: Subscribe - text: {fileID: 6617076928259422306} - translatedLanguageFontPairingOverrides: {fileID: 0} ---- !u!114 &5446149088466286456 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5881243082662799496} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} - m_Name: - m_EditorClassIdentifier: - m_HorizontalFit: 2 - m_VerticalFit: 0 ---- !u!1 &6001479263781637860 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8739411987462750664} - - component: {fileID: 3249403476551019671} - - component: {fileID: 6038744457680206310} - m_Layer: 5 - m_Name: thumbup - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &8739411987462750664 -RectTransform: + serializedVersion: 6 + m_Component: + - component: {fileID: 8739411987462750664} + - component: {fileID: 3249403476551019671} + - component: {fileID: 6038744457680206310} + m_Layer: 5 + m_Name: thumbup + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8739411987462750664 +RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} @@ -7786,6 +7717,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 0.05490196, g: 0.0627451, b: 0.105882354, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -7800,21 +7732,6 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 ---- !u!114 &4119706640577824894 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6282401861415068813} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: edb10346a1dac1d41a69f1b9c914fbfd, type: 3} - m_Name: - m_EditorClassIdentifier: - color: 8 - colorScheme: {fileID: 0} - image: {fileID: 4874408550150365685} --- !u!1 &6576450648925541261 GameObject: m_ObjectHideFlags: 0 @@ -7849,9 +7766,9 @@ RectTransform: m_Father: {fileID: 3271112139964900373} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 336.91998, y: -44} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 24, y: 24} m_Pivot: {x: 1, y: 0} --- !u!222 &6999420873491481569 @@ -7877,6 +7794,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -7966,6 +7884,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 0, g: 0, b: 0, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -8083,6 +8002,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -8190,9 +8110,9 @@ RectTransform: m_Father: {fileID: 3273039434832831089} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 494, y: -16} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 32, y: 32} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &8922380701079432211 @@ -8217,6 +8137,7 @@ MonoBehaviour: m_EditorClassIdentifier: m_Navigation: m_Mode: 0 + m_WrapAround: 0 m_SelectOnUp: {fileID: 0} m_SelectOnDown: {fileID: 0} m_SelectOnLeft: {fileID: 0} @@ -8247,6 +8168,7 @@ MonoBehaviour: m_PersistentCalls: m_Calls: - m_Target: {fileID: 3899680651762377189} + m_TargetAssemblyTypeName: m_MethodName: GalleryImageTransition m_Mode: 6 m_Arguments: @@ -8291,9 +8213,9 @@ RectTransform: m_Father: {fileID: 3271112141933888677} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 88.38, y: -20} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 24, y: 24} m_Pivot: {x: 1, y: 0.5} --- !u!222 &4931862389693267674 @@ -8319,6 +8241,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -8412,6 +8335,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 0.02745098, g: 0.75686276, b: 0.84705883, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -8484,6 +8408,7 @@ MonoBehaviour: m_ChildControlHeight: 0 m_ChildScaleWidth: 0 m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 --- !u!1 &9176244493582597812 GameObject: m_ObjectHideFlags: 0 @@ -8545,6 +8470,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -8597,7 +8523,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_AnchorMax.y - value: 1 + value: 0 objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_AnchorMin.x @@ -8605,11 +8531,11 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_AnchorMin.y - value: 1 + value: 0 objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_SizeDelta.x - value: 540.8 + value: 0 objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_SizeDelta.y @@ -8649,7 +8575,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_AnchoredPosition.y - value: -120 + value: 0 objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_LocalEulerAnglesHint.x @@ -8681,17 +8607,17 @@ PrefabInstance: - target: {fileID: 5802092550609450754, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_AnchorMax.y - value: 1 + value: 0 objectReference: {fileID: 0} - target: {fileID: 5802092550609450754, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_AnchorMin.y - value: 1 + value: 0 objectReference: {fileID: 0} - target: {fileID: 5802092550609450754, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_SizeDelta.x - value: 93.04 + value: 0 objectReference: {fileID: 0} - target: {fileID: 5802092550609450754, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} @@ -8706,7 +8632,7 @@ PrefabInstance: - target: {fileID: 5802092550609450754, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_AnchoredPosition.y - value: -32 + value: 0 objectReference: {fileID: 0} - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} @@ -9221,15 +9147,21 @@ PrefabInstance: m_RemovedComponents: - {fileID: 0} m_SourcePrefab: {fileID: 100100000, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} ---- !u!1 &5881243082662799496 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 9003385506253720779, guid: 9bde00a16f32d6d42a1280198365e78b, +--- !u!114 &6617076928259422306 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 8554790275978124321, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} m_PrefabInstance: {fileID: 3273039433874646083} m_PrefabAsset: {fileID: 0} ---- !u!224 &3271112139964900373 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, + m_GameObject: {fileID: 5881243082662799496} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &5881243082662799496 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 9003385506253720779, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} m_PrefabInstance: {fileID: 3273039433874646083} m_PrefabAsset: {fileID: 0} @@ -9245,24 +9177,58 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d5ce6686d7065cf4986b2ed3e2773c96, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!114 &6617076928259422306 stripped -MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 8554790275978124321, guid: 9bde00a16f32d6d42a1280198365e78b, +--- !u!224 &3271112139964900373 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} m_PrefabInstance: {fileID: 3273039433874646083} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5881243082662799496} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} - m_Name: - m_EditorClassIdentifier: --- !u!1 &520514034766852762 stripped GameObject: m_CorrespondingSourceObject: {fileID: 3050362772334548697, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} m_PrefabInstance: {fileID: 3273039433874646083} m_PrefabAsset: {fileID: 0} +--- !u!114 &3273039433874646090 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 520514034766852762} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 4 + m_Spacing: 16 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 0 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!114 &5446149088466286456 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5881243082662799496} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 0 --- !u!1001 &3273039435294115059 PrefabInstance: m_ObjectHideFlags: 0 @@ -9300,7 +9266,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_SizeDelta.x - value: 112.38 + value: 0 objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_SizeDelta.y @@ -9402,22 +9368,22 @@ PrefabInstance: - target: {fileID: 5802092550609450754, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_AnchorMax.y - value: 1 + value: 0 objectReference: {fileID: 0} - target: {fileID: 5802092550609450754, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_AnchorMin.y - value: 1 + value: 0 objectReference: {fileID: 0} - target: {fileID: 5802092550609450754, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_SizeDelta.x - value: 28.38 + value: 0 objectReference: {fileID: 0} - target: {fileID: 5802092550609450754, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_SizeDelta.y - value: 15.22 + value: 0 objectReference: {fileID: 0} - target: {fileID: 5802092550609450754, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} @@ -9427,7 +9393,7 @@ PrefabInstance: - target: {fileID: 5802092550609450754, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_AnchoredPosition.y - value: -20 + value: 0 objectReference: {fileID: 0} - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} @@ -9521,18 +9487,36 @@ PrefabInstance: objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} ---- !u!224 &3271112141933888677 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, +--- !u!1 &5881243081133148216 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 9003385506253720779, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} m_PrefabInstance: {fileID: 3273039435294115059} m_PrefabAsset: {fileID: 0} +--- !u!114 &6617076927635740882 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 8554790275978124321, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + m_PrefabInstance: {fileID: 3273039435294115059} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5881243081133148216} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1 &520514034879861290 stripped GameObject: m_CorrespondingSourceObject: {fileID: 3050362772334548697, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} m_PrefabInstance: {fileID: 3273039435294115059} m_PrefabAsset: {fileID: 0} +--- !u!224 &3271112141933888677 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + m_PrefabInstance: {fileID: 3273039435294115059} + m_PrefabAsset: {fileID: 0} --- !u!114 &5252292763153535024 stripped MonoBehaviour: m_CorrespondingSourceObject: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, @@ -9545,24 +9529,95 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d5ce6686d7065cf4986b2ed3e2773c96, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!1 &5881243081133148216 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 9003385506253720779, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - m_PrefabInstance: {fileID: 3273039435294115059} +--- !u!114 &33805108375542221 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} ---- !u!114 &6617076927635740882 stripped + m_GameObject: {fileID: 520514034879861290} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 24 + m_Right: 24 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 4 + m_Spacing: 12 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 0 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!114 &3223107712590027654 MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 8554790275978124321, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - m_PrefabInstance: {fileID: 3273039435294115059} + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 520514034879861290} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 0 +--- !u!114 &5446149088514084159 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 520514034879861290} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 1 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!114 &4620276559427926392 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 5881243081133148216} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} m_Name: m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 2 +--- !u!114 &7282946988715402075 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5881243081133148216} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} + m_Name: + m_EditorClassIdentifier: + reference: Back + text: {fileID: 6617076927635740882} + translatedLanguageFontPairingOverrides: {fileID: 0} --- !u!1001 &5446149087673912787 PrefabInstance: m_ObjectHideFlags: 0 @@ -9697,18 +9752,18 @@ PrefabInstance: objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: d5fdf02cff5c92349853772a91817fbc, type: 3} ---- !u!1 &4501816514908853783 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 8497503018571144132, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - m_PrefabInstance: {fileID: 5446149087673912787} - m_PrefabAsset: {fileID: 0} --- !u!224 &448868878480969377 stripped RectTransform: m_CorrespondingSourceObject: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, type: 3} m_PrefabInstance: {fileID: 5446149087673912787} m_PrefabAsset: {fileID: 0} +--- !u!1 &4501816514908853783 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 8497503018571144132, guid: d5fdf02cff5c92349853772a91817fbc, + type: 3} + m_PrefabInstance: {fileID: 5446149087673912787} + m_PrefabAsset: {fileID: 0} --- !u!1001 &5446149087984305754 PrefabInstance: m_ObjectHideFlags: 0 @@ -9885,3 +9940,18 @@ RectTransform: type: 3} m_PrefabInstance: {fileID: 5446149087984305754} m_PrefabAsset: {fileID: 0} +--- !u!114 &4119706640577824894 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6282401861415068813} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: edb10346a1dac1d41a69f1b9c914fbfd, type: 3} + m_Name: + m_EditorClassIdentifier: + color: 8 + colorScheme: {fileID: 0} + image: {fileID: 4874408550150365685} diff --git a/UI/Prefabs/Home/BrowserModListItem_Featured.prefab b/UI/Prefabs/Home/BrowserModListItem_Featured.prefab index c86ee51..d356e1b 100644 --- a/UI/Prefabs/Home/BrowserModListItem_Featured.prefab +++ b/UI/Prefabs/Home/BrowserModListItem_Featured.prefab @@ -1,5 +1,50 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: +--- !u!1 &329518543654443100 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1878955701145969080} + - component: {fileID: 6555446419017274226} + m_Layer: 5 + m_Name: Details + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1878955701145969080 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 329518543654443100} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 8126603642571348381} + m_Father: {fileID: 7978843899359299681} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 72} + m_Pivot: {x: 0.5, y: 1} +--- !u!222 &6555446419017274226 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 329518543654443100} + m_CullTransparentMesh: 0 --- !u!1 &670208008075011765 GameObject: m_ObjectHideFlags: 0 @@ -62,6 +107,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 0.4509804, g: 0.4627451, b: 0.5176471, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -150,6 +196,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 0.75686276, g: 0.76862746, b: 0.84313726, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -189,6 +236,7 @@ GameObject: - component: {fileID: 601744267284140412} - component: {fileID: 6263590729001574840} - component: {fileID: 4309506549573501120} + - component: {fileID: 2744926554100011659} m_Layer: 5 m_Name: background m_TagString: Untagged @@ -238,6 +286,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 0.12941177, g: 0.16078432, b: 0.27058825, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -265,6 +314,258 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: type: 1 +--- !u!114 &2744926554100011659 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2683707351702261179} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: adb30198aa32dd140b5750692dd48104, type: 3} + m_Name: + m_EditorClassIdentifier: + radius: 20 + image: {fileID: 6263590729001574840} +--- !u!1 &3175543426323493424 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8126603642571348381} + - component: {fileID: 8336337589277881770} + - component: {fileID: 3408521697165519242} + m_Layer: 5 + m_Name: NameText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8126603642571348381 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3175543426323493424} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1878955701145969080} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: 0, y: 18.199} + m_SizeDelta: {x: 560, y: 36.397} + m_Pivot: {x: 0, y: 0.5} +--- !u!222 &8336337589277881770 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3175543426323493424} + m_CullTransparentMesh: 0 +--- !u!114 &3408521697165519242 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3175543426323493424} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 07eb140c74981ed4aab6d34ebb2e5737, type: 2} + m_sharedMaterial: {fileID: 21301536800525264, guid: 07eb140c74981ed4aab6d34ebb2e5737, + type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 20 + m_fontSizeBase: 20 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 1 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &7277334745243406496 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4090251461132109702} + - component: {fileID: 8137607957762771903} + - component: {fileID: 4055374861264622602} + - component: {fileID: 3488673191147580937} + - component: {fileID: 1801559441959138603} + m_Layer: 5 + m_Name: Featured Backplate + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4090251461132109702 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7277334745243406496} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 7978843899359299681} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 72} + m_Pivot: {x: 0.5, y: 1} +--- !u!222 &8137607957762771903 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7277334745243406496} + m_CullTransparentMesh: 0 +--- !u!114 &4055374861264622602 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7277334745243406496} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.05490196, g: 0.0627451, b: 0.105882354, a: 0} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 1d7a613ab4eb9984ca2ff61802b05e50, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &3488673191147580937 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7277334745243406496} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} + m_Name: + m_EditorClassIdentifier: + type: 2 +--- !u!114 &1801559441959138603 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7277334745243406496} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 0 --- !u!1 &7978843899110051884 GameObject: m_ObjectHideFlags: 0 @@ -276,8 +577,9 @@ GameObject: - component: {fileID: 7978843899110051885} - component: {fileID: 7978843899110051887} - component: {fileID: 7978843899110051886} + - component: {fileID: 8548587467699551652} m_Layer: 5 - m_Name: icon + m_Name: logo m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -325,6 +627,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 0} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -339,6 +642,20 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 +--- !u!114 &8548587467699551652 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7978843899110051884} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: adb30198aa32dd140b5750692dd48104, type: 3} + m_Name: + m_EditorClassIdentifier: + radius: 20 + image: {fileID: 7978843899110051886} --- !u!1 &7978843899359299680 GameObject: m_ObjectHideFlags: 0 @@ -350,8 +667,6 @@ GameObject: - component: {fileID: 7978843899359299681} - component: {fileID: 6353333058533976017} - component: {fileID: 5763768017196757652} - - component: {fileID: 8203825838756300506} - - component: {fileID: 5855975464659338118} - component: {fileID: 1931807906856659369} m_Layer: 5 m_Name: BrowserModListItem_Featured @@ -376,6 +691,8 @@ RectTransform: - {fileID: 7978843899110051885} - {fileID: 4942168968004334964} - {fileID: 4790354404997292985} + - {fileID: 4090251461132109702} + - {fileID: 1878955701145969080} m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -409,6 +726,9 @@ MonoBehaviour: image: {fileID: 7978843899110051886} background: {fileID: 2683707351702261179} failedToLoad: {fileID: 670208008075011765} + purchasedBanner: {fileID: 0} + featuredSelectedPrice: {fileID: 0} + featuredSelectedName: {fileID: 3408521697165519242} progressTab: {fileID: 650134153158627180} rowIndex: 2 profileIndex: 0 @@ -444,48 +764,6 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 7978843899359299680} m_CullTransparentMesh: 0 ---- !u!114 &8203825838756300506 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7978843899359299680} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 21300000, guid: de620a661822071448a42c3581ca6cdf, type: 3} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &5855975464659338118 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7978843899359299680} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3} - m_Name: - m_EditorClassIdentifier: - m_ShowMaskGraphic: 0 --- !u!114 &1931807906856659369 MonoBehaviour: m_ObjectHideFlags: 0 @@ -504,6 +782,7 @@ MonoBehaviour: m_PersistentCalls: m_Calls: - m_Target: {fileID: 6353333058533976017} + m_TargetAssemblyTypeName: m_MethodName: SoundHover m_Mode: 1 m_Arguments: @@ -519,6 +798,7 @@ MonoBehaviour: m_PersistentCalls: m_Calls: - m_Target: {fileID: 6353333058533976017} + m_TargetAssemblyTypeName: m_MethodName: SoundClick m_Mode: 1 m_Arguments: @@ -648,12 +928,6 @@ PrefabInstance: objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: fb11aa92a8bf14c40a4f846d52a9caeb, type: 3} ---- !u!224 &4790354404997292985 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 4790354403107458841, guid: fb11aa92a8bf14c40a4f846d52a9caeb, - type: 3} - m_PrefabInstance: {fileID: 1936043168} - m_PrefabAsset: {fileID: 0} --- !u!114 &650134153158627180 stripped MonoBehaviour: m_CorrespondingSourceObject: {fileID: 650134152300667852, guid: fb11aa92a8bf14c40a4f846d52a9caeb, @@ -666,6 +940,12 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: b9b8a49fb798dad40a7bf351ff745a1f, type: 3} m_Name: m_EditorClassIdentifier: +--- !u!224 &4790354404997292985 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 4790354403107458841, guid: fb11aa92a8bf14c40a4f846d52a9caeb, + type: 3} + m_PrefabInstance: {fileID: 1936043168} + m_PrefabAsset: {fileID: 0} --- !u!1001 &1275338264376462613 PrefabInstance: m_ObjectHideFlags: 0 diff --git a/UI/Prefabs/Home/BrowserModListItem_Regular.prefab b/UI/Prefabs/Home/BrowserModListItem_Regular.prefab index d8c0a5f..8a575a9 100644 --- a/UI/Prefabs/Home/BrowserModListItem_Regular.prefab +++ b/UI/Prefabs/Home/BrowserModListItem_Regular.prefab @@ -1,20 +1,5 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: ---- !u!114 &6272258063222005774 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 566200014977218387} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: edb10346a1dac1d41a69f1b9c914fbfd, type: 3} - m_Name: - m_EditorClassIdentifier: - color: 8 - colorScheme: {fileID: 0} - image: {fileID: 1392025824990507563} --- !u!1 &1036584509056097331 GameObject: m_ObjectHideFlags: 0 @@ -27,7 +12,7 @@ GameObject: - component: {fileID: 8577429278094768941} - component: {fileID: 8501724592818701228} m_Layer: 5 - m_Name: Text (TMP) + m_Name: Title Text (TMP) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -49,8 +34,8 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: -200} - m_SizeDelta: {x: -32, y: 48} + m_AnchoredPosition: {x: 0, y: -197.3} + m_SizeDelta: {x: -32, y: 20} m_Pivot: {x: 0.5, y: 1} --- !u!222 &8577429278094768941 CanvasRenderer: @@ -75,6 +60,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -210,6 +196,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 0.75686276, g: 0.76862746, b: 0.84313726, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -297,6 +284,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 0.9433962, g: 0.9433962, b: 0.9433962, a: 0} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -373,97 +361,12 @@ MonoBehaviour: dropdowns: [] toggles: [] scheme: {fileID: 0} + purchasedBanner: {fileID: 0} image: {fileID: 3616021901724498308} - title: {fileID: 8501724592818701228} + titleTxt: {fileID: 8501724592818701228} + priceTxt: {fileID: 0} loadingIcon: {fileID: 9149599758244254246} failedToLoadIcon: {fileID: 6270406780165081896} - profile: - id: - id: 0 - tags: [] - status: 0 - visible: 0 - name: - summary: - description: - contentWarnings: 0 - galleryImages_Original: [] - galleryImages_320x180: [] - galleryImages_640x360: [] - logoImage_320x180: - modId: - id: 0 - url: - filename: - logoImage_640x360: - modId: - id: 0 - url: - filename: - logoImage_1280x720: - modId: - id: 0 - url: - filename: - logoImage_Original: - modId: - id: 0 - url: - filename: - creator: - username: - userId: 0 - portal_username: - avatar_original: - modId: - id: 0 - url: - filename: - avatar_50x50: - modId: - id: 0 - url: - filename: - avatar_100x100: - modId: - id: 0 - url: - filename: - timezone: - language: - creatorAvatar_50x50: - modId: - id: 0 - url: - filename: - creatorAvatar_100x100: - modId: - id: 0 - url: - filename: - creatorAvatar_Original: - modId: - id: 0 - url: - filename: - metadata: - latestVersion: - latestChangelog: - stats: - modId: - id: 0 - popularityRankPosition: 0 - popularityRankTotalMods: 0 - downloadsToday: 0 - downloadsTotal: 0 - subscriberTotal: 0 - ratingsTotal: 0 - ratingsPositive: 0 - ratingsNegative: 0 - ratingsPercentagePositive: 0 - ratingsWeightedAggregate: 0 - ratingsDisplayText: - archiveFileSize: 0 progressTab: {fileID: 1325534867089798728} --- !u!114 &6357600789068724130 MonoBehaviour: @@ -479,6 +382,7 @@ MonoBehaviour: m_EditorClassIdentifier: m_Navigation: m_Mode: 0 + m_WrapAround: 0 m_SelectOnUp: {fileID: 0} m_SelectOnDown: {fileID: 0} m_SelectOnLeft: {fileID: 0} @@ -509,6 +413,7 @@ MonoBehaviour: m_PersistentCalls: m_Calls: - m_Target: {fileID: 3616021901904687621} + m_TargetAssemblyTypeName: m_MethodName: OpenModDetailsForThisProfile m_Mode: 1 m_Arguments: @@ -557,6 +462,7 @@ MonoBehaviour: m_PersistentCalls: m_Calls: - m_Target: {fileID: 3616021901904687621} + m_TargetAssemblyTypeName: m_MethodName: SoundHover m_Mode: 1 m_Arguments: @@ -572,6 +478,7 @@ MonoBehaviour: m_PersistentCalls: m_Calls: - m_Target: {fileID: 3616021901904687621} + m_TargetAssemblyTypeName: m_MethodName: SoundClick m_Mode: 1 m_Arguments: @@ -644,6 +551,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 0.4509804, g: 0.4627451, b: 0.5176471, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -736,6 +644,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -825,6 +734,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 0.105882354, g: 0.1254902, b: 0.21960784, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -1028,6 +938,21 @@ RectTransform: type: 3} m_PrefabInstance: {fileID: 1972721091276379524} m_PrefabAsset: {fileID: 0} +--- !u!114 &6272258063222005774 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 566200014977218387} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: edb10346a1dac1d41a69f1b9c914fbfd, type: 3} + m_Name: + m_EditorClassIdentifier: + color: 8 + colorScheme: {fileID: 0} + image: {fileID: 1392025824990507563} --- !u!1001 &6951627270667642102 PrefabInstance: m_ObjectHideFlags: 0 diff --git a/UI/Prefabs/Home/BrowserModListItem_RegularSelected.prefab b/UI/Prefabs/Home/BrowserModListItem_RegularSelected.prefab index ea3409a..e8e40a5 100644 --- a/UI/Prefabs/Home/BrowserModListItem_RegularSelected.prefab +++ b/UI/Prefabs/Home/BrowserModListItem_RegularSelected.prefab @@ -13,7 +13,7 @@ GameObject: - component: {fileID: 4426968270457653949} - component: {fileID: 446002139274487427} m_Layer: 5 - m_Name: Text + m_Name: Title Text m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -35,8 +35,8 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0} m_AnchorMax: {x: 0.5, y: 0} - m_AnchoredPosition: {x: 0, y: 81} - m_SizeDelta: {x: 396, y: 44} + m_AnchoredPosition: {x: 0, y: 91.2} + m_SizeDelta: {x: 396, y: 20} m_Pivot: {x: 0.5, y: 0} --- !u!222 &6486262265191284404 CanvasRenderer: @@ -61,6 +61,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -216,6 +217,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 0.05490196, g: 0.0627451, b: 0.105882354, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -331,6 +333,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -405,6 +408,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 0.9433962, g: 0.9433962, b: 0.9433962, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -475,7 +479,7 @@ MonoBehaviour: image: {fileID: 3616021901724498308} failedToLoadIcon: {fileID: 7176677892884716255} loadingIcon: {fileID: 6229365861290620620} - title: {fileID: 4426968270457653949} + titleTxt: {fileID: 4426968270457653949} subscribeButtonText: {fileID: 696562318495947841} contextMenuPosition: {fileID: 2875788690058587427} listItemToReplicate: {fileID: 0} @@ -483,7 +487,7 @@ MonoBehaviour: progressTab: {fileID: 2473591249711973333} --- !u!95 &6783768072497898932 Animator: - serializedVersion: 3 + serializedVersion: 5 m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} @@ -496,10 +500,12 @@ Animator: m_UpdateMode: 0 m_ApplyRootMotion: 0 m_LinearVelocityBlending: 0 + m_StabilizeFeet: 0 m_WarningMessage: m_HasTransformHierarchy: 1 m_AllowConstantClipSamplingOptimization: 1 - m_KeepAnimatorControllerStateOnDisable: 0 + m_KeepAnimatorStateOnDisable: 0 + m_WriteDefaultValuesOnDisable: 0 --- !u!114 &2708172086888723316 MonoBehaviour: m_ObjectHideFlags: 0 @@ -584,6 +590,7 @@ MonoBehaviour: m_ChildControlHeight: 0 m_ChildScaleWidth: 0 m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 --- !u!114 &6353958695002081936 MonoBehaviour: m_ObjectHideFlags: 0 @@ -659,6 +666,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 0.02745098, g: 0.75686276, b: 0.84705883, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -748,6 +756,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 0} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -824,6 +833,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 0.105882354, g: 0.1254902, b: 0.21960784, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -912,6 +922,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 0.75686276, g: 0.76862746, b: 0.84313726, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -1001,6 +1012,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 0.4509804, g: 0.4627451, b: 0.5176471, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -1091,6 +1103,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -1181,6 +1194,11 @@ PrefabInstance: propertyPath: m_textInfo.characterCount value: 9 objectReference: {fileID: 0} + - target: {fileID: 1635082254379573548, guid: 3d63c60c076ced34294aeaf91358d462, + type: 3} + propertyPath: m_TargetGraphic + value: + objectReference: {fileID: 1660180003712757373} - target: {fileID: 1635082254379573548, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} propertyPath: m_Navigation.m_Mode @@ -1441,6 +1459,11 @@ PrefabInstance: propertyPath: m_Name value: Subscribe objectReference: {fileID: 0} + - target: {fileID: 6442999689545999158, guid: 3d63c60c076ced34294aeaf91358d462, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} propertyPath: m_Pivot.x @@ -1554,6 +1577,24 @@ PrefabInstance: type: 2} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} +--- !u!224 &9159029705819095094 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + type: 3} + m_PrefabInstance: {fileID: 877398192327439759} + m_PrefabAsset: {fileID: 0} +--- !u!114 &1660180003712757373 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 1956534672024296434, guid: 3d63c60c076ced34294aeaf91358d462, + type: 3} + m_PrefabInstance: {fileID: 877398192327439759} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!114 &696562318495947841 stripped MonoBehaviour: m_CorrespondingSourceObject: {fileID: 398439637101619662, guid: 3d63c60c076ced34294aeaf91358d462, @@ -1578,12 +1619,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!224 &9159029705819095094 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - m_PrefabInstance: {fileID: 877398192327439759} - m_PrefabAsset: {fileID: 0} --- !u!1001 &1044698523055096549 PrefabInstance: m_ObjectHideFlags: 0 @@ -1925,12 +1960,6 @@ PrefabInstance: objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 71af8a9a5a69a5648af22465acf51a99, type: 3} ---- !u!224 &2875788690058587427 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 2996962303814152134, guid: 71af8a9a5a69a5648af22465acf51a99, - type: 3} - m_PrefabInstance: {fileID: 1044698523055096549} - m_PrefabAsset: {fileID: 0} --- !u!114 &5817750717166125528 stripped MonoBehaviour: m_CorrespondingSourceObject: {fileID: 6828387984629629757, guid: 71af8a9a5a69a5648af22465acf51a99, @@ -1943,6 +1972,24 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: +--- !u!1 &24699691489744928 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 1020140050670541509, guid: 71af8a9a5a69a5648af22465acf51a99, + type: 3} + m_PrefabInstance: {fileID: 1044698523055096549} + m_PrefabAsset: {fileID: 0} +--- !u!114 &24699691489744930 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 1020140050670541511, guid: 71af8a9a5a69a5648af22465acf51a99, + type: 3} + m_PrefabInstance: {fileID: 1044698523055096549} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 24699691489744928} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!114 &5948596955754438754 stripped MonoBehaviour: m_CorrespondingSourceObject: {fileID: 6697462529236771463, guid: 71af8a9a5a69a5648af22465acf51a99, @@ -1955,6 +2002,27 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: +--- !u!224 &2875788690058587427 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 2996962303814152134, guid: 71af8a9a5a69a5648af22465acf51a99, + type: 3} + m_PrefabInstance: {fileID: 1044698523055096549} + m_PrefabAsset: {fileID: 0} +--- !u!114 &9102667868689215100 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 24699691489744928} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} + m_Name: + m_EditorClassIdentifier: + reference: More options + text: {fileID: 24699691489744930} + translatedLanguageFontPairingOverrides: {fileID: 0} --- !u!1001 &2311987569356243850 PrefabInstance: m_ObjectHideFlags: 0 diff --git a/UI/Prefabs/Home/Home.prefab b/UI/Prefabs/Home/Home.prefab index c1e0c9d..4978390 100644 --- a/UI/Prefabs/Home/Home.prefab +++ b/UI/Prefabs/Home/Home.prefab @@ -1,6 +1,6 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: ---- !u!1 &11070247326230723 +--- !u!1 &2960945229545667041 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -8,87 +8,78 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 5631570825590719846} - - component: {fileID: 7422853957693510067} - - component: {fileID: 293988133779090127} - - component: {fileID: 5777099711251569235} + - component: {fileID: 2960945229545667046} + - component: {fileID: 2960945229545667044} + - component: {fileID: 2960945229545667047} m_Layer: 5 - m_Name: Dropshadow + m_Name: Text m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &5631570825590719846 +--- !u!224 &2960945229545667046 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 11070247326230723} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_GameObject: {fileID: 2960945229545667041} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] - m_Father: {fileID: 3494463204094689655} + m_Father: {fileID: 5760055837684760253} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 40, y: 40} + m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &7422853957693510067 +--- !u!222 &2960945229545667044 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 11070247326230723} + m_GameObject: {fileID: 2960945229545667041} m_CullTransparentMesh: 0 ---- !u!114 &293988133779090127 +--- !u!114 &2960945229545667047 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 11070247326230723} + m_GameObject: {fileID: 2960945229545667041} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 0.02745098, g: 0.75686276, b: 0.84705883, a: 1} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 21300000, guid: 2331a654c7aa71748b92458aa50e1748, type: 3} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &5777099711251569235 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 11070247326230723} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} - m_Name: - m_EditorClassIdentifier: - type: 4 ---- !u!1 &97387752698190353 + m_FontData: + m_Font: {fileID: 12800000, guid: 0774b14b39d939b4f80ff528506c94ba, type: 3} + m_FontSize: 24 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: '>' +--- !u!1 &2960945230357676419 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -96,66 +87,65 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 6309060602930312063} - - component: {fileID: 80258621391742354} - - component: {fileID: 1738492688917058987} - - component: {fileID: 1194942798608871401} - - component: {fileID: 6388068492771513046} + - component: {fileID: 2960945230357676416} + - component: {fileID: 2960945230357676422} + - component: {fileID: 2960945230357676417} + - component: {fileID: 8776311618546079018} m_Layer: 5 - m_Name: Page Right + m_Name: highlight m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &6309060602930312063 +--- !u!224 &2960945230357676416 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 97387752698190353} + m_GameObject: {fileID: 2960945230357676419} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 6227897226854095548} - m_Father: {fileID: 8641512021059779286} - m_RootOrder: 2 + m_Children: [] + m_Father: {fileID: 5346609901548097613} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 1, y: 0.5} - m_AnchorMax: {x: 1, y: 0.5} - m_AnchoredPosition: {x: -40, y: 0} - m_SizeDelta: {x: 48, y: 48} - m_Pivot: {x: 1, y: 0.5} ---- !u!222 &80258621391742354 + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -37} + m_SizeDelta: {x: 72, y: 146} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &2960945230357676422 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 97387752698190353} + m_GameObject: {fileID: 2960945230357676419} m_CullTransparentMesh: 0 ---- !u!114 &1738492688917058987 +--- !u!114 &2960945230357676417 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 97387752698190353} + m_GameObject: {fileID: 2960945230357676419} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Color: {r: 0.02745098, g: 0.75686276, b: 0.84705883, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 21300000, guid: de620a661822071448a42c3581ca6cdf, type: 3} + m_Sprite: {fileID: 21300000, guid: ae7af120ee031534f952fdd7a78b80f9, type: 3} m_Type: 1 m_PreserveAspect: 0 m_FillCenter: 1 @@ -165,104 +155,22 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 ---- !u!114 &1194942798608871401 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 97387752698190353} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 0 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Highlighted - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 1738492688917058987} - m_OnClick: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 2522303128527752034} - m_MethodName: SwipeRow - m_Mode: 6 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 1 - m_CallState: 2 ---- !u!114 &6388068492771513046 +--- !u!114 &8776311618546079018 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 97387752698190353} + m_GameObject: {fileID: 2960945230357676419} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d0b148fe25e99eb48b9724523833bab1, type: 3} + m_Script: {fileID: 11500000, guid: edb10346a1dac1d41a69f1b9c914fbfd, type: 3} m_Name: m_EditorClassIdentifier: - m_Delegates: - - eventID: 0 - callback: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 0} - m_MethodName: PlayHover - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 - - eventID: 4 - callback: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 0} - m_MethodName: PlayClick - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 ---- !u!1 &127541905976761173 + color: 4 + colorScheme: {fileID: 0} + image: {fileID: 2960945230357676417} +--- !u!1 &2960945230977109644 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -270,87 +178,78 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 7116277562353772175} - - component: {fileID: 3261082233185746101} - - component: {fileID: 7592982887714874102} - - component: {fileID: 1747938029670828209} + - component: {fileID: 2960945230977109645} + - component: {fileID: 2960945230977109651} + - component: {fileID: 2960945230977109650} m_Layer: 5 - m_Name: Exclamation + m_Name: Text m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &7116277562353772175 +--- !u!224 &2960945230977109645 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 127541905976761173} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_GameObject: {fileID: 2960945230977109644} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] - m_Father: {fileID: 7368421600720008905} + m_Father: {fileID: 5760055838803739576} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 12, y: 32} + m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &3261082233185746101 +--- !u!222 &2960945230977109651 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 127541905976761173} + m_GameObject: {fileID: 2960945230977109644} m_CullTransparentMesh: 0 ---- !u!114 &7592982887714874102 +--- !u!114 &2960945230977109650 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 127541905976761173} + m_GameObject: {fileID: 2960945230977109644} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 21300000, guid: bf3ef0ed793cec648b85261648c43e27, type: 3} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &1747938029670828209 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 127541905976761173} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} - m_Name: - m_EditorClassIdentifier: - type: 3 ---- !u!1 &245082372695515032 + m_FontData: + m_Font: {fileID: 12800000, guid: 0774b14b39d939b4f80ff528506c94ba, type: 3} + m_FontSize: 24 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: < +--- !u!1 &3291266321825260854 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -358,68 +257,65 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 4437617399257212789} - - component: {fileID: 4867713107267764482} - - component: {fileID: 7667303445379613288} - - component: {fileID: 2026078117832356598} + - component: {fileID: 1587016007410289970} + - component: {fileID: 8319583104441821876} + - component: {fileID: 4862175249450484632} m_Layer: 5 - m_Name: ErrorPanel + m_Name: Image (1) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 0 ---- !u!224 &4437617399257212789 + m_IsActive: 1 +--- !u!224 &1587016007410289970 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 245082372695515032} + m_GameObject: {fileID: 3291266321825260854} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 1401505348103715165} - - {fileID: 8103583356223253937} - - {fileID: 8415410797451387438} - m_Father: {fileID: 2482191731014220696} - m_RootOrder: 0 + m_Children: [] + m_Father: {fileID: 8600105461494756807} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} + m_AnchorMax: {x: 0, y: 0} m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} + m_SizeDelta: {x: 78, y: 22} m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &4867713107267764482 +--- !u!222 &8319583104441821876 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 245082372695515032} + m_GameObject: {fileID: 3291266321825260854} m_CullTransparentMesh: 0 ---- !u!114 &7667303445379613288 +--- !u!114 &4862175249450484632 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 245082372695515032} + m_GameObject: {fileID: 3291266321825260854} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 0.05490196, g: 0.0627451, b: 0.105882354, a: 1} + m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 21300000, guid: c05eab6045e68c1449e9a85be63f1495, type: 3} - m_Type: 1 + m_Sprite: {fileID: 21300000, guid: 1abe564f196a7a54381c40c8ef7de55c, type: 3} + m_Type: 0 m_PreserveAspect: 0 m_FillCenter: 1 m_FillMethod: 4 @@ -428,170 +324,72 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 ---- !u!114 &2026078117832356598 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 245082372695515032} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} - m_Name: - m_EditorClassIdentifier: - type: 2 ---- !u!1 &328851281575151252 -GameObject: +--- !u!1 &3762395240228533553 +GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 7762568280606121095} - - component: {fileID: 8024943191695011313} - - component: {fileID: 7362090288503381250} - - component: {fileID: 5402558011166370893} + - component: {fileID: 8600105461494756807} + - component: {fileID: 5889646863311440989} m_Layer: 5 - m_Name: Highest rated > + m_Name: Mod support by mod.io (1) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &7762568280606121095 +--- !u!224 &8600105461494756807 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 328851281575151252} + m_GameObject: {fileID: 3762395240228533553} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1230197134381729914} + m_Children: + - {fileID: 7400556031270052247} + - {fileID: 7320064122044428091} + - {fileID: 1587016007410289970} + m_Father: {fileID: 5760055838864409643} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 64, y: 0} - m_SizeDelta: {x: 283, y: 40} - m_Pivot: {x: 0, y: 1} ---- !u!222 &8024943191695011313 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 328851281575151252} - m_CullTransparentMesh: 0 ---- !u!114 &7362090288503381250 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 328851281575151252} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 0 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_text: Highest rated - m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 07eb140c74981ed4aab6d34ebb2e5737, type: 2} - m_sharedMaterial: {fileID: 21301536800525264, guid: 07eb140c74981ed4aab6d34ebb2e5737, - type: 2} - m_fontSharedMaterials: [] - m_fontMaterial: {fileID: 0} - m_fontMaterials: [] - m_fontColor32: - serializedVersion: 2 - rgba: 4294967295 - m_fontColor: {r: 1, g: 1, b: 1, a: 1} - m_enableVertexGradient: 0 - m_colorMode: 3 - m_fontColorGradient: - topLeft: {r: 1, g: 1, b: 1, a: 1} - topRight: {r: 1, g: 1, b: 1, a: 1} - bottomLeft: {r: 1, g: 1, b: 1, a: 1} - bottomRight: {r: 1, g: 1, b: 1, a: 1} - m_fontColorGradientPreset: {fileID: 0} - m_spriteAsset: {fileID: 0} - m_tintAllSprites: 0 - m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: -1183493901 - m_overrideHtmlColors: 0 - m_faceColor: - serializedVersion: 2 - rgba: 4294967295 - m_fontSize: 28 - m_fontSizeBase: 28 - m_fontWeight: 400 - m_enableAutoSizing: 0 - m_fontSizeMin: 18 - m_fontSizeMax: 72 - m_fontStyle: 0 - m_HorizontalAlignment: 1 - m_VerticalAlignment: 256 - m_textAlignment: 65535 - m_characterSpacing: 0 - m_wordSpacing: 0 - m_lineSpacing: 0 - m_lineSpacingMax: 0 - m_paragraphSpacing: 0 - m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 - m_wordWrappingRatios: 0.4 - m_overflowMode: 0 - m_linkedTextComponent: {fileID: 0} - parentLinkedComponent: {fileID: 0} - m_enableKerning: 1 - m_enableExtraPadding: 0 - checkPaddingRequired: 0 - m_isRichText: 1 - m_parseCtrlCharacters: 1 - m_isOrthographic: 1 - m_isCullingEnabled: 0 - m_horizontalMapping: 0 - m_verticalMapping: 0 - m_uvLineOffset: 0 - m_geometrySortingOrder: 0 - m_IsTextObjectScaleStatic: 0 - m_VertexBufferAutoSizeReduction: 1 - m_useMaxVisibleDescender: 1 - m_pageToDisplay: 1 - m_margin: {x: 0, y: 0, z: 0, w: 0} - m_isUsingLegacyAnimationComponent: 0 - m_isVolumetricText: 0 - m_hasFontAssetChanged: 0 - m_baseMaterial: {fileID: 0} - m_maskOffset: {x: 0, y: 0, z: 0, w: 0} ---- !u!114 &5402558011166370893 + m_AnchorMin: {x: 0.5, y: 0} + m_AnchorMax: {x: 0.5, y: 0} + m_AnchoredPosition: {x: 0, y: 40} + m_SizeDelta: {x: 300, y: 40} + m_Pivot: {x: 0.5, y: 0} +--- !u!114 &5889646863311440989 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 328851281575151252} + m_GameObject: {fileID: 3762395240228533553} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} m_Name: m_EditorClassIdentifier: - reference: Highest rated - text: {fileID: 7362090288503381250} - translatedLanguageFontPairingOverrides: {fileID: 0} ---- !u!1 &433141317274427940 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 4 + m_Spacing: 5 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 0 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!1 &5346609901548097612 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -599,156 +397,181 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1230197134381729914} + - component: {fileID: 5346609901548097613} + - component: {fileID: 5346609901548097611} + - component: {fileID: 5346609901548097610} + - component: {fileID: 5346609901548097609} + - component: {fileID: 8065266053913587260} m_Layer: 5 - m_Name: ModRow_Highest Rated + m_Name: Center m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &1230197134381729914 +--- !u!224 &5346609901548097613 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 433141317274427940} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_GameObject: {fileID: 5346609901548097612} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: - - {fileID: 7762568280606121095} - - {fileID: 9144147956179003390} - - {fileID: 2482191731014220696} - m_Father: {fileID: 5760055838395833916} + - {fileID: 2960945230357676416} + m_Father: {fileID: 5760055838897582319} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 1920, y: 359} + m_SizeDelta: {x: 960, y: 540} m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &8153928342839849703 +--- !u!114 &5346609901548097611 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 475094077524649575} + m_GameObject: {fileID: 5346609901548097612} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: edb10346a1dac1d41a69f1b9c914fbfd, type: 3} + m_Script: {fileID: 11500000, guid: bbcd964da59403d42930ac6a72f8f2c5, type: 3} m_Name: m_EditorClassIdentifier: - color: 8 - colorScheme: {fileID: 0} - image: {fileID: 8993986987715273322} ---- !u!1 &570410157883730847 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4910128418665223718} - - component: {fileID: 3518402878263451624} - - component: {fileID: 7391298777306148601} - - component: {fileID: 3031840003657360422} - m_Layer: 5 - m_Name: Error Icon - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &4910128418665223718 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 570410157883730847} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 5994240068803344250} - m_Father: {fileID: 6914708581523774563} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0} - m_AnchorMax: {x: 0.5, y: 0} - m_AnchoredPosition: {x: 0, y: 168} - m_SizeDelta: {x: 64, y: 64} - m_Pivot: {x: 0.5, y: 0} ---- !u!222 &3518402878263451624 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 570410157883730847} - m_CullTransparentMesh: 0 ---- !u!114 &7391298777306148601 +--- !u!114 &5346609901548097610 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 570410157883730847} + m_GameObject: {fileID: 5346609901548097612} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Script: {fileID: 11500000, guid: d5ce6686d7065cf4986b2ed3e2773c96, type: 3} m_Name: m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.85882354, g: 0.3254902, b: 0.33333334, a: 1} - m_RaycastTarget: 1 - m_Maskable: 1 - m_OnCullStateChanged: + m_Navigation: + m_Mode: 4 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 0} + m_HighlightedColor: {r: 1, g: 1, b: 1, a: 1} + m_PressedColor: {r: 1, g: 1, b: 1, a: 1} + m_SelectedColor: {r: 1, g: 1, b: 1, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 2960945230357676417} + m_OnClick: m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 21300000, guid: 91a797609e9a1bf4eafc93d15a99087f, type: 3} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &3031840003657360422 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 570410157883730847} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} + m_Calls: + - m_Target: {fileID: 2481775387260960443} + m_TargetAssemblyTypeName: + m_MethodName: SelectFeaturedMod + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + scheme: {fileID: 0} + extraTargets: + - target: {fileID: 2960945230090701357} + transition: 4 + colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + colorSchemeBlock: + Normal: 6 + NormalColorAlpha: 1 + Highlighted: 4 + HighlightedColorAlpha: 1 + Pressed: 4 + PressedColorAlpha: 1 + Disabled: 2 + DisabledColorAlpha: 1 + ColorMultiplier: 1 + FadeDuration: 0.1 + spriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + animationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + animator: {fileID: 0} + enableOnNormal: 0 + enableOnHighlight: 1 + enableOnPressed: 1 + enableOnDisabled: 0 + isControllerButtonIcon: 0 + childButtons: + - {fileID: 6758813166262263795} + - {fileID: 3109181258600622993} +--- !u!114 &5346609901548097609 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5346609901548097612} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 78a172db96e209b41a0f30a5676688e3, type: 3} m_Name: m_EditorClassIdentifier: - type: 9 ---- !u!114 &7905302555261404140 + PercentPaddingHorizontal: 0.05 + PercentPaddingVertical: 0.25 + adjustHorizontally: 0 + adjustVertically: 1 + Viewport: {fileID: 5760055837242226404} + DefaultViewportContainer: {fileID: 5760055838395833916} + HorizontalViewportContainer: {fileID: 0} +--- !u!114 &8065266053913587260 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 590683819935674035} + m_GameObject: {fileID: 5346609901548097612} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} + m_Script: {fileID: 11500000, guid: 9e842de213b82ba4d90c8520c94f83b1, type: 3} m_Name: m_EditorClassIdentifier: - reference: Retry all failed fetches - text: {fileID: 177976614780747353} - translatedLanguageFontPairingOverrides: {fileID: 0} ---- !u!1 &710315220892219158 +--- !u!1 &5760055837231720817 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -756,173 +579,43 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2593279480392021872} - - component: {fileID: 736315037153826895} - - component: {fileID: 430313450865213837} - - component: {fileID: 5640388669300148227} - - component: {fileID: 2023597310369919779} + - component: {fileID: 5760055837231720816} + - component: {fileID: 5760055837231720831} m_Layer: 5 - m_Name: Page Right + m_Name: RightMost m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &2593279480392021872 +--- !u!224 &5760055837231720816 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 710315220892219158} + m_GameObject: {fileID: 5760055837231720817} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 5496364542001861773} - m_Father: {fileID: 9205084670609649368} - m_RootOrder: 2 + m_Children: [] + m_Father: {fileID: 5760055838897582319} + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 1, y: 0.5} - m_AnchorMax: {x: 1, y: 0.5} - m_AnchoredPosition: {x: -40, y: 0} - m_SizeDelta: {x: 48, y: 48} - m_Pivot: {x: 1, y: 0.5} ---- !u!222 &736315037153826895 + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 1920, y: 0} + m_SizeDelta: {x: 906, y: 510} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5760055837231720831 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 710315220892219158} + m_GameObject: {fileID: 5760055837231720817} m_CullTransparentMesh: 0 ---- !u!114 &430313450865213837 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 710315220892219158} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 21300000, guid: de620a661822071448a42c3581ca6cdf, type: 3} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &5640388669300148227 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 710315220892219158} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 0 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Highlighted - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 430313450865213837} - m_OnClick: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 961077494286650393} - m_MethodName: SwipeRow - m_Mode: 6 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 1 - m_CallState: 2 ---- !u!114 &2023597310369919779 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 710315220892219158} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d0b148fe25e99eb48b9724523833bab1, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Delegates: - - eventID: 0 - callback: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 0} - m_MethodName: PlayHover - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 - - eventID: 4 - callback: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 0} - m_MethodName: PlayClick - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 ---- !u!1 &749959132770554003 +--- !u!1 &5760055837242226405 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -930,28 +623,28 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 6243932859373928863} + - component: {fileID: 5760055837242226404} + - component: {fileID: 2481775387260960443} m_Layer: 5 - m_Name: Highlights + m_Name: Home m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 0 ---- !u!224 &6243932859373928863 + m_IsActive: 1 +--- !u!224 &5760055837242226404 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 749959132770554003} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_GameObject: {fileID: 5760055837242226405} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: - - {fileID: 6062373609210075511} - - {fileID: 8250385431297364735} - m_Father: {fileID: 6475130985988419546} + - {fileID: 5760055838456421178} + m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} @@ -959,206 +652,89 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &7507750654048744374 +--- !u!114 &2481775387260960443 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1053227178624738031} + m_GameObject: {fileID: 5760055837242226405} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: edb10346a1dac1d41a69f1b9c914fbfd, type: 3} + m_Script: {fileID: 11500000, guid: f9a181712313aa74597d2fd0cad977f4, type: 3} m_Name: m_EditorClassIdentifier: - color: 8 - colorScheme: {fileID: 0} - image: {fileID: 8420324484116408034} ---- !u!1 &1253370059702483237 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4293101959910755915} - - component: {fileID: 7624126277662304001} - - component: {fileID: 2251121041795955683} - - component: {fileID: 2710601352341768161} - - component: {fileID: 8351224907352983450} - m_Layer: 5 - m_Name: RowSelectable - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &4293101959910755915 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1253370059702483237} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 3494463204094689655} - m_Father: {fileID: 7224393530279423441} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &7624126277662304001 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1253370059702483237} - m_CullTransparentMesh: 0 ---- !u!114 &2251121041795955683 -MonoBehaviour: + BrowserPanel: {fileID: 5760055837242226405} + BrowserPanelContent: {fileID: 5760055838395833916} + BrowserPanelHeaderBackground: {fileID: 0} + BrowserPanelContentScrollBar: {fileID: 5760055838370208910} + featuredSlotListItems: + - {fileID: 1712571296581473621} + - {fileID: 1712571297289990801} + - {fileID: 3789781511054597007} + - {fileID: 8159661877114048582} + - {fileID: 1712571296287095243} + featuredSlotPositions: + - {fileID: 5760055837362136015} + - {fileID: 5760055839057535352} + - {fileID: 5346609901548097613} + - {fileID: 5760055837879226655} + - {fileID: 5760055837231720816} + featuredSelectedSubscribeButtonText: {fileID: 5691231456873797393} + featuredSelectedMoreOptionsButtonPosition: {fileID: 6661404417012533100} + browserFeaturedSlotSelectionHighlightBorder: {fileID: 2960945230357676419} + browserFeaturedSlotInfo: {fileID: 5760055837487575705} + browserFeaturedSlotBackplate: {fileID: 5760055838203041011} + featuredOptionsButtons: {fileID: 5760055837487575705} + scrollRect: {fileID: 5760055838456421158} + modListRowPrefab: {fileID: 8769127253978432476, guid: cdcba5d84bf1ed84cbe0880932001409, + type: 3} + browserFeaturedSlotSelection: {fileID: 5346609901548097610} +--- !u!1 &5760055837362136000 +GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1253370059702483237} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 7c24c539ef8622a49a05be42a385d095, type: 3} - m_Name: - m_EditorClassIdentifier: - ErrorPanel: {fileID: 7046131684741935659} - LoadingPanel: {fileID: 9007992486970540322} - RowPanel: {fileID: 4244282727769094987} - MainSelectableHighlights: {fileID: 5494528124479065311} - ModListItemPrefab: {fileID: 3616021901904687619, guid: 6dab28ac97efe3645a00cfa31697b3e0, - type: 3} - ModListItemContainer: {fileID: 6745736109228068663} - AboveSelection: {fileID: 6820534038293358429} - BelowSelection: {fileID: 0} ---- !u!114 &2710601352341768161 -MonoBehaviour: + serializedVersion: 6 + m_Component: + - component: {fileID: 5760055837362136015} + - component: {fileID: 5760055837362136014} + m_Layer: 5 + m_Name: LeftMost + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5760055837362136015 +RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1253370059702483237} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d5ce6686d7065cf4986b2ed3e2773c96, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 4 - m_SelectOnUp: {fileID: 6820534038293358429} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 0} - m_HighlightedColor: {r: 1, g: 1, b: 1, a: 1} - m_PressedColor: {r: 1, g: 1, b: 1, a: 1} - m_SelectedColor: {r: 1, g: 1, b: 1, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Highlighted - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 7538567955992291370} - m_OnClick: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 2251121041795955683} - m_MethodName: RetryGetMods - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 - scheme: {fileID: 0} - extraTargets: - - target: {fileID: 293988133779090127} - transition: 1 - colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 0} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 1, g: 1, b: 1, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - colorSchemeBlock: - Normal: 6 - NormalColorAlpha: 1 - Highlighted: 4 - HighlightedColorAlpha: 1 - Pressed: 4 - PressedColorAlpha: 1 - Disabled: 2 - DisabledColorAlpha: 1 - ColorMultiplier: 1 - FadeDuration: 0.1 - spriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - animationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Highlighted - m_DisabledTrigger: Disabled - animator: {fileID: 0} - enableOnNormal: 0 - enableOnHighlight: 1 - enableOnPressed: 1 - enableOnDisabled: 0 - isControllerButtonIcon: 0 - childButtons: - - {fileID: 5862014079134537912} ---- !u!114 &8351224907352983450 -MonoBehaviour: + m_GameObject: {fileID: 5760055837362136000} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 5760055838897582319} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -1920, y: 0} + m_SizeDelta: {x: 906, y: 510} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5760055837362136014 +CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1253370059702483237} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 78a172db96e209b41a0f30a5676688e3, type: 3} - m_Name: - m_EditorClassIdentifier: - PercentPaddingHorizontal: 0.05 - PercentPaddingVertical: 0.25 - adjustHorizontally: 0 - adjustVertically: 1 - Viewport: {fileID: 5760055837242226404} - DefaultViewportContainer: {fileID: 5760055838395833916} - HorizontalViewportContainer: {fileID: 0} ---- !u!1 &1338792742464149430 + m_GameObject: {fileID: 5760055837362136000} + m_CullTransparentMesh: 0 +--- !u!1 &5760055837487575705 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1166,88 +742,78 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 6501039402507660445} - - component: {fileID: 8529746175187210518} - - component: {fileID: 8301768853015568590} - - component: {fileID: 5743065407633856886} + - component: {fileID: 5760055837487575704} + - component: {fileID: 5760055837487575687} + - component: {fileID: 4849105315695901175} m_Layer: 5 - m_Name: LoadingPanel + m_Name: Buttons m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 0 ---- !u!224 &6501039402507660445 + m_IsActive: 1 +--- !u!224 &5760055837487575704 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1338792742464149430} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_GameObject: {fileID: 5760055837487575705} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: - - {fileID: 6325928916897540842} - m_Father: {fileID: 7998808985149902515} - m_RootOrder: 1 + - {fileID: 4056221102521404262} + - {fileID: 6661404417012533100} + m_Father: {fileID: 5760055837527483279} + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} + m_AnchorMin: {x: 1, y: 0} m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &8529746175187210518 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1338792742464149430} - m_CullTransparentMesh: 0 ---- !u!114 &8301768853015568590 + m_AnchoredPosition: {x: -484, y: -279.17957} + m_SizeDelta: {x: 0, y: -613.2051} + m_Pivot: {x: 1, y: 0.5} +--- !u!114 &5760055837487575687 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1338792742464149430} + m_GameObject: {fileID: 5760055837487575705} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} m_Name: m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.05490196, g: 0.0627451, b: 0.105882354, a: 1} - m_RaycastTarget: 0 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 21300000, guid: c05eab6045e68c1449e9a85be63f1495, type: 3} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &5743065407633856886 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 4 + m_Spacing: 20 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 0 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!114 &4849105315695901175 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1338792742464149430} + m_GameObject: {fileID: 5760055837487575705} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} m_Name: m_EditorClassIdentifier: - type: 2 ---- !u!1 &1352001165938647406 + m_HorizontalFit: 2 + m_VerticalFit: 0 +--- !u!1 &5760055837527483264 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1255,149 +821,54 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 7670801858938926441} - - component: {fileID: 7450220595241283651} - - component: {fileID: 81118185051261447} - - component: {fileID: 7157316438578106450} + - component: {fileID: 5760055837527483279} + - component: {fileID: 5760055837527483278} m_Layer: 5 - m_Name: Most popular > + m_Name: Featured Rect m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &7670801858938926441 +--- !u!224 &5760055837527483279 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1352001165938647406} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_GameObject: {fileID: 5760055837527483264} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 6677660644696604223} - m_RootOrder: 0 + m_Children: + - {fileID: 5760055838203041013} + - {fileID: 5760055838067006261} + - {fileID: 5760055838803739576} + - {fileID: 5760055837684760253} + - {fileID: 5760055837487575704} + m_Father: {fileID: 5760055839024060862} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 64, y: 0} - m_SizeDelta: {x: 283, y: 40} - m_Pivot: {x: 0, y: 1} ---- !u!222 &7450220595241283651 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1352001165938647406} - m_CullTransparentMesh: 0 ---- !u!114 &81118185051261447 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1352001165938647406} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 0 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_text: Most popular - m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 07eb140c74981ed4aab6d34ebb2e5737, type: 2} - m_sharedMaterial: {fileID: 21301536800525264, guid: 07eb140c74981ed4aab6d34ebb2e5737, - type: 2} - m_fontSharedMaterials: [] - m_fontMaterial: {fileID: 0} - m_fontMaterials: [] - m_fontColor32: - serializedVersion: 2 - rgba: 4294967295 - m_fontColor: {r: 1, g: 1, b: 1, a: 1} - m_enableVertexGradient: 0 - m_colorMode: 3 - m_fontColorGradient: - topLeft: {r: 1, g: 1, b: 1, a: 1} - topRight: {r: 1, g: 1, b: 1, a: 1} - bottomLeft: {r: 1, g: 1, b: 1, a: 1} - bottomRight: {r: 1, g: 1, b: 1, a: 1} - m_fontColorGradientPreset: {fileID: 0} - m_spriteAsset: {fileID: 0} - m_tintAllSprites: 0 - m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: -1183493901 - m_overrideHtmlColors: 0 - m_faceColor: - serializedVersion: 2 - rgba: 4294967295 - m_fontSize: 28 - m_fontSizeBase: 28 - m_fontWeight: 400 - m_enableAutoSizing: 0 - m_fontSizeMin: 18 - m_fontSizeMax: 72 - m_fontStyle: 0 - m_HorizontalAlignment: 1 - m_VerticalAlignment: 256 - m_textAlignment: 65535 - m_characterSpacing: 0 - m_wordSpacing: 0 - m_lineSpacing: 0 - m_lineSpacingMax: 0 - m_paragraphSpacing: 0 - m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 - m_wordWrappingRatios: 0.4 - m_overflowMode: 0 - m_linkedTextComponent: {fileID: 0} - parentLinkedComponent: {fileID: 0} - m_enableKerning: 1 - m_enableExtraPadding: 0 - checkPaddingRequired: 0 - m_isRichText: 1 - m_parseCtrlCharacters: 1 - m_isOrthographic: 1 - m_isCullingEnabled: 0 - m_horizontalMapping: 0 - m_verticalMapping: 0 - m_uvLineOffset: 0 - m_geometrySortingOrder: 0 - m_IsTextObjectScaleStatic: 0 - m_VertexBufferAutoSizeReduction: 1 - m_useMaxVisibleDescender: 1 - m_pageToDisplay: 1 - m_margin: {x: 0, y: 0, z: 0, w: 0} - m_isUsingLegacyAnimationComponent: 0 - m_isVolumetricText: 0 - m_hasFontAssetChanged: 0 - m_baseMaterial: {fileID: 0} - m_maskOffset: {x: 0, y: 0, z: 0, w: 0} ---- !u!114 &7157316438578106450 + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &5760055837527483278 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1352001165938647406} + m_GameObject: {fileID: 5760055837527483264} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} + m_Script: {fileID: 11500000, guid: 3312d7739989d2b4e91e6319e9a96d76, type: 3} m_Name: m_EditorClassIdentifier: - reference: Most popular - text: {fileID: 81118185051261447} - translatedLanguageFontPairingOverrides: {fileID: 0} ---- !u!1 &1378544536202932751 + m_Padding: {x: 0, y: 0, z: 0, w: 0} + m_Softness: {x: 0, y: 0} +--- !u!1 &5760055837684760254 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1405,65 +876,68 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 4704575437679125224} - - component: {fileID: 2105476164157540784} - - component: {fileID: 2996112663747418391} - - component: {fileID: 7934289743452109689} + - component: {fileID: 5760055837684760253} + - component: {fileID: 5760055837684760250} + - component: {fileID: 5760055837684760251} + - component: {fileID: 5760055837684760252} + - component: {fileID: 3904946412240464002} m_Layer: 5 - m_Name: arrow + m_Name: Page Right m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &4704575437679125224 +--- !u!224 &5760055837684760253 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1378544536202932751} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_GameObject: {fileID: 5760055837684760254} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 8328906162336430733} - m_RootOrder: 0 + m_Children: + - {fileID: 2960945229545667046} + m_Father: {fileID: 5760055837527483279} + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 10, y: 18} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &2105476164157540784 + m_AnchoredPosition: {x: 920, y: 0} + m_SizeDelta: {x: 40, y: 40} + m_Pivot: {x: 1, y: 0.5} +--- !u!222 &5760055837684760250 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1378544536202932751} + m_GameObject: {fileID: 5760055837684760254} m_CullTransparentMesh: 0 ---- !u!114 &2996112663747418391 +--- !u!114 &5760055837684760251 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1378544536202932751} + m_GameObject: {fileID: 5760055837684760254} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 0.05490196, g: 0.0627451, b: 0.105882354, a: 1} + m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 21300000, guid: 3b4f799ae62d42041ac993e0b2ef8ff5, type: 3} - m_Type: 0 + m_Sprite: {fileID: 21300000, guid: de620a661822071448a42c3581ca6cdf, type: 3} + m_Type: 1 m_PreserveAspect: 0 m_FillCenter: 1 m_FillMethod: 4 @@ -1472,20 +946,108 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 ---- !u!114 &7934289743452109689 +--- !u!114 &5760055837684760252 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1378544536202932751} + m_GameObject: {fileID: 5760055837684760254} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} m_Name: m_EditorClassIdentifier: - type: 2 ---- !u!1 &1395601845996872946 + m_Navigation: + m_Mode: 0 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 5760055837684760251} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 2481775387260960443} + m_TargetAssemblyTypeName: + m_MethodName: PageFeaturedRow + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 1 + m_CallState: 2 +--- !u!114 &3904946412240464002 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5760055837684760254} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0b148fe25e99eb48b9724523833bab1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Delegates: + - eventID: 0 + callback: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 0} + m_TargetAssemblyTypeName: + m_MethodName: PlayHover + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - eventID: 4 + callback: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 0} + m_TargetAssemblyTypeName: + m_MethodName: PlayClick + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!1 &5760055837879226640 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1493,92 +1055,70 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 6475130985988419546} - - component: {fileID: 1215102269778846966} - - component: {fileID: 2522303128527752034} - - component: {fileID: 6820534038293358429} - - component: {fileID: 6704893640079599418} + - component: {fileID: 5760055837879226655} + - component: {fileID: 5760055837879226653} + - component: {fileID: 5760055837879226652} + - component: {fileID: 5760055837879226654} m_Layer: 5 - m_Name: RowSelectable + m_Name: Right m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &6475130985988419546 +--- !u!224 &5760055837879226655 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1395601845996872946} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_GameObject: {fileID: 5760055837879226640} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 6243932859373928863} - m_Father: {fileID: 7775025196942318881} - m_RootOrder: 2 + m_Children: [] + m_Father: {fileID: 5760055838897582319} + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 980, y: 0} + m_SizeDelta: {x: 906, y: 510} m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &1215102269778846966 +--- !u!222 &5760055837879226653 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1395601845996872946} + m_GameObject: {fileID: 5760055837879226640} m_CullTransparentMesh: 0 ---- !u!114 &2522303128527752034 +--- !u!114 &5760055837879226652 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1395601845996872946} + m_GameObject: {fileID: 5760055837879226640} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 7c24c539ef8622a49a05be42a385d095, type: 3} - m_Name: - m_EditorClassIdentifier: - ErrorPanel: {fileID: 8917182276175077081} - LoadingPanel: {fileID: 1546993955868494829} - RowPanel: {fileID: 4043486660149500513} - MainSelectableHighlights: {fileID: 749959132770554003} - ModListItemPrefab: {fileID: 3616021901904687619, guid: 6dab28ac97efe3645a00cfa31697b3e0, - type: 3} - ModListItemContainer: {fileID: 2808773147583204528} - AboveSelection: {fileID: 126850650622171940} - BelowSelection: {fileID: 2710601352341768161} ---- !u!114 &6820534038293358429 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1395601845996872946} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d5ce6686d7065cf4986b2ed3e2773c96, type: 3} + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} m_Name: m_EditorClassIdentifier: m_Navigation: - m_Mode: 4 - m_SelectOnUp: {fileID: 126850650622171940} - m_SelectOnDown: {fileID: 2710601352341768161} + m_Mode: 0 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} m_SelectOnLeft: {fileID: 0} m_SelectOnRight: {fileID: 0} - m_Transition: 1 + m_Transition: 0 m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 0} - m_HighlightedColor: {r: 1, g: 1, b: 1, a: 1} - m_PressedColor: {r: 1, g: 1, b: 1, a: 1} - m_SelectedColor: {r: 1, g: 1, b: 1, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0} + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} m_ColorMultiplier: 1 m_FadeDuration: 0.1 m_SpriteState: @@ -1593,187 +1133,44 @@ MonoBehaviour: m_SelectedTrigger: Highlighted m_DisabledTrigger: Disabled m_Interactable: 1 - m_TargetGraphic: {fileID: 1130147604350774106} + m_TargetGraphic: {fileID: 5760055837879226654} m_OnClick: m_PersistentCalls: m_Calls: - - m_Target: {fileID: 2522303128527752034} - m_MethodName: RetryGetMods - m_Mode: 1 + - m_Target: {fileID: 2481775387260960443} + m_TargetAssemblyTypeName: + m_MethodName: PageFeaturedRow + m_Mode: 6 m_Arguments: m_ObjectArgument: {fileID: 0} m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine m_IntArgument: 0 m_FloatArgument: 0 m_StringArgument: - m_BoolArgument: 0 + m_BoolArgument: 1 m_CallState: 2 - scheme: {fileID: 0} - extraTargets: - - target: {fileID: 5696556794969845046} - transition: 1 - colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 0} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 1, g: 1, b: 1, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - colorSchemeBlock: - Normal: 6 - NormalColorAlpha: 1 - Highlighted: 4 - HighlightedColorAlpha: 1 - Pressed: 4 - PressedColorAlpha: 1 - Disabled: 2 - DisabledColorAlpha: 1 - ColorMultiplier: 1 - FadeDuration: 0.1 - spriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - animationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Highlighted - m_DisabledTrigger: Disabled - animator: {fileID: 0} - enableOnNormal: 0 - enableOnHighlight: 1 - enableOnPressed: 1 - enableOnDisabled: 0 - isControllerButtonIcon: 0 - childButtons: - - {fileID: 327911496839598646} ---- !u!114 &6704893640079599418 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1395601845996872946} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 78a172db96e209b41a0f30a5676688e3, type: 3} - m_Name: - m_EditorClassIdentifier: - PercentPaddingHorizontal: 0.05 - PercentPaddingVertical: 0.25 - adjustHorizontally: 0 - adjustVertically: 1 - Viewport: {fileID: 5760055837242226404} - DefaultViewportContainer: {fileID: 5760055838395833916} - HorizontalViewportContainer: {fileID: 0} ---- !u!1 &1403451539240919143 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5641179401900381504} - m_Layer: 5 - m_Name: ModRow_Recently added - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &5641179401900381504 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1403451539240919143} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 2803346249607928766} - - {fileID: 4806150429029691436} - - {fileID: 7224393530279423441} - m_Father: {fileID: 5760055838395833916} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 1920, y: 359} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!1 &1457986463006630498 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8250385431297364735} - - component: {fileID: 5871104163087347366} - - component: {fileID: 1130147604350774106} - - component: {fileID: 7046769251477191413} - m_Layer: 5 - m_Name: Outline - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &8250385431297364735 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1457986463006630498} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 6243932859373928863} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &5871104163087347366 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1457986463006630498} - m_CullTransparentMesh: 0 ---- !u!114 &1130147604350774106 +--- !u!114 &5760055837879226654 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1457986463006630498} + m_GameObject: {fileID: 5760055837879226640} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 0.02745098, g: 0.75686276, b: 0.84705883, a: 1} - m_RaycastTarget: 0 + m_Color: {r: 1, g: 1, b: 1, a: 0} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 21300000, guid: f60c6439d2c5aef4680dc039853db562, type: 3} - m_Type: 1 + m_Sprite: {fileID: 0} + m_Type: 0 m_PreserveAspect: 0 m_FillCenter: 1 m_FillMethod: 4 @@ -1782,20 +1179,7 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 ---- !u!114 &7046769251477191413 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1457986463006630498} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} - m_Name: - m_EditorClassIdentifier: - type: 4 ---- !u!1 &1476840108085325060 +--- !u!1 &5760055837943744820 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1803,128 +1187,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2808773147583204528} - - component: {fileID: 8205911975242926779} - - component: {fileID: 4694757854193222468} + - component: {fileID: 5760055837943744819} + - component: {fileID: 5760055837943744817} + - component: {fileID: 5760055837943744818} + - component: {fileID: 388787987728770390} m_Layer: 5 - m_Name: Content + m_Name: Featured mods > m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &2808773147583204528 +--- !u!224 &5760055837943744819 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1476840108085325060} + m_GameObject: {fileID: 5760055837943744820} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] - m_Father: {fileID: 8641512021059779286} + m_Father: {fileID: 5760055839024060862} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 0.000061035156, y: 0.00015258789} - m_SizeDelta: {x: 0, y: 300} + m_AnchoredPosition: {x: 80, y: 0} + m_SizeDelta: {x: 283, y: 40} m_Pivot: {x: 0, y: 1} ---- !u!114 &8205911975242926779 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1476840108085325060} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Padding: - m_Left: 64 - m_Right: 64 - m_Top: 0 - m_Bottom: 0 - m_ChildAlignment: 0 - m_Spacing: 28 - m_ChildForceExpandWidth: 1 - m_ChildForceExpandHeight: 1 - m_ChildControlWidth: 0 - m_ChildControlHeight: 0 - m_ChildScaleWidth: 0 - m_ChildScaleHeight: 0 ---- !u!114 &4694757854193222468 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1476840108085325060} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} - m_Name: - m_EditorClassIdentifier: - m_HorizontalFit: 2 - m_VerticalFit: 0 ---- !u!1 &1480151805485348262 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7768067448636396821} - - component: {fileID: 320065405885883359} - - component: {fileID: 3983408340932677055} - - component: {fileID: 4564631768484734975} - - component: {fileID: 7403937337542730013} - m_Layer: 5 - m_Name: Failed to fetch - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &7768067448636396821 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1480151805485348262} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 6914708581523774563} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0} - m_AnchorMax: {x: 0.5, y: 0} - m_AnchoredPosition: {x: 0, y: 132} - m_SizeDelta: {x: 194.59, y: 25.370003} - m_Pivot: {x: 0.5, y: 0} ---- !u!222 &320065405885883359 +--- !u!222 &5760055837943744817 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1480151805485348262} + m_GameObject: {fileID: 5760055837943744820} m_CullTransparentMesh: 0 ---- !u!114 &3983408340932677055 +--- !u!114 &5760055837943744818 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1480151805485348262} + m_GameObject: {fileID: 5760055837943744820} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} @@ -1933,11 +1240,12 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_text: Failed to fetch mods + m_text: Featured mods m_isRightToLeft: 0 m_fontAsset: {fileID: 11400000, guid: 07eb140c74981ed4aab6d34ebb2e5737, type: 2} m_sharedMaterial: {fileID: 21301536800525264, guid: 07eb140c74981ed4aab6d34ebb2e5737, @@ -1960,13 +1268,13 @@ MonoBehaviour: m_spriteAsset: {fileID: 0} m_tintAllSprites: 0 m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: 0 + m_TextStyleHashCode: -1183493901 m_overrideHtmlColors: 0 m_faceColor: serializedVersion: 2 rgba: 4294967295 - m_fontSize: 20 - m_fontSizeBase: 20 + m_fontSize: 28 + m_fontSizeBase: 28 m_fontWeight: 400 m_enableAutoSizing: 0 m_fontSizeMin: 18 @@ -1974,7 +1282,7 @@ MonoBehaviour: m_fontStyle: 0 m_HorizontalAlignment: 1 m_VerticalAlignment: 256 - m_textAlignment: 514 + m_textAlignment: 65535 m_characterSpacing: 0 m_wordSpacing: 0 m_lineSpacing: 0 @@ -2007,36 +1315,22 @@ MonoBehaviour: m_hasFontAssetChanged: 0 m_baseMaterial: {fileID: 0} m_maskOffset: {x: 0, y: 0, z: 0, w: 0} ---- !u!114 &4564631768484734975 +--- !u!114 &388787987728770390 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1480151805485348262} + m_GameObject: {fileID: 5760055837943744820} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} m_Name: m_EditorClassIdentifier: - m_HorizontalFit: 2 - m_VerticalFit: 2 ---- !u!114 &7403937337542730013 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1480151805485348262} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} - m_Name: - m_EditorClassIdentifier: - reference: Failed to fetch mods - text: {fileID: 3983408340932677055} + reference: Featured mods + text: {fileID: 5760055837943744818} translatedLanguageFontPairingOverrides: {fileID: 0} ---- !u!1 &1546993955868494829 +--- !u!1 &5760055838030722349 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2044,65 +1338,65 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1752478102183024605} - - component: {fileID: 1669654633145126617} - - component: {fileID: 2697921956662065229} - - component: {fileID: 4356839344878913509} + - component: {fileID: 5760055838030722348} + - component: {fileID: 5760055838030722345} + - component: {fileID: 5760055838030722346} + - component: {fileID: 5760055838030722347} m_Layer: 5 - m_Name: LoadingPanel + m_Name: Handle m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 0 ---- !u!224 &1752478102183024605 + m_IsActive: 1 +--- !u!224 &5760055838030722348 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1546993955868494829} + m_GameObject: {fileID: 5760055838030722349} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 3320766725855603506} - m_Father: {fileID: 7775025196942318881} - m_RootOrder: 1 + m_Children: [] + m_Father: {fileID: 5760055838385861465} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} + m_AnchorMax: {x: 0, y: 0} m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &1669654633145126617 +--- !u!222 &5760055838030722345 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1546993955868494829} + m_GameObject: {fileID: 5760055838030722349} m_CullTransparentMesh: 0 ---- !u!114 &2697921956662065229 +--- !u!114 &5760055838030722346 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1546993955868494829} + m_GameObject: {fileID: 5760055838030722349} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 0.05490196, g: 0.0627451, b: 0.105882354, a: 1} + m_Color: {r: 0.75686276, g: 0.76862746, b: 0.84313726, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 21300000, guid: c05eab6045e68c1449e9a85be63f1495, type: 3} + m_Sprite: {fileID: 21300000, guid: 2893e30b6b8e1d4499b8e78fc633923e, type: 3} m_Type: 1 m_PreserveAspect: 0 m_FillCenter: 1 @@ -2112,20 +1406,20 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 ---- !u!114 &4356839344878913509 +--- !u!114 &5760055838030722347 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1546993955868494829} + m_GameObject: {fileID: 5760055838030722349} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} m_Name: m_EditorClassIdentifier: - type: 2 ---- !u!1 &1780266890080839772 + type: 5 +--- !u!1 &5760055838067006262 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2133,149 +1427,40 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2803346249607928766} - - component: {fileID: 6271295819906952991} - - component: {fileID: 1196215932083384563} - - component: {fileID: 7725831019261875553} + - component: {fileID: 5760055838067006261} m_Layer: 5 - m_Name: Recently added > + m_Name: Featured List Items m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &2803346249607928766 +--- !u!224 &5760055838067006261 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1780266890080839772} + m_GameObject: {fileID: 5760055838067006262} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 5641179401900381504} - m_RootOrder: 0 + m_Children: + - {fileID: 2401922753284782821} + - {fileID: 2401922753114184993} + - {fileID: 146680028341728319} + - {fileID: 5165047952197910518} + - {fileID: 2401922754124945019} + - {fileID: 5760055838897582319} + m_Father: {fileID: 5760055837527483279} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 64, y: 0} - m_SizeDelta: {x: 283, y: 40} - m_Pivot: {x: 0, y: 1} ---- !u!222 &6271295819906952991 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1780266890080839772} - m_CullTransparentMesh: 0 ---- !u!114 &1196215932083384563 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1780266890080839772} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 0 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_text: Recently added - m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 07eb140c74981ed4aab6d34ebb2e5737, type: 2} - m_sharedMaterial: {fileID: 21301536800525264, guid: 07eb140c74981ed4aab6d34ebb2e5737, - type: 2} - m_fontSharedMaterials: [] - m_fontMaterial: {fileID: 0} - m_fontMaterials: [] - m_fontColor32: - serializedVersion: 2 - rgba: 4294967295 - m_fontColor: {r: 1, g: 1, b: 1, a: 1} - m_enableVertexGradient: 0 - m_colorMode: 3 - m_fontColorGradient: - topLeft: {r: 1, g: 1, b: 1, a: 1} - topRight: {r: 1, g: 1, b: 1, a: 1} - bottomLeft: {r: 1, g: 1, b: 1, a: 1} - bottomRight: {r: 1, g: 1, b: 1, a: 1} - m_fontColorGradientPreset: {fileID: 0} - m_spriteAsset: {fileID: 0} - m_tintAllSprites: 0 - m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: -1183493901 - m_overrideHtmlColors: 0 - m_faceColor: - serializedVersion: 2 - rgba: 4294967295 - m_fontSize: 28 - m_fontSizeBase: 28 - m_fontWeight: 400 - m_enableAutoSizing: 0 - m_fontSizeMin: 18 - m_fontSizeMax: 72 - m_fontStyle: 0 - m_HorizontalAlignment: 1 - m_VerticalAlignment: 256 - m_textAlignment: 65535 - m_characterSpacing: 0 - m_wordSpacing: 0 - m_lineSpacing: 0 - m_lineSpacingMax: 0 - m_paragraphSpacing: 0 - m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 - m_wordWrappingRatios: 0.4 - m_overflowMode: 0 - m_linkedTextComponent: {fileID: 0} - parentLinkedComponent: {fileID: 0} - m_enableKerning: 1 - m_enableExtraPadding: 0 - checkPaddingRequired: 0 - m_isRichText: 1 - m_parseCtrlCharacters: 1 - m_isOrthographic: 1 - m_isCullingEnabled: 0 - m_horizontalMapping: 0 - m_verticalMapping: 0 - m_uvLineOffset: 0 - m_geometrySortingOrder: 0 - m_IsTextObjectScaleStatic: 0 - m_VertexBufferAutoSizeReduction: 1 - m_useMaxVisibleDescender: 1 - m_pageToDisplay: 1 - m_margin: {x: 0, y: 0, z: 0, w: 0} - m_isUsingLegacyAnimationComponent: 0 - m_isVolumetricText: 0 - m_hasFontAssetChanged: 0 - m_baseMaterial: {fileID: 0} - m_maskOffset: {x: 0, y: 0, z: 0, w: 0} ---- !u!114 &7725831019261875553 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1780266890080839772} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} - m_Name: - m_EditorClassIdentifier: - reference: Recently added - text: {fileID: 1196215932083384563} - translatedLanguageFontPairingOverrides: {fileID: 0} ---- !u!1 &1879531236010864850 + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: 0, y: -36} + m_SizeDelta: {x: 1920, y: 540} + m_Pivot: {x: 0.5, y: 1} +--- !u!1 &5760055838203041014 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2283,64 +1468,65 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 6062373609210075511} - - component: {fileID: 8540839067045358523} - - component: {fileID: 5696556794969845046} - - component: {fileID: 2810684732723898703} + - component: {fileID: 5760055838203041013} + - component: {fileID: 5760055838203041010} + - component: {fileID: 5760055838203041011} + - component: {fileID: 5760055838203041012} m_Layer: 5 - m_Name: Dropshadow + m_Name: Featured Backplate m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 0 ---- !u!224 &6062373609210075511 + m_IsActive: 1 +--- !u!224 &5760055838203041013 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1879531236010864850} + m_GameObject: {fileID: 5760055838203041014} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] - m_Father: {fileID: 6243932859373928863} + m_Father: {fileID: 5760055837527483279} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 40, y: 40} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &8540839067045358523 + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: 0, y: -20} + m_SizeDelta: {x: 992, y: 646} + m_Pivot: {x: 0.5, y: 1} +--- !u!222 &5760055838203041010 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1879531236010864850} + m_GameObject: {fileID: 5760055838203041014} m_CullTransparentMesh: 0 ---- !u!114 &5696556794969845046 +--- !u!114 &5760055838203041011 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1879531236010864850} + m_GameObject: {fileID: 5760055838203041014} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 0.02745098, g: 0.75686276, b: 0.84705883, a: 1} - m_RaycastTarget: 0 + m_Color: {r: 0.05490196, g: 0.0627451, b: 0.105882354, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 21300000, guid: 2331a654c7aa71748b92458aa50e1748, type: 3} + m_Sprite: {fileID: 21300000, guid: 1d7a613ab4eb9984ca2ff61802b05e50, type: 3} m_Type: 1 m_PreserveAspect: 0 m_FillCenter: 1 @@ -2350,20 +1536,20 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 ---- !u!114 &2810684732723898703 +--- !u!114 &5760055838203041012 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1879531236010864850} + m_GameObject: {fileID: 5760055838203041014} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} m_Name: m_EditorClassIdentifier: - type: 4 ---- !u!1 &1908151942859717203 + type: 2 +--- !u!1 &5760055838370208896 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2371,66 +1557,67 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1401505348103715165} - - component: {fileID: 5563348688492463047} - - component: {fileID: 5628243286308637253} - - component: {fileID: 5516403524265058299} + - component: {fileID: 5760055838370208911} + - component: {fileID: 5760055838370208908} + - component: {fileID: 5760055838370208909} + - component: {fileID: 5760055838370208910} m_Layer: 5 - m_Name: Error Icon + m_Name: Scrollbar m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &1401505348103715165 +--- !u!224 &5760055838370208911 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1908151942859717203} + m_GameObject: {fileID: 5760055838370208896} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: - - {fileID: 1751632060915818272} - m_Father: {fileID: 4437617399257212789} - m_RootOrder: 0 + - {fileID: 5760055838385861465} + m_Father: {fileID: 5760055838456421178} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0} - m_AnchorMax: {x: 0.5, y: 0} - m_AnchoredPosition: {x: 0, y: 168} - m_SizeDelta: {x: 64, y: 64} - m_Pivot: {x: 0.5, y: 0} ---- !u!222 &5563348688492463047 + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -8, y: -50.00049} + m_SizeDelta: {x: 8, y: -180} + m_Pivot: {x: 1, y: 0.5} +--- !u!222 &5760055838370208908 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1908151942859717203} + m_GameObject: {fileID: 5760055838370208896} m_CullTransparentMesh: 0 ---- !u!114 &5628243286308637253 +--- !u!114 &5760055838370208909 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1908151942859717203} - m_Enabled: 1 + m_GameObject: {fileID: 5760055838370208896} + m_Enabled: 0 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 0.85882354, g: 0.3254902, b: 0.33333334, a: 1} - m_RaycastTarget: 1 + m_Color: {r: 1, g: 1, b: 1, a: 0} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 21300000, guid: 91a797609e9a1bf4eafc93d15a99087f, type: 3} - m_Type: 0 + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 m_PreserveAspect: 0 m_FillCenter: 1 m_FillMethod: 4 @@ -2439,216 +1626,21 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 ---- !u!114 &5516403524265058299 +--- !u!114 &5760055838370208910 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1908151942859717203} + m_GameObject: {fileID: 5760055838370208896} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} - m_Name: - m_EditorClassIdentifier: - type: 9 ---- !u!1 &1927207057109629574 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3235364141091716426} - - component: {fileID: 5146826607743011230} - - component: {fileID: 149915907078773604} - - component: {fileID: 5383583161969257493} - m_Layer: 5 - m_Name: ErrorPanel - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 0 ---- !u!224 &3235364141091716426 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1927207057109629574} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 7368421600720008905} - - {fileID: 3348216816584570355} - - {fileID: 6434634874148591815} - m_Father: {fileID: 7998808985149902515} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &5146826607743011230 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1927207057109629574} - m_CullTransparentMesh: 0 ---- !u!114 &149915907078773604 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1927207057109629574} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.05490196, g: 0.0627451, b: 0.105882354, a: 1} - m_RaycastTarget: 0 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 21300000, guid: c05eab6045e68c1449e9a85be63f1495, type: 3} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &5383583161969257493 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1927207057109629574} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} - m_Name: - m_EditorClassIdentifier: - type: 2 ---- !u!114 &8464749848322113283 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2157579194019695166} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} - m_Name: - m_EditorClassIdentifier: - reference: Retry all failed fetches - text: {fileID: 1710112062607350484} - translatedLanguageFontPairingOverrides: {fileID: 0} ---- !u!1 &2472415123641102837 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4069555545533185230} - - component: {fileID: 1593263483005471525} - - component: {fileID: 8243537630706071994} - - component: {fileID: 4041339027058145426} - - component: {fileID: 5404838525870154722} - m_Layer: 5 - m_Name: Page Right - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &4069555545533185230 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2472415123641102837} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 7164317584136557773} - m_Father: {fileID: 9144147956179003390} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 1, y: 0.5} - m_AnchorMax: {x: 1, y: 0.5} - m_AnchoredPosition: {x: -40, y: 0} - m_SizeDelta: {x: 48, y: 48} - m_Pivot: {x: 1, y: 0.5} ---- !u!222 &1593263483005471525 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2472415123641102837} - m_CullTransparentMesh: 0 ---- !u!114 &8243537630706071994 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2472415123641102837} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 21300000, guid: de620a661822071448a42c3581ca6cdf, type: 3} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &4041339027058145426 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2472415123641102837} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Script: {fileID: 11500000, guid: 2a4db7a114972834c8e4117be1d82ba3, type: 3} m_Name: m_EditorClassIdentifier: m_Navigation: m_Mode: 0 + m_WrapAround: 0 m_SelectOnUp: {fileID: 0} m_SelectOnDown: {fileID: 0} m_SelectOnLeft: {fileID: 0} @@ -2674,65 +1666,28 @@ MonoBehaviour: m_SelectedTrigger: Highlighted m_DisabledTrigger: Disabled m_Interactable: 1 - m_TargetGraphic: {fileID: 8243537630706071994} - m_OnClick: + m_TargetGraphic: {fileID: 5760055838030722346} + m_HandleRect: {fileID: 5760055838030722348} + m_Direction: 2 + m_Value: 0 + m_Size: 1 + m_NumberOfSteps: 0 + m_OnValueChanged: m_PersistentCalls: m_Calls: - - m_Target: {fileID: 8148420632553304631} - m_MethodName: SwipeRow - m_Mode: 6 + - m_Target: {fileID: 2481775387260960443} + m_TargetAssemblyTypeName: ModIOBrowser.Implementation.Home, modio.UI + m_MethodName: OnScrollValueChange + m_Mode: 1 m_Arguments: m_ObjectArgument: {fileID: 0} m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine m_IntArgument: 0 m_FloatArgument: 0 m_StringArgument: - m_BoolArgument: 1 + m_BoolArgument: 0 m_CallState: 2 ---- !u!114 &5404838525870154722 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2472415123641102837} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d0b148fe25e99eb48b9724523833bab1, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Delegates: - - eventID: 0 - callback: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 0} - m_MethodName: PlayHover - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 - - eventID: 4 - callback: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 0} - m_MethodName: PlayClick - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 ---- !u!1 &2476207998803975479 +--- !u!1 &5760055838385861466 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2740,37 +1695,35 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 9205084670609649368} + - component: {fileID: 5760055838385861465} m_Layer: 5 - m_Name: Mod Items Container + m_Name: Sliding Area m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &9205084670609649368 +--- !u!224 &5760055838385861465 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2476207998803975479} + m_GameObject: {fileID: 5760055838385861466} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: - - {fileID: 7844501160337624107} - - {fileID: 3290575739898776701} - - {fileID: 2593279480392021872} - m_Father: {fileID: 7927652363544414619} - m_RootOrder: 1 + - {fileID: 5760055838030722348} + m_Father: {fileID: 5760055838370208911} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 1} m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 301} - m_Pivot: {x: 0.5, y: 0} ---- !u!1 &2479758565231341164 + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &5760055838395833917 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2778,88 +1731,79 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 7368421600720008905} - - component: {fileID: 2968360200424198684} - - component: {fileID: 2400177678430673415} - - component: {fileID: 2526843259909617786} + - component: {fileID: 5760055838395833916} + - component: {fileID: 5760055838395833915} + - component: {fileID: 5760055838395833914} m_Layer: 5 - m_Name: Error Icon + m_Name: Content m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &7368421600720008905 +--- !u!224 &5760055838395833916 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2479758565231341164} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_GameObject: {fileID: 5760055838395833917} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: - - {fileID: 7116277562353772175} - m_Father: {fileID: 3235364141091716426} + - {fileID: 9061634454445475437} + - {fileID: 5760055839024060862} + - {fileID: 5760055838864409643} + m_Father: {fileID: 5760055838456421178} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0} - m_AnchorMax: {x: 0.5, y: 0} - m_AnchoredPosition: {x: 0, y: 168} - m_SizeDelta: {x: 64, y: 64} - m_Pivot: {x: 0.5, y: 0} ---- !u!222 &2968360200424198684 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2479758565231341164} - m_CullTransparentMesh: 0 ---- !u!114 &2400177678430673415 + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &5760055838395833915 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2479758565231341164} + m_GameObject: {fileID: 5760055838395833917} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} m_Name: m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.85882354, g: 0.3254902, b: 0.33333334, a: 1} - m_RaycastTarget: 1 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 21300000, guid: 91a797609e9a1bf4eafc93d15a99087f, type: 3} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &2526843259909617786 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 164 + m_Bottom: 0 + m_ChildAlignment: 1 + m_Spacing: 64 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 0 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!114 &5760055838395833914 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2479758565231341164} + m_GameObject: {fileID: 5760055838395833917} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} m_Name: m_EditorClassIdentifier: - type: 9 ---- !u!1 &2568159562269395929 + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!1 &5760055838456421179 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2867,65 +1811,125 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 3957435482710495932} - - component: {fileID: 6046819173387982623} - - component: {fileID: 2174866340546522330} - - component: {fileID: 3373974870820831446} + - component: {fileID: 5760055838456421178} + - component: {fileID: 5760055838456421158} + - component: {fileID: 5760055838456421159} + - component: {fileID: 5760055838456421176} + - component: {fileID: 5760055838456421177} m_Layer: 5 - m_Name: Dropshadow + m_Name: Main View m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 0 ---- !u!224 &3957435482710495932 + m_IsActive: 1 +--- !u!224 &5760055838456421178 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2568159562269395929} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_GameObject: {fileID: 5760055838456421179} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 6568531377770842912} + m_Children: + - {fileID: 5760055838395833916} + - {fileID: 5760055838370208911} + m_Father: {fileID: 5760055837242226404} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 40, y: 40} + m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &6046819173387982623 +--- !u!114 &5760055838456421158 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5760055838456421179} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1aa08ab6e0800fa44ae55d278d1423e3, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Content: {fileID: 5760055838395833916} + m_Horizontal: 0 + m_Vertical: 1 + m_MovementType: 2 + m_Elasticity: 0.1 + m_Inertia: 1 + m_DecelerationRate: 0.1 + m_ScrollSensitivity: 100 + m_Viewport: {fileID: 5760055838456421178} + m_HorizontalScrollbar: {fileID: 0} + m_VerticalScrollbar: {fileID: 5760055838370208910} + m_HorizontalScrollbarVisibility: 0 + m_VerticalScrollbarVisibility: 0 + m_HorizontalScrollbarSpacing: 0 + m_VerticalScrollbarSpacing: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 2481775387260960443} + m_TargetAssemblyTypeName: + m_MethodName: OnScrollValueChange + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &5760055838456421159 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5760055838456421179} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3312d7739989d2b4e91e6319e9a96d76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: {x: 0, y: 0, z: 0, w: 0} + m_Softness: {x: 0, y: 0} +--- !u!222 &5760055838456421176 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2568159562269395929} + m_GameObject: {fileID: 5760055838456421179} m_CullTransparentMesh: 0 ---- !u!114 &2174866340546522330 +--- !u!114 &5760055838456421177 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2568159562269395929} + m_GameObject: {fileID: 5760055838456421179} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 0.02745098, g: 0.75686276, b: 0.84705883, a: 1} - m_RaycastTarget: 0 + m_Color: {r: 1, g: 1, b: 1, a: 0.003921569} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 21300000, guid: 2331a654c7aa71748b92458aa50e1748, type: 3} - m_Type: 1 + m_Sprite: {fileID: 0} + m_Type: 0 m_PreserveAspect: 0 m_FillCenter: 1 m_FillMethod: 4 @@ -2934,20 +1938,7 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 ---- !u!114 &3373974870820831446 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2568159562269395929} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} - m_Name: - m_EditorClassIdentifier: - type: 4 ---- !u!1 &2588865420982281680 +--- !u!1 &5760055838803739577 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2955,112 +1946,68 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1904005893992199385} - - component: {fileID: 2550473727274960489} + - component: {fileID: 5760055838803739576} + - component: {fileID: 5760055838803739557} + - component: {fileID: 5760055838803739558} + - component: {fileID: 5760055838803739559} + - component: {fileID: 8804625801360902364} m_Layer: 5 - m_Name: Details + m_Name: Page Left m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &1904005893992199385 +--- !u!224 &5760055838803739576 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2588865420982281680} + m_GameObject: {fileID: 5760055838803739577} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: - - {fileID: 3227478787108492107} - - {fileID: 5760055837487575704} + - {fileID: 2960945230977109645} m_Father: {fileID: 5760055837527483279} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 1} - m_AnchorMax: {x: 0.5, y: 1} - m_AnchoredPosition: {x: 0, y: -606} - m_SizeDelta: {x: 952, y: 40} - m_Pivot: {x: 0.5, y: 1} ---- !u!222 &2550473727274960489 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2588865420982281680} - m_CullTransparentMesh: 0 ---- !u!1 &2600583094430124613 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3782631751476734999} - - component: {fileID: 4330768493583425699} - - component: {fileID: 7451764348666117991} - - component: {fileID: 2081181276672269927} - m_Layer: 5 - m_Name: Error Icon - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &3782631751476734999 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2600583094430124613} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 5968799625567422273} - m_Father: {fileID: 8041509762575082362} - m_RootOrder: 0 + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0} - m_AnchorMax: {x: 0.5, y: 0} - m_AnchoredPosition: {x: 0, y: 168} - m_SizeDelta: {x: 64, y: 64} - m_Pivot: {x: 0.5, y: 0} ---- !u!222 &4330768493583425699 + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -920, y: 0} + m_SizeDelta: {x: 40, y: 40} + m_Pivot: {x: 0, y: 0.5} +--- !u!222 &5760055838803739557 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2600583094430124613} + m_GameObject: {fileID: 5760055838803739577} m_CullTransparentMesh: 0 ---- !u!114 &7451764348666117991 +--- !u!114 &5760055838803739558 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2600583094430124613} + m_GameObject: {fileID: 5760055838803739577} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 0.85882354, g: 0.3254902, b: 0.33333334, a: 1} + m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 21300000, guid: 91a797609e9a1bf4eafc93d15a99087f, type: 3} - m_Type: 0 + m_Sprite: {fileID: 21300000, guid: de620a661822071448a42c3581ca6cdf, type: 3} + m_Type: 1 m_PreserveAspect: 0 m_FillCenter: 1 m_FillMethod: 4 @@ -3069,35 +2016,108 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 ---- !u!114 &2081181276672269927 +--- !u!114 &5760055838803739559 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2600583094430124613} + m_GameObject: {fileID: 5760055838803739577} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} m_Name: m_EditorClassIdentifier: - type: 9 ---- !u!114 &6843359528159565496 + m_Navigation: + m_Mode: 0 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 5760055838803739558} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 2481775387260960443} + m_TargetAssemblyTypeName: + m_MethodName: PageFeaturedRow + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &8804625801360902364 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2717753144887088218} + m_GameObject: {fileID: 5760055838803739577} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} + m_Script: {fileID: 11500000, guid: d0b148fe25e99eb48b9724523833bab1, type: 3} m_Name: m_EditorClassIdentifier: - reference: Retry all failed fetches - text: {fileID: 3458110382779991216} - translatedLanguageFontPairingOverrides: {fileID: 0} ---- !u!1 &2958830027415675204 + m_Delegates: + - eventID: 0 + callback: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 0} + m_TargetAssemblyTypeName: + m_MethodName: PlayHover + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - eventID: 4 + callback: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 0} + m_TargetAssemblyTypeName: + m_MethodName: PlayClick + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!1 &5760055838864409644 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3105,87 +2125,112 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 4174226357644456727} - - component: {fileID: 744685741333805579} - - component: {fileID: 7608431339814648936} - - component: {fileID: 7756081635136469634} + - component: {fileID: 5760055838864409643} m_Layer: 5 - m_Name: Dropshadow + m_Name: Footer m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &4174226357644456727 +--- !u!224 &5760055838864409643 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2958830027415675204} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_GameObject: {fileID: 5760055838864409644} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 2714744016542651328} - m_RootOrder: 0 + m_Children: + - {fileID: 8600105461494756807} + m_Father: {fileID: 5760055838395833916} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} + m_AnchorMax: {x: 0, y: 0} m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 40, y: 40} + m_SizeDelta: {x: 0, y: 80} m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &744685741333805579 -CanvasRenderer: +--- !u!1 &5760055838897582304 +GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2958830027415675204} - m_CullTransparentMesh: 0 ---- !u!114 &7608431339814648936 -MonoBehaviour: + serializedVersion: 6 + m_Component: + - component: {fileID: 5760055838897582319} + m_Layer: 5 + m_Name: Featured Index Positions + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5760055838897582319 +RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2958830027415675204} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.02745098, g: 0.75686276, b: 0.84705883, a: 1} - m_RaycastTarget: 0 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 21300000, guid: 2331a654c7aa71748b92458aa50e1748, type: 3} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &7756081635136469634 -MonoBehaviour: + m_GameObject: {fileID: 5760055838897582304} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 5760055837362136015} + - {fileID: 5760055839057535352} + - {fileID: 5346609901548097613} + - {fileID: 5760055837879226655} + - {fileID: 5760055837231720816} + m_Father: {fileID: 5760055838067006261} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 1920, y: 540} + m_Pivot: {x: 0.5, y: 1} +--- !u!1 &5760055839024060863 +GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2958830027415675204} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} - m_Name: - m_EditorClassIdentifier: - type: 4 ---- !u!1 &2960945229545667041 + serializedVersion: 6 + m_Component: + - component: {fileID: 5760055839024060862} + m_Layer: 5 + m_Name: Featured Row + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5760055839024060862 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5760055839024060863} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 5760055837943744819} + - {fileID: 5760055837527483279} + m_Father: {fileID: 5760055838395833916} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 1920, y: 686} + m_Pivot: {x: 0.5, y: 1} +--- !u!1 &5760055839057535353 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3193,77 +2238,131 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2960945229545667046} - - component: {fileID: 2960945229545667044} - - component: {fileID: 2960945229545667047} + - component: {fileID: 5760055839057535352} + - component: {fileID: 5760055839057535334} + - component: {fileID: 5760055839057535333} + - component: {fileID: 5760055839057535335} m_Layer: 5 - m_Name: Text + m_Name: Left m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &2960945229545667046 +--- !u!224 &5760055839057535352 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2960945229545667041} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_GameObject: {fileID: 5760055839057535353} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] - m_Father: {fileID: 5760055837684760253} - m_RootOrder: 0 + m_Father: {fileID: 5760055838897582319} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -980, y: 0} + m_SizeDelta: {x: 906, y: 510} m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &2960945229545667044 +--- !u!222 &5760055839057535334 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2960945229545667041} + m_GameObject: {fileID: 5760055839057535353} m_CullTransparentMesh: 0 ---- !u!114 &2960945229545667047 +--- !u!114 &5760055839057535333 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2960945229545667041} + m_GameObject: {fileID: 5760055839057535353} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 0 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 0 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 5760055839057535335} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 2481775387260960443} + m_TargetAssemblyTypeName: + m_MethodName: PageFeaturedRow + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &5760055839057535335 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5760055839057535353} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_RaycastTarget: 0 + m_Color: {r: 1, g: 1, b: 1, a: 0} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_FontData: - m_Font: {fileID: 12800000, guid: 0774b14b39d939b4f80ff528506c94ba, type: 3} - m_FontSize: 24 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 1 - m_MaxSize: 40 - m_Alignment: 4 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: '>' ---- !u!1 &2960945230357676419 + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &6958804181134327471 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3271,51 +2370,50 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2960945230357676416} - - component: {fileID: 2960945230357676422} - - component: {fileID: 2960945230357676417} - - component: {fileID: 8776311618546079018} + - component: {fileID: 7320064122044428091} + - component: {fileID: 3243911583827942615} + - component: {fileID: 1611259920501839651} m_Layer: 5 - m_Name: highlight + m_Name: Image m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &2960945230357676416 +--- !u!224 &7320064122044428091 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2960945230357676419} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_GameObject: {fileID: 6958804181134327471} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] - m_Father: {fileID: 5346609901548097613} - m_RootOrder: 0 + m_Father: {fileID: 8600105461494756807} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: -37} - m_SizeDelta: {x: 72, y: 146} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 32, y: 32} m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &2960945230357676422 +--- !u!222 &3243911583827942615 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2960945230357676419} + m_GameObject: {fileID: 6958804181134327471} m_CullTransparentMesh: 0 ---- !u!114 &2960945230357676417 +--- !u!114 &1611259920501839651 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2960945230357676419} + m_GameObject: {fileID: 6958804181134327471} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} @@ -3323,13 +2421,14 @@ MonoBehaviour: m_EditorClassIdentifier: m_Material: {fileID: 0} m_Color: {r: 0.02745098, g: 0.75686276, b: 0.84705883, a: 1} - m_RaycastTarget: 1 + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 21300000, guid: ae7af120ee031534f952fdd7a78b80f9, type: 3} - m_Type: 1 + m_Sprite: {fileID: 21300000, guid: c36e4922adf420842ad3738a5bb00a14, type: 3} + m_Type: 0 m_PreserveAspect: 0 m_FillCenter: 1 m_FillMethod: 4 @@ -3338,22 +2437,7 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 ---- !u!114 &8776311618546079018 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2960945230357676419} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: edb10346a1dac1d41a69f1b9c914fbfd, type: 3} - m_Name: - m_EditorClassIdentifier: - color: 4 - colorScheme: {fileID: 0} - image: {fileID: 2960945230357676417} ---- !u!1 &2960945230977109644 +--- !u!1 &7568424668732415792 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -3361,256 +2445,51 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2960945230977109645} - - component: {fileID: 2960945230977109651} - - component: {fileID: 2960945230977109650} + - component: {fileID: 7400556031270052247} + - component: {fileID: 5007974329950115878} + - component: {fileID: 2666328831239230183} + - component: {fileID: 388757779518125694} m_Layer: 5 - m_Name: Text + m_Name: Text (1) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &2960945230977109645 +--- !u!224 &7400556031270052247 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2960945230977109644} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_GameObject: {fileID: 7568424668732415792} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] - m_Father: {fileID: 5760055838803739576} + m_Father: {fileID: 8600105461494756807} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} + m_AnchorMax: {x: 0, y: 0} m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} + m_SizeDelta: {x: 130, y: 18} m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &2960945230977109651 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2960945230977109644} - m_CullTransparentMesh: 0 ---- !u!114 &2960945230977109650 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2960945230977109644} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_RaycastTarget: 0 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_FontData: - m_Font: {fileID: 12800000, guid: 0774b14b39d939b4f80ff528506c94ba, type: 3} - m_FontSize: 24 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 1 - m_MaxSize: 40 - m_Alignment: 4 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: < ---- !u!1 &3112672401298127875 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 9144147956179003390} - m_Layer: 5 - m_Name: Mod Items Container - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &9144147956179003390 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3112672401298127875} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 126841961219918621} - - {fileID: 8328906162336430733} - - {fileID: 4069555545533185230} - m_Father: {fileID: 1230197134381729914} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 301} - m_Pivot: {x: 0.5, y: 0} ---- !u!1 &3116137587917310743 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6745736109228068663} - - component: {fileID: 2517525990242219982} - - component: {fileID: 5634563628336214906} - m_Layer: 5 - m_Name: Content - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &6745736109228068663 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3116137587917310743} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 4806150429029691436} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 0.000061035156, y: 0.000091552734} - m_SizeDelta: {x: 0, y: 300} - m_Pivot: {x: 0, y: 1} ---- !u!114 &2517525990242219982 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3116137587917310743} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Padding: - m_Left: 64 - m_Right: 64 - m_Top: 0 - m_Bottom: 0 - m_ChildAlignment: 0 - m_Spacing: 28 - m_ChildForceExpandWidth: 1 - m_ChildForceExpandHeight: 1 - m_ChildControlWidth: 0 - m_ChildControlHeight: 0 - m_ChildScaleWidth: 0 - m_ChildScaleHeight: 0 ---- !u!114 &5634563628336214906 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3116137587917310743} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} - m_Name: - m_EditorClassIdentifier: - m_HorizontalFit: 2 - m_VerticalFit: 0 ---- !u!1 &3227478787108492104 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3227478787108492107} - - component: {fileID: 3227478787108492149} - - component: {fileID: 3227478787108492105} - - component: {fileID: 3227478787108492110} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &3227478787108492107 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3227478787108492104} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1904005893992199385} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0.5} - m_AnchorMax: {x: 0, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 560, y: 50} - m_Pivot: {x: 0, y: 0.5} ---- !u!222 &3227478787108492149 +--- !u!222 &5007974329950115878 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3227478787108492104} + m_GameObject: {fileID: 7568424668732415792} m_CullTransparentMesh: 0 ---- !u!114 &3227478787108492105 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3227478787108492104} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} - m_Name: - m_EditorClassIdentifier: - type: 3 ---- !u!114 &3227478787108492110 +--- !u!114 &2666328831239230183 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3227478787108492104} + m_GameObject: {fileID: 7568424668732415792} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} @@ -3619,22 +2498,23 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_text: + m_text: Mod support by m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 07eb140c74981ed4aab6d34ebb2e5737, type: 2} - m_sharedMaterial: {fileID: 21301536800525264, guid: 07eb140c74981ed4aab6d34ebb2e5737, + m_fontAsset: {fileID: 11400000, guid: 7357c164f341b0147a6115fd4f243f6b, type: 2} + m_sharedMaterial: {fileID: 21319758026491476, guid: 7357c164f341b0147a6115fd4f243f6b, type: 2} m_fontSharedMaterials: [] m_fontMaterial: {fileID: 0} m_fontMaterials: [] m_fontColor32: serializedVersion: 2 - rgba: 4294967295 - m_fontColor: {r: 1, g: 1, b: 1, a: 1} + rgba: 4292330689 + m_fontColor: {r: 0.75686276, g: 0.76862746, b: 0.84313726, a: 1} m_enableVertexGradient: 0 m_colorMode: 3 m_fontColorGradient: @@ -3651,15 +2531,15 @@ MonoBehaviour: m_faceColor: serializedVersion: 2 rgba: 4294967295 - m_fontSize: 20 - m_fontSizeBase: 20 + m_fontSize: 16 + m_fontSizeBase: 16 m_fontWeight: 400 m_enableAutoSizing: 0 m_fontSizeMin: 18 m_fontSizeMax: 72 m_fontStyle: 0 - m_HorizontalAlignment: 1 - m_VerticalAlignment: 256 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 m_wordSpacing: 0 @@ -3667,7 +2547,7 @@ MonoBehaviour: m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 + m_enableWordWrapping: 0 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} @@ -3693,8181 +2573,364 @@ MonoBehaviour: m_hasFontAssetChanged: 0 m_baseMaterial: {fileID: 0} m_maskOffset: {x: 0, y: 0, z: 0, w: 0} ---- !u!1 &3291266321825260854 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1587016007410289970} - - component: {fileID: 8319583104441821876} - - component: {fileID: 4862175249450484632} - m_Layer: 5 - m_Name: Image (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1587016007410289970 -RectTransform: +--- !u!114 &388757779518125694 +MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3291266321825260854} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 8600105461494756807} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 78, y: 22} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &8319583104441821876 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3291266321825260854} - m_CullTransparentMesh: 0 ---- !u!114 &4862175249450484632 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3291266321825260854} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 0 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 21300000, guid: 1abe564f196a7a54381c40c8ef7de55c, type: 3} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &6538474542240260110 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3297079370921380849} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: edb10346a1dac1d41a69f1b9c914fbfd, type: 3} - m_Name: - m_EditorClassIdentifier: - color: 8 - colorScheme: {fileID: 0} - image: {fileID: 6307084778738225148} ---- !u!114 &6720307159234867504 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3297079371091848245} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: edb10346a1dac1d41a69f1b9c914fbfd, type: 3} - m_Name: - m_EditorClassIdentifier: - color: 8 - colorScheme: {fileID: 0} - image: {fileID: 6307084778903185464} ---- !u!114 &1137320149233190250 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3297079371940921515} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: edb10346a1dac1d41a69f1b9c914fbfd, type: 3} - m_Name: - m_EditorClassIdentifier: - color: 8 - colorScheme: {fileID: 0} - image: {fileID: 6307084779731813542} ---- !u!1 &3320264768757642564 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3485997611994867574} - - component: {fileID: 3467295725025997885} - - component: {fileID: 1496940093244392532} - - component: {fileID: 7966349907561277376} - - component: {fileID: 4601365486572797855} - m_Layer: 5 - m_Name: Page Left - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &3485997611994867574 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3320264768757642564} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 2116367503642066428} - m_Father: {fileID: 4806150429029691436} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0.5} - m_AnchorMax: {x: 0, y: 0.5} - m_AnchoredPosition: {x: 40, y: 0} - m_SizeDelta: {x: 48, y: 48} - m_Pivot: {x: 0, y: 0.5} ---- !u!222 &3467295725025997885 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3320264768757642564} - m_CullTransparentMesh: 0 ---- !u!114 &1496940093244392532 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3320264768757642564} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 21300000, guid: de620a661822071448a42c3581ca6cdf, type: 3} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &7966349907561277376 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3320264768757642564} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 0 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Highlighted - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 1496940093244392532} - m_OnClick: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 2251121041795955683} - m_MethodName: SwipeRow - m_Mode: 6 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 ---- !u!114 &4601365486572797855 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3320264768757642564} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d0b148fe25e99eb48b9724523833bab1, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Delegates: - - eventID: 0 - callback: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 0} - m_MethodName: PlayHover - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 - - eventID: 4 - callback: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 0} - m_MethodName: PlayClick - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 ---- !u!1 &3521332459958875506 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6227897226854095548} - - component: {fileID: 8459963202896391222} - - component: {fileID: 3449407196871370004} - - component: {fileID: 6049969254683259799} - m_Layer: 5 - m_Name: arrow - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &6227897226854095548 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3521332459958875506} - m_LocalRotation: {x: 0, y: 0, z: 1, w: 0} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 6309060602930312063} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 180} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 10, y: 18} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &8459963202896391222 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3521332459958875506} - m_CullTransparentMesh: 0 ---- !u!114 &3449407196871370004 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3521332459958875506} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.05490196, g: 0.0627451, b: 0.105882354, a: 1} - m_RaycastTarget: 1 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 21300000, guid: 3b4f799ae62d42041ac993e0b2ef8ff5, type: 3} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &6049969254683259799 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3521332459958875506} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} - m_Name: - m_EditorClassIdentifier: - type: 2 ---- !u!1 &3523072480072553783 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7844501160337624107} - - component: {fileID: 1886042395428889335} - - component: {fileID: 2545105405946113996} - m_Layer: 5 - m_Name: Content - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &7844501160337624107 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3523072480072553783} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 9205084670609649368} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 0.000061035156, y: 0.00012207031} - m_SizeDelta: {x: 0, y: 300} - m_Pivot: {x: 0, y: 1} ---- !u!114 &1886042395428889335 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3523072480072553783} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Padding: - m_Left: 64 - m_Right: 64 - m_Top: 0 - m_Bottom: 0 - m_ChildAlignment: 0 - m_Spacing: 28 - m_ChildForceExpandWidth: 1 - m_ChildForceExpandHeight: 1 - m_ChildControlWidth: 0 - m_ChildControlHeight: 0 - m_ChildScaleWidth: 0 - m_ChildScaleHeight: 0 ---- !u!114 &2545105405946113996 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3523072480072553783} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} - m_Name: - m_EditorClassIdentifier: - m_HorizontalFit: 2 - m_VerticalFit: 0 ---- !u!1 &3624343745448278397 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7927652363544414619} - m_Layer: 5 - m_Name: ModRow_Trending - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &7927652363544414619 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3624343745448278397} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 1624031526298744626} - - {fileID: 9205084670609649368} - - {fileID: 7998808985149902515} - m_Father: {fileID: 5760055838395833916} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 1920, y: 359} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!1 &3749877678463142544 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1103860912737953195} - - component: {fileID: 8348018521158070724} - - component: {fileID: 8148420632553304631} - - component: {fileID: 936357247105290562} - - component: {fileID: 3582902114692079943} - m_Layer: 5 - m_Name: RowSelectable - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1103860912737953195 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3749877678463142544} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 6568531377770842912} - m_Father: {fileID: 2482191731014220696} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &8348018521158070724 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3749877678463142544} - m_CullTransparentMesh: 0 ---- !u!114 &8148420632553304631 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3749877678463142544} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 7c24c539ef8622a49a05be42a385d095, type: 3} - m_Name: - m_EditorClassIdentifier: - ErrorPanel: {fileID: 245082372695515032} - LoadingPanel: {fileID: 7923603635805538967} - RowPanel: {fileID: 3112672401298127875} - MainSelectableHighlights: {fileID: 5367179396481162880} - ModListItemPrefab: {fileID: 3616021901904687619, guid: 6dab28ac97efe3645a00cfa31697b3e0, - type: 3} - ModListItemContainer: {fileID: 126841961219918621} - AboveSelection: {fileID: 5346609901548097610} - BelowSelection: {fileID: 126850650622171940} ---- !u!114 &936357247105290562 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3749877678463142544} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d5ce6686d7065cf4986b2ed3e2773c96, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 4 - m_SelectOnUp: {fileID: 5346609901548097610} - m_SelectOnDown: {fileID: 126850650622171940} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 0} - m_HighlightedColor: {r: 1, g: 1, b: 1, a: 1} - m_PressedColor: {r: 1, g: 1, b: 1, a: 1} - m_SelectedColor: {r: 1, g: 1, b: 1, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Highlighted - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 934736042653034038} - m_OnClick: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 8148420632553304631} - m_MethodName: RetryGetMods - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 - scheme: {fileID: 0} - extraTargets: - - target: {fileID: 2174866340546522330} - transition: 1 - colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 0} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 1, g: 1, b: 1, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - colorSchemeBlock: - Normal: 6 - NormalColorAlpha: 1 - Highlighted: 4 - HighlightedColorAlpha: 1 - Pressed: 4 - PressedColorAlpha: 1 - Disabled: 2 - DisabledColorAlpha: 1 - ColorMultiplier: 1 - FadeDuration: 0.1 - spriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - animationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Highlighted - m_DisabledTrigger: Disabled - animator: {fileID: 0} - enableOnNormal: 0 - enableOnHighlight: 1 - enableOnPressed: 1 - enableOnDisabled: 0 - isControllerButtonIcon: 0 - childButtons: - - {fileID: 1247282491650438843} ---- !u!114 &3582902114692079943 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3749877678463142544} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 78a172db96e209b41a0f30a5676688e3, type: 3} - m_Name: - m_EditorClassIdentifier: - PercentPaddingHorizontal: 0.05 - PercentPaddingVertical: 0.25 - adjustHorizontally: 0 - adjustVertically: 1 - Viewport: {fileID: 5760055837242226404} - DefaultViewportContainer: {fileID: 5760055838395833916} - HorizontalViewportContainer: {fileID: 0} ---- !u!1 &3762395240228533553 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8600105461494756807} - - component: {fileID: 5889646863311440989} - m_Layer: 5 - m_Name: Mod support by mod.io (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &8600105461494756807 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3762395240228533553} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 7400556031270052247} - - {fileID: 7320064122044428091} - - {fileID: 1587016007410289970} - m_Father: {fileID: 5760055838864409643} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0} - m_AnchorMax: {x: 0.5, y: 0} - m_AnchoredPosition: {x: 0, y: 40} - m_SizeDelta: {x: 300, y: 40} - m_Pivot: {x: 0.5, y: 0} ---- !u!114 &5889646863311440989 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3762395240228533553} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_ChildAlignment: 4 - m_Spacing: 5 - m_ChildForceExpandWidth: 0 - m_ChildForceExpandHeight: 1 - m_ChildControlWidth: 0 - m_ChildControlHeight: 0 - m_ChildScaleWidth: 0 - m_ChildScaleHeight: 0 ---- !u!114 &1695487116257317269 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3867584340805876192} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: edb10346a1dac1d41a69f1b9c914fbfd, type: 3} - m_Name: - m_EditorClassIdentifier: - color: 8 - colorScheme: {fileID: 0} - image: {fileID: 2388764337699028120} ---- !u!1 &4026786283838639177 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8328906162336430733} - - component: {fileID: 6127584244989458099} - - component: {fileID: 5188640205442599329} - - component: {fileID: 7366051303024596544} - - component: {fileID: 2863812867318801946} - m_Layer: 5 - m_Name: Page Left - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &8328906162336430733 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4026786283838639177} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 4704575437679125224} - m_Father: {fileID: 9144147956179003390} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0.5} - m_AnchorMax: {x: 0, y: 0.5} - m_AnchoredPosition: {x: 40, y: 0} - m_SizeDelta: {x: 48, y: 48} - m_Pivot: {x: 0, y: 0.5} ---- !u!222 &6127584244989458099 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4026786283838639177} - m_CullTransparentMesh: 0 ---- !u!114 &5188640205442599329 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4026786283838639177} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 21300000, guid: de620a661822071448a42c3581ca6cdf, type: 3} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &7366051303024596544 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4026786283838639177} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 0 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Highlighted - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 5188640205442599329} - m_OnClick: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 8148420632553304631} - m_MethodName: SwipeRow - m_Mode: 6 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 ---- !u!114 &2863812867318801946 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4026786283838639177} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d0b148fe25e99eb48b9724523833bab1, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Delegates: - - eventID: 0 - callback: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 0} - m_MethodName: PlayHover - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 - - eventID: 4 - callback: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 0} - m_MethodName: PlayClick - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 ---- !u!1 &4043486660149500513 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8641512021059779286} - m_Layer: 5 - m_Name: Mod Items Container - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &8641512021059779286 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4043486660149500513} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 2808773147583204528} - - {fileID: 7410283501995677904} - - {fileID: 6309060602930312063} - m_Father: {fileID: 6677660644696604223} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 301} - m_Pivot: {x: 0.5, y: 0} ---- !u!1 &4112205902619754174 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5994240068803344250} - - component: {fileID: 1932629793787846620} - - component: {fileID: 4572471208612021213} - - component: {fileID: 6524785743173480090} - m_Layer: 5 - m_Name: Exclamation - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &5994240068803344250 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4112205902619754174} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 4910128418665223718} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 12, y: 32} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &1932629793787846620 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4112205902619754174} - m_CullTransparentMesh: 0 ---- !u!114 &4572471208612021213 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4112205902619754174} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 21300000, guid: bf3ef0ed793cec648b85261648c43e27, type: 3} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &6524785743173480090 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4112205902619754174} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} - m_Name: - m_EditorClassIdentifier: - type: 3 ---- !u!1 &4147900354361302846 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7775025196942318881} - m_Layer: 5 - m_Name: Mod Row Panels - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &7775025196942318881 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4147900354361302846} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 8041509762575082362} - - {fileID: 1752478102183024605} - - {fileID: 6475130985988419546} - m_Father: {fileID: 6677660644696604223} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: -128, y: 301} - m_Pivot: {x: 0.5, y: 0} ---- !u!1 &4190229415124150194 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7224393530279423441} - m_Layer: 5 - m_Name: Mod Row Panels - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &7224393530279423441 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4190229415124150194} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 6914708581523774563} - - {fileID: 8913687650595004255} - - {fileID: 4293101959910755915} - m_Father: {fileID: 5641179401900381504} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: -128, y: 301} - m_Pivot: {x: 0.5, y: 0} ---- !u!1 &4244282727769094987 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4806150429029691436} - m_Layer: 5 - m_Name: Mod Items Container - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &4806150429029691436 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4244282727769094987} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 6745736109228068663} - - {fileID: 3485997611994867574} - - {fileID: 435819020512209117} - m_Father: {fileID: 5641179401900381504} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 301} - m_Pivot: {x: 0.5, y: 0} ---- !u!1 &4705547689762703881 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7410283501995677904} - - component: {fileID: 19178733436391055} - - component: {fileID: 5488247330623424171} - - component: {fileID: 7191323588121564811} - - component: {fileID: 2902040373895889027} - m_Layer: 5 - m_Name: Page Left - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &7410283501995677904 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4705547689762703881} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 5105266302533462081} - m_Father: {fileID: 8641512021059779286} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0.5} - m_AnchorMax: {x: 0, y: 0.5} - m_AnchoredPosition: {x: 40, y: 0} - m_SizeDelta: {x: 48, y: 48} - m_Pivot: {x: 0, y: 0.5} ---- !u!222 &19178733436391055 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4705547689762703881} - m_CullTransparentMesh: 0 ---- !u!114 &5488247330623424171 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4705547689762703881} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 21300000, guid: de620a661822071448a42c3581ca6cdf, type: 3} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &7191323588121564811 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4705547689762703881} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 0 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Highlighted - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 5488247330623424171} - m_OnClick: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 2522303128527752034} - m_MethodName: SwipeRow - m_Mode: 6 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 ---- !u!114 &2902040373895889027 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4705547689762703881} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d0b148fe25e99eb48b9724523833bab1, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Delegates: - - eventID: 0 - callback: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 0} - m_MethodName: PlayHover - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 - - eventID: 4 - callback: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 0} - m_MethodName: PlayClick - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 ---- !u!114 &3822552800568194711 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4949908849466198011} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} - m_Name: - m_EditorClassIdentifier: - reference: Subscribe - text: {fileID: 5691231456873797393} - translatedLanguageFontPairingOverrides: {fileID: 0} ---- !u!114 &1214643860068779282 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5199324008714223792} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} - m_Name: - m_EditorClassIdentifier: - reference: Retry all failed fetches - text: {fileID: 4786621237777485914} - translatedLanguageFontPairingOverrides: {fileID: 0} ---- !u!1 &5346609901548097612 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5346609901548097613} - - component: {fileID: 5346609901548097611} - - component: {fileID: 5346609901548097610} - - component: {fileID: 5346609901548097609} - - component: {fileID: 8065266053913587260} - m_Layer: 5 - m_Name: Center - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &5346609901548097613 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5346609901548097612} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 2960945230357676416} - m_Father: {fileID: 5760055838897582319} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 960, y: 540} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &5346609901548097611 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5346609901548097612} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: bbcd964da59403d42930ac6a72f8f2c5, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!114 &5346609901548097610 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5346609901548097612} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d5ce6686d7065cf4986b2ed3e2773c96, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 4 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 936357247105290562} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 0} - m_HighlightedColor: {r: 1, g: 1, b: 1, a: 1} - m_PressedColor: {r: 1, g: 1, b: 1, a: 1} - m_SelectedColor: {r: 1, g: 1, b: 1, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Highlighted - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 2960945230357676417} - m_OnClick: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 2481775387260960443} - m_MethodName: SelectFeaturedMod - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 - scheme: {fileID: 0} - extraTargets: - - target: {fileID: 2960945230090701357} - transition: 4 - colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - colorSchemeBlock: - Normal: 6 - NormalColorAlpha: 1 - Highlighted: 4 - HighlightedColorAlpha: 1 - Pressed: 4 - PressedColorAlpha: 1 - Disabled: 2 - DisabledColorAlpha: 1 - ColorMultiplier: 1 - FadeDuration: 0.1 - spriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - animationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Highlighted - m_DisabledTrigger: Disabled - animator: {fileID: 0} - enableOnNormal: 0 - enableOnHighlight: 1 - enableOnPressed: 1 - enableOnDisabled: 0 - isControllerButtonIcon: 0 - childButtons: - - {fileID: 6758813166262263795} - - {fileID: 3109181258600622993} ---- !u!114 &5346609901548097609 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5346609901548097612} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 78a172db96e209b41a0f30a5676688e3, type: 3} - m_Name: - m_EditorClassIdentifier: - PercentPaddingHorizontal: 0.05 - PercentPaddingVertical: 0.25 - adjustHorizontally: 0 - adjustVertically: 1 - Viewport: {fileID: 5760055837242226404} - DefaultViewportContainer: {fileID: 5760055838395833916} - HorizontalViewportContainer: {fileID: 0} ---- !u!114 &8065266053913587260 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5346609901548097612} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 9e842de213b82ba4d90c8520c94f83b1, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &5367179396481162880 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6568531377770842912} - m_Layer: 5 - m_Name: Highlights - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 0 ---- !u!224 &6568531377770842912 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5367179396481162880} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 3957435482710495932} - - {fileID: 7839671431057247510} - m_Father: {fileID: 1103860912737953195} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &2079228338589458093 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5420402675149203750} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: edb10346a1dac1d41a69f1b9c914fbfd, type: 3} - m_Name: - m_EditorClassIdentifier: - color: 8 - colorScheme: {fileID: 0} - image: {fileID: 3566837209152023851} ---- !u!1 &5494528124479065311 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3494463204094689655} - m_Layer: 5 - m_Name: Highlights - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 0 ---- !u!224 &3494463204094689655 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5494528124479065311} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 5631570825590719846} - - {fileID: 6096481924973618296} - m_Father: {fileID: 4293101959910755915} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!1 &5520052216096794371 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2482191731014220696} - m_Layer: 5 - m_Name: Mod Row Panels - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &2482191731014220696 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5520052216096794371} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 4437617399257212789} - - {fileID: 3276554920018460687} - - {fileID: 1103860912737953195} - m_Father: {fileID: 1230197134381729914} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: -128, y: 301} - m_Pivot: {x: 0.5, y: 0} ---- !u!1 &5556574696940862768 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 479681365169336812} - - component: {fileID: 7912919166892577537} - - component: {fileID: 5747839885396506897} - - component: {fileID: 764427360637293203} - m_Layer: 5 - m_Name: Outline - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &479681365169336812 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5556574696940862768} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 2714744016542651328} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &7912919166892577537 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5556574696940862768} - m_CullTransparentMesh: 0 ---- !u!114 &5747839885396506897 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5556574696940862768} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.02745098, g: 0.75686276, b: 0.84705883, a: 1} - m_RaycastTarget: 0 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 21300000, guid: f60c6439d2c5aef4680dc039853db562, type: 3} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &764427360637293203 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5556574696940862768} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} - m_Name: - m_EditorClassIdentifier: - type: 4 ---- !u!1 &5746618046289893688 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7839671431057247510} - - component: {fileID: 6610656722942964461} - - component: {fileID: 934736042653034038} - - component: {fileID: 522720805008148458} - m_Layer: 5 - m_Name: Outline - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &7839671431057247510 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5746618046289893688} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 6568531377770842912} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &6610656722942964461 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5746618046289893688} - m_CullTransparentMesh: 0 ---- !u!114 &934736042653034038 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5746618046289893688} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.02745098, g: 0.75686276, b: 0.84705883, a: 1} - m_RaycastTarget: 0 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 21300000, guid: f60c6439d2c5aef4680dc039853db562, type: 3} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &522720805008148458 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5746618046289893688} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} - m_Name: - m_EditorClassIdentifier: - type: 4 ---- !u!1 &5760055837231720817 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5760055837231720816} - - component: {fileID: 5760055837231720831} - m_Layer: 5 - m_Name: RightMost - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &5760055837231720816 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055837231720817} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 5760055838897582319} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 1920, y: 0} - m_SizeDelta: {x: 906, y: 510} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &5760055837231720831 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055837231720817} - m_CullTransparentMesh: 0 ---- !u!1 &5760055837242226405 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5760055837242226404} - - component: {fileID: 2481775387260960443} - m_Layer: 5 - m_Name: Home - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &5760055837242226404 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055837242226405} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 5760055838456421178} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &2481775387260960443 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055837242226405} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f9a181712313aa74597d2fd0cad977f4, type: 3} - m_Name: - m_EditorClassIdentifier: - BrowserPanel: {fileID: 5760055837242226405} - BrowserPanelContent: {fileID: 5760055838395833916} - BrowserPanelModListRow_HighestRated: {fileID: 8148420632553304631} - BrowserPanelModListRow_Trending: {fileID: 961077494286650393} - BrowserPanelModListRow_MostPopular: {fileID: 2522303128527752034} - BrowserPanelModListRow_RecentlyAdded: {fileID: 2251121041795955683} - BrowserPanelHeaderBackground: {fileID: 0} - BrowserPanelContentScrollBar: {fileID: 5760055838370208910} - featuredSlotListItems: - - {fileID: 1712571296581473621} - - {fileID: 1712571297289990801} - - {fileID: 3789781511054597007} - - {fileID: 8159661877114048582} - - {fileID: 1712571296287095243} - featuredSlotPositions: - - {fileID: 5760055837362136015} - - {fileID: 5760055839057535352} - - {fileID: 5346609901548097613} - - {fileID: 5760055837879226655} - - {fileID: 5760055837231720816} - featuredSelectedName: {fileID: 3227478787108492110} - featuredSelectedSubscribeButtonText: {fileID: 5691231456873797393} - featuredSelectedMoreOptionsButtonPosition: {fileID: 6661404417012533100} - browserFeaturedSlotSelectionHighlightBorder: {fileID: 2960945230357676419} - browserFeaturedSlotBackplate: {fileID: 5760055838203041011} - browserFeaturedSlotInfo: {fileID: 2588865420982281680} - featuredOptionsButtons: {fileID: 5760055837487575705} - scrollRect: {fileID: 5760055838456421158} - browserFeaturedSlotSelection: {fileID: 5346609901548097610} ---- !u!1 &5760055837362136000 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5760055837362136015} - - component: {fileID: 5760055837362136014} - m_Layer: 5 - m_Name: LeftMost - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &5760055837362136015 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055837362136000} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 5760055838897582319} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: -1920, y: 0} - m_SizeDelta: {x: 906, y: 510} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &5760055837362136014 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055837362136000} - m_CullTransparentMesh: 0 ---- !u!1 &5760055837487575705 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5760055837487575704} - - component: {fileID: 5760055837487575687} - - component: {fileID: 4849105315695901175} - m_Layer: 5 - m_Name: Buttons - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &5760055837487575704 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055837487575705} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 4056221102521404262} - - {fileID: 6661404417012533100} - m_Father: {fileID: 1904005893992199385} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 1, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 1, y: 0.5} ---- !u!114 &5760055837487575687 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055837487575705} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_ChildAlignment: 4 - m_Spacing: 20 - m_ChildForceExpandWidth: 1 - m_ChildForceExpandHeight: 1 - m_ChildControlWidth: 0 - m_ChildControlHeight: 0 - m_ChildScaleWidth: 0 - m_ChildScaleHeight: 0 ---- !u!114 &4849105315695901175 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055837487575705} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} - m_Name: - m_EditorClassIdentifier: - m_HorizontalFit: 2 - m_VerticalFit: 0 ---- !u!1 &5760055837527483264 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5760055837527483279} - - component: {fileID: 5760055837527483278} - m_Layer: 5 - m_Name: Featured Rect - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &5760055837527483279 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055837527483264} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 5760055838203041013} - - {fileID: 5760055838067006261} - - {fileID: 5760055838803739576} - - {fileID: 5760055837684760253} - - {fileID: 1904005893992199385} - m_Father: {fileID: 5760055839024060862} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &5760055837527483278 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055837527483264} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3312d7739989d2b4e91e6319e9a96d76, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Padding: {x: 0, y: 0, z: 0, w: 0} - m_Softness: {x: 0, y: 0} ---- !u!1 &5760055837684760254 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5760055837684760253} - - component: {fileID: 5760055837684760250} - - component: {fileID: 5760055837684760251} - - component: {fileID: 5760055837684760252} - - component: {fileID: 3904946412240464002} - m_Layer: 5 - m_Name: Page Right - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &5760055837684760253 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055837684760254} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 2960945229545667046} - m_Father: {fileID: 5760055837527483279} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 920, y: 0} - m_SizeDelta: {x: 40, y: 40} - m_Pivot: {x: 1, y: 0.5} ---- !u!222 &5760055837684760250 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055837684760254} - m_CullTransparentMesh: 0 ---- !u!114 &5760055837684760251 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055837684760254} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 21300000, guid: de620a661822071448a42c3581ca6cdf, type: 3} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &5760055837684760252 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055837684760254} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 0 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Highlighted - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 5760055837684760251} - m_OnClick: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 2481775387260960443} - m_MethodName: PageFeaturedRow - m_Mode: 6 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 1 - m_CallState: 2 ---- !u!114 &3904946412240464002 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055837684760254} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d0b148fe25e99eb48b9724523833bab1, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Delegates: - - eventID: 0 - callback: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 0} - m_MethodName: PlayHover - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 - - eventID: 4 - callback: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 0} - m_MethodName: PlayClick - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 ---- !u!1 &5760055837879226640 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5760055837879226655} - - component: {fileID: 5760055837879226653} - - component: {fileID: 5760055837879226652} - - component: {fileID: 5760055837879226654} - m_Layer: 5 - m_Name: Right - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &5760055837879226655 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055837879226640} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 5760055838897582319} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 980, y: 0} - m_SizeDelta: {x: 906, y: 510} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &5760055837879226653 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055837879226640} - m_CullTransparentMesh: 0 ---- !u!114 &5760055837879226652 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055837879226640} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 0 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 0 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Highlighted - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 5760055837879226654} - m_OnClick: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 2481775387260960443} - m_MethodName: PageFeaturedRow - m_Mode: 6 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 1 - m_CallState: 2 ---- !u!114 &5760055837879226654 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055837879226640} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 0} - m_RaycastTarget: 1 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 0} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!1 &5760055837943744820 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5760055837943744819} - - component: {fileID: 5760055837943744817} - - component: {fileID: 5760055837943744818} - - component: {fileID: 388787987728770390} - m_Layer: 5 - m_Name: Featured mods > - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &5760055837943744819 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055837943744820} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 5760055839024060862} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 80, y: 0} - m_SizeDelta: {x: 283, y: 40} - m_Pivot: {x: 0, y: 1} ---- !u!222 &5760055837943744817 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055837943744820} - m_CullTransparentMesh: 0 ---- !u!114 &5760055837943744818 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055837943744820} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_text: Featured mods - m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 07eb140c74981ed4aab6d34ebb2e5737, type: 2} - m_sharedMaterial: {fileID: 21301536800525264, guid: 07eb140c74981ed4aab6d34ebb2e5737, - type: 2} - m_fontSharedMaterials: [] - m_fontMaterial: {fileID: 0} - m_fontMaterials: [] - m_fontColor32: - serializedVersion: 2 - rgba: 4294967295 - m_fontColor: {r: 1, g: 1, b: 1, a: 1} - m_enableVertexGradient: 0 - m_colorMode: 3 - m_fontColorGradient: - topLeft: {r: 1, g: 1, b: 1, a: 1} - topRight: {r: 1, g: 1, b: 1, a: 1} - bottomLeft: {r: 1, g: 1, b: 1, a: 1} - bottomRight: {r: 1, g: 1, b: 1, a: 1} - m_fontColorGradientPreset: {fileID: 0} - m_spriteAsset: {fileID: 0} - m_tintAllSprites: 0 - m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: -1183493901 - m_overrideHtmlColors: 0 - m_faceColor: - serializedVersion: 2 - rgba: 4294967295 - m_fontSize: 28 - m_fontSizeBase: 28 - m_fontWeight: 400 - m_enableAutoSizing: 0 - m_fontSizeMin: 18 - m_fontSizeMax: 72 - m_fontStyle: 0 - m_HorizontalAlignment: 1 - m_VerticalAlignment: 256 - m_textAlignment: 65535 - m_characterSpacing: 0 - m_wordSpacing: 0 - m_lineSpacing: 0 - m_lineSpacingMax: 0 - m_paragraphSpacing: 0 - m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 - m_wordWrappingRatios: 0.4 - m_overflowMode: 0 - m_linkedTextComponent: {fileID: 0} - parentLinkedComponent: {fileID: 0} - m_enableKerning: 1 - m_enableExtraPadding: 0 - checkPaddingRequired: 0 - m_isRichText: 1 - m_parseCtrlCharacters: 1 - m_isOrthographic: 1 - m_isCullingEnabled: 0 - m_horizontalMapping: 0 - m_verticalMapping: 0 - m_uvLineOffset: 0 - m_geometrySortingOrder: 0 - m_IsTextObjectScaleStatic: 0 - m_VertexBufferAutoSizeReduction: 1 - m_useMaxVisibleDescender: 1 - m_pageToDisplay: 1 - m_margin: {x: 0, y: 0, z: 0, w: 0} - m_isUsingLegacyAnimationComponent: 0 - m_isVolumetricText: 0 - m_hasFontAssetChanged: 0 - m_baseMaterial: {fileID: 0} - m_maskOffset: {x: 0, y: 0, z: 0, w: 0} ---- !u!114 &388787987728770390 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055837943744820} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} - m_Name: - m_EditorClassIdentifier: - reference: Featured mods - text: {fileID: 5760055837943744818} - translatedLanguageFontPairingOverrides: {fileID: 0} ---- !u!1 &5760055838030722349 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5760055838030722348} - - component: {fileID: 5760055838030722345} - - component: {fileID: 5760055838030722346} - - component: {fileID: 5760055838030722347} - m_Layer: 5 - m_Name: Handle - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &5760055838030722348 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055838030722349} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 5760055838385861465} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &5760055838030722345 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055838030722349} - m_CullTransparentMesh: 0 ---- !u!114 &5760055838030722346 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055838030722349} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.75686276, g: 0.76862746, b: 0.84313726, a: 1} - m_RaycastTarget: 0 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 21300000, guid: 2893e30b6b8e1d4499b8e78fc633923e, type: 3} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &5760055838030722347 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055838030722349} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} - m_Name: - m_EditorClassIdentifier: - type: 5 ---- !u!1 &5760055838067006262 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5760055838067006261} - m_Layer: 5 - m_Name: Featured List Items - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &5760055838067006261 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055838067006262} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 2401922753284782821} - - {fileID: 2401922753114184993} - - {fileID: 146680028341728319} - - {fileID: 5165047952197910518} - - {fileID: 2401922754124945019} - - {fileID: 5760055838897582319} - m_Father: {fileID: 5760055837527483279} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 1} - m_AnchorMax: {x: 0.5, y: 1} - m_AnchoredPosition: {x: 0, y: -36} - m_SizeDelta: {x: 1920, y: 540} - m_Pivot: {x: 0.5, y: 1} ---- !u!1 &5760055838203041014 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5760055838203041013} - - component: {fileID: 5760055838203041010} - - component: {fileID: 5760055838203041011} - - component: {fileID: 5760055838203041012} - m_Layer: 5 - m_Name: Featured Backplate - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &5760055838203041013 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055838203041014} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 5760055837527483279} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 1} - m_AnchorMax: {x: 0.5, y: 1} - m_AnchoredPosition: {x: 0, y: -20} - m_SizeDelta: {x: 992, y: 646} - m_Pivot: {x: 0.5, y: 1} ---- !u!222 &5760055838203041010 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055838203041014} - m_CullTransparentMesh: 0 ---- !u!114 &5760055838203041011 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055838203041014} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.05490196, g: 0.0627451, b: 0.105882354, a: 1} - m_RaycastTarget: 1 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 21300000, guid: 1d7a613ab4eb9984ca2ff61802b05e50, type: 3} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &5760055838203041012 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055838203041014} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} - m_Name: - m_EditorClassIdentifier: - type: 2 ---- !u!1 &5760055838370208896 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5760055838370208911} - - component: {fileID: 5760055838370208908} - - component: {fileID: 5760055838370208909} - - component: {fileID: 5760055838370208910} - m_Layer: 5 - m_Name: Scrollbar - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &5760055838370208911 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055838370208896} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 5760055838385861465} - m_Father: {fileID: 5760055838456421178} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 1, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: -8, y: -50.00049} - m_SizeDelta: {x: 8, y: -180} - m_Pivot: {x: 1, y: 0.5} ---- !u!222 &5760055838370208908 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055838370208896} - m_CullTransparentMesh: 0 ---- !u!114 &5760055838370208909 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055838370208896} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 0} - m_RaycastTarget: 0 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &5760055838370208910 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055838370208896} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 2a4db7a114972834c8e4117be1d82ba3, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 0 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Highlighted - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 5760055838030722346} - m_HandleRect: {fileID: 5760055838030722348} - m_Direction: 2 - m_Value: 1 - m_Size: 0.313105 - m_NumberOfSteps: 0 - m_OnValueChanged: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 2481775387260960443} - m_MethodName: OnScrollValueChange - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 ---- !u!1 &5760055838385861466 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5760055838385861465} - m_Layer: 5 - m_Name: Sliding Area - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &5760055838385861465 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055838385861466} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 5760055838030722348} - m_Father: {fileID: 5760055838370208911} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!1 &5760055838395833917 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5760055838395833916} - - component: {fileID: 5760055838395833915} - - component: {fileID: 5760055838395833914} - m_Layer: 5 - m_Name: Content - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &5760055838395833916 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055838395833917} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 9061634454445475437} - - {fileID: 5760055839024060862} - - {fileID: 1230197134381729914} - - {fileID: 7927652363544414619} - - {fileID: 6677660644696604223} - - {fileID: 5641179401900381504} - - {fileID: 5760055838864409643} - m_Father: {fileID: 5760055838456421178} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 1} ---- !u!114 &5760055838395833915 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055838395833917} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 164 - m_Bottom: 0 - m_ChildAlignment: 1 - m_Spacing: 64 - m_ChildForceExpandWidth: 1 - m_ChildForceExpandHeight: 1 - m_ChildControlWidth: 0 - m_ChildControlHeight: 0 - m_ChildScaleWidth: 0 - m_ChildScaleHeight: 0 ---- !u!114 &5760055838395833914 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055838395833917} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} - m_Name: - m_EditorClassIdentifier: - m_HorizontalFit: 0 - m_VerticalFit: 2 ---- !u!1 &5760055838456421179 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5760055838456421178} - - component: {fileID: 5760055838456421158} - - component: {fileID: 5760055838456421159} - - component: {fileID: 5760055838456421176} - - component: {fileID: 5760055838456421177} - m_Layer: 5 - m_Name: Main View - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &5760055838456421178 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055838456421179} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 5760055838395833916} - - {fileID: 5760055838370208911} - m_Father: {fileID: 5760055837242226404} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &5760055838456421158 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055838456421179} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1aa08ab6e0800fa44ae55d278d1423e3, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Content: {fileID: 5760055838395833916} - m_Horizontal: 0 - m_Vertical: 1 - m_MovementType: 2 - m_Elasticity: 0.1 - m_Inertia: 1 - m_DecelerationRate: 0.1 - m_ScrollSensitivity: 100 - m_Viewport: {fileID: 5760055838456421178} - m_HorizontalScrollbar: {fileID: 0} - m_VerticalScrollbar: {fileID: 5760055838370208910} - m_HorizontalScrollbarVisibility: 0 - m_VerticalScrollbarVisibility: 0 - m_HorizontalScrollbarSpacing: 0 - m_VerticalScrollbarSpacing: 0 - m_OnValueChanged: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 2481775387260960443} - m_MethodName: OnScrollValueChange - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 ---- !u!114 &5760055838456421159 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055838456421179} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3312d7739989d2b4e91e6319e9a96d76, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Padding: {x: 0, y: 0, z: 0, w: 0} - m_Softness: {x: 0, y: 0} ---- !u!222 &5760055838456421176 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055838456421179} - m_CullTransparentMesh: 0 ---- !u!114 &5760055838456421177 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055838456421179} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 0.003921569} - m_RaycastTarget: 1 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 0} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!1 &5760055838803739577 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5760055838803739576} - - component: {fileID: 5760055838803739557} - - component: {fileID: 5760055838803739558} - - component: {fileID: 5760055838803739559} - - component: {fileID: 8804625801360902364} - m_Layer: 5 - m_Name: Page Left - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &5760055838803739576 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055838803739577} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 2960945230977109645} - m_Father: {fileID: 5760055837527483279} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: -920, y: 0} - m_SizeDelta: {x: 40, y: 40} - m_Pivot: {x: 0, y: 0.5} ---- !u!222 &5760055838803739557 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055838803739577} - m_CullTransparentMesh: 0 ---- !u!114 &5760055838803739558 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055838803739577} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 21300000, guid: de620a661822071448a42c3581ca6cdf, type: 3} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &5760055838803739559 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055838803739577} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 0 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Highlighted - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 5760055838803739558} - m_OnClick: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 2481775387260960443} - m_MethodName: PageFeaturedRow - m_Mode: 6 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 ---- !u!114 &8804625801360902364 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055838803739577} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d0b148fe25e99eb48b9724523833bab1, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Delegates: - - eventID: 0 - callback: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 0} - m_MethodName: PlayHover - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 - - eventID: 4 - callback: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 0} - m_MethodName: PlayClick - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 ---- !u!1 &5760055838864409644 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5760055838864409643} - m_Layer: 5 - m_Name: Footer - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &5760055838864409643 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055838864409644} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 8600105461494756807} - m_Father: {fileID: 5760055838395833916} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 80} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!1 &5760055838897582304 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5760055838897582319} - m_Layer: 5 - m_Name: Featured Index Positions - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &5760055838897582319 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055838897582304} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 5760055837362136015} - - {fileID: 5760055839057535352} - - {fileID: 5346609901548097613} - - {fileID: 5760055837879226655} - - {fileID: 5760055837231720816} - m_Father: {fileID: 5760055838067006261} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 1} - m_AnchorMax: {x: 0.5, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 1920, y: 540} - m_Pivot: {x: 0.5, y: 1} ---- !u!1 &5760055839024060863 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5760055839024060862} - m_Layer: 5 - m_Name: Featured Row - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &5760055839024060862 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055839024060863} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 5760055837943744819} - - {fileID: 5760055837527483279} - m_Father: {fileID: 5760055838395833916} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 1920, y: 686} - m_Pivot: {x: 0.5, y: 1} ---- !u!1 &5760055839057535353 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5760055839057535352} - - component: {fileID: 5760055839057535334} - - component: {fileID: 5760055839057535333} - - component: {fileID: 5760055839057535335} - m_Layer: 5 - m_Name: Left - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &5760055839057535352 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055839057535353} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 5760055838897582319} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: -980, y: 0} - m_SizeDelta: {x: 906, y: 510} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &5760055839057535334 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055839057535353} - m_CullTransparentMesh: 0 ---- !u!114 &5760055839057535333 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055839057535353} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 0 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 0 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Highlighted - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 5760055839057535335} - m_OnClick: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 2481775387260960443} - m_MethodName: PageFeaturedRow - m_Mode: 6 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 ---- !u!114 &5760055839057535335 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5760055839057535353} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 0} - m_RaycastTarget: 1 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 0} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!1 &5789345133428465438 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1751632060915818272} - - component: {fileID: 1786240713247735334} - - component: {fileID: 6576051325308167545} - - component: {fileID: 5390375339313144390} - m_Layer: 5 - m_Name: Exclamation - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1751632060915818272 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5789345133428465438} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1401505348103715165} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 12, y: 32} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &1786240713247735334 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5789345133428465438} - m_CullTransparentMesh: 0 ---- !u!114 &6576051325308167545 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5789345133428465438} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 21300000, guid: bf3ef0ed793cec648b85261648c43e27, type: 3} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &5390375339313144390 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5789345133428465438} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} - m_Name: - m_EditorClassIdentifier: - type: 3 ---- !u!1 &5804057820792998972 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 126841961219918621} - - component: {fileID: 1141188336913183789} - - component: {fileID: 5779329535300732311} - m_Layer: 5 - m_Name: Content - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &126841961219918621 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5804057820792998972} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 9144147956179003390} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 0.000061035156, y: 0.000061035156} - m_SizeDelta: {x: 0, y: 300} - m_Pivot: {x: 0, y: 1} ---- !u!114 &1141188336913183789 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5804057820792998972} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Padding: - m_Left: 64 - m_Right: 64 - m_Top: 0 - m_Bottom: 0 - m_ChildAlignment: 0 - m_Spacing: 28 - m_ChildForceExpandWidth: 1 - m_ChildForceExpandHeight: 1 - m_ChildControlWidth: 0 - m_ChildControlHeight: 0 - m_ChildScaleWidth: 0 - m_ChildScaleHeight: 0 ---- !u!114 &5779329535300732311 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5804057820792998972} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} - m_Name: - m_EditorClassIdentifier: - m_HorizontalFit: 2 - m_VerticalFit: 0 ---- !u!1 &5816005563908331636 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5496364542001861773} - - component: {fileID: 3559016184031477060} - - component: {fileID: 6114259360687288236} - - component: {fileID: 4399013764041935350} - m_Layer: 5 - m_Name: arrow - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &5496364542001861773 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5816005563908331636} - m_LocalRotation: {x: 0, y: 0, z: 1, w: 0} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 2593279480392021872} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 180} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 10, y: 18} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &3559016184031477060 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5816005563908331636} - m_CullTransparentMesh: 0 ---- !u!114 &6114259360687288236 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5816005563908331636} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.05490196, g: 0.0627451, b: 0.105882354, a: 1} - m_RaycastTarget: 1 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 21300000, guid: 3b4f799ae62d42041ac993e0b2ef8ff5, type: 3} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &4399013764041935350 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5816005563908331636} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} - m_Name: - m_EditorClassIdentifier: - type: 2 ---- !u!1 &5827141898950107625 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3348216816584570355} - - component: {fileID: 1863393141006451123} - - component: {fileID: 3822325950947159988} - - component: {fileID: 6338540391755388299} - - component: {fileID: 8586183340922413435} - m_Layer: 5 - m_Name: Failed to fetch - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &3348216816584570355 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5827141898950107625} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 3235364141091716426} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0} - m_AnchorMax: {x: 0.5, y: 0} - m_AnchoredPosition: {x: 0, y: 132} - m_SizeDelta: {x: 194.59, y: 25.370003} - m_Pivot: {x: 0.5, y: 0} ---- !u!222 &1863393141006451123 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5827141898950107625} - m_CullTransparentMesh: 0 ---- !u!114 &3822325950947159988 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5827141898950107625} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_text: Failed to fetch mods - m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 07eb140c74981ed4aab6d34ebb2e5737, type: 2} - m_sharedMaterial: {fileID: 21301536800525264, guid: 07eb140c74981ed4aab6d34ebb2e5737, - type: 2} - m_fontSharedMaterials: [] - m_fontMaterial: {fileID: 0} - m_fontMaterials: [] - m_fontColor32: - serializedVersion: 2 - rgba: 4294967295 - m_fontColor: {r: 1, g: 1, b: 1, a: 1} - m_enableVertexGradient: 0 - m_colorMode: 3 - m_fontColorGradient: - topLeft: {r: 1, g: 1, b: 1, a: 1} - topRight: {r: 1, g: 1, b: 1, a: 1} - bottomLeft: {r: 1, g: 1, b: 1, a: 1} - bottomRight: {r: 1, g: 1, b: 1, a: 1} - m_fontColorGradientPreset: {fileID: 0} - m_spriteAsset: {fileID: 0} - m_tintAllSprites: 0 - m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: 0 - m_overrideHtmlColors: 0 - m_faceColor: - serializedVersion: 2 - rgba: 4294967295 - m_fontSize: 20 - m_fontSizeBase: 20 - m_fontWeight: 400 - m_enableAutoSizing: 0 - m_fontSizeMin: 18 - m_fontSizeMax: 72 - m_fontStyle: 0 - m_HorizontalAlignment: 1 - m_VerticalAlignment: 256 - m_textAlignment: 514 - m_characterSpacing: 0 - m_wordSpacing: 0 - m_lineSpacing: 0 - m_lineSpacingMax: 0 - m_paragraphSpacing: 0 - m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 - m_wordWrappingRatios: 0.4 - m_overflowMode: 0 - m_linkedTextComponent: {fileID: 0} - parentLinkedComponent: {fileID: 0} - m_enableKerning: 1 - m_enableExtraPadding: 0 - checkPaddingRequired: 0 - m_isRichText: 1 - m_parseCtrlCharacters: 1 - m_isOrthographic: 1 - m_isCullingEnabled: 0 - m_horizontalMapping: 0 - m_verticalMapping: 0 - m_uvLineOffset: 0 - m_geometrySortingOrder: 0 - m_IsTextObjectScaleStatic: 0 - m_VertexBufferAutoSizeReduction: 1 - m_useMaxVisibleDescender: 1 - m_pageToDisplay: 1 - m_margin: {x: 0, y: 0, z: 0, w: 0} - m_isUsingLegacyAnimationComponent: 0 - m_isVolumetricText: 0 - m_hasFontAssetChanged: 0 - m_baseMaterial: {fileID: 0} - m_maskOffset: {x: 0, y: 0, z: 0, w: 0} ---- !u!114 &6338540391755388299 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5827141898950107625} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} - m_Name: - m_EditorClassIdentifier: - m_HorizontalFit: 2 - m_VerticalFit: 2 ---- !u!114 &8586183340922413435 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5827141898950107625} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} - m_Name: - m_EditorClassIdentifier: - reference: Failed to fetch mods - text: {fileID: 3822325950947159988} - translatedLanguageFontPairingOverrides: {fileID: 0} ---- !u!114 &5582723225925148102 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6004666974532931693} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: edb10346a1dac1d41a69f1b9c914fbfd, type: 3} - m_Name: - m_EditorClassIdentifier: - color: 8 - colorScheme: {fileID: 0} - image: {fileID: 5178628546196477205} ---- !u!114 &762097077507522159 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6004666975669263159} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: edb10346a1dac1d41a69f1b9c914fbfd, type: 3} - m_Name: - m_EditorClassIdentifier: - color: 8 - colorScheme: {fileID: 0} - image: {fileID: 5178628547198721615} ---- !u!114 &5948634683712322172 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6004666975772622067} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: edb10346a1dac1d41a69f1b9c914fbfd, type: 3} - m_Name: - m_EditorClassIdentifier: - color: 8 - colorScheme: {fileID: 0} - image: {fileID: 5178628547027220875} ---- !u!114 &2960945229548237462 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6185195325434835825} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Highlighted - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 8756585969402851012} - m_OnClick: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 2449030627395505075} - m_MethodName: OpenModDetailsForThisModProfile - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 ---- !u!1 &6470082028241754767 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6096481924973618296} - - component: {fileID: 5898105387194535735} - - component: {fileID: 7538567955992291370} - - component: {fileID: 2918540887317537745} - m_Layer: 5 - m_Name: Outline - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &6096481924973618296 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6470082028241754767} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 3494463204094689655} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &5898105387194535735 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6470082028241754767} - m_CullTransparentMesh: 0 ---- !u!114 &7538567955992291370 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6470082028241754767} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.02745098, g: 0.75686276, b: 0.84705883, a: 1} - m_RaycastTarget: 0 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 21300000, guid: f60c6439d2c5aef4680dc039853db562, type: 3} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &2918540887317537745 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6470082028241754767} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} - m_Name: - m_EditorClassIdentifier: - type: 4 ---- !u!1 &6551494193765274311 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5968799625567422273} - - component: {fileID: 7519999191815108146} - - component: {fileID: 2736239428241544586} - - component: {fileID: 637484464769982025} - m_Layer: 5 - m_Name: Exclamation - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &5968799625567422273 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6551494193765274311} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 3782631751476734999} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 12, y: 32} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &7519999191815108146 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6551494193765274311} - m_CullTransparentMesh: 0 ---- !u!114 &2736239428241544586 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6551494193765274311} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 21300000, guid: bf3ef0ed793cec648b85261648c43e27, type: 3} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &637484464769982025 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6551494193765274311} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} - m_Name: - m_EditorClassIdentifier: - type: 3 ---- !u!1 &6728189216756022017 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7998808985149902515} - m_Layer: 5 - m_Name: Mod Row Panels - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &7998808985149902515 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6728189216756022017} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 3235364141091716426} - - {fileID: 6501039402507660445} - - {fileID: 9142932502483850576} - m_Father: {fileID: 7927652363544414619} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: -128, y: 301} - m_Pivot: {x: 0.5, y: 0} ---- !u!1 &6858159661338128569 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 435819020512209117} - - component: {fileID: 9155106753853680142} - - component: {fileID: 1990528596262118944} - - component: {fileID: 1500001961907796000} - - component: {fileID: 4937648187081177985} - m_Layer: 5 - m_Name: Page Right - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &435819020512209117 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6858159661338128569} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 7957012086486316792} - m_Father: {fileID: 4806150429029691436} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 1, y: 0.5} - m_AnchorMax: {x: 1, y: 0.5} - m_AnchoredPosition: {x: -40, y: 0} - m_SizeDelta: {x: 48, y: 48} - m_Pivot: {x: 1, y: 0.5} ---- !u!222 &9155106753853680142 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6858159661338128569} - m_CullTransparentMesh: 0 ---- !u!114 &1990528596262118944 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6858159661338128569} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 21300000, guid: de620a661822071448a42c3581ca6cdf, type: 3} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &1500001961907796000 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6858159661338128569} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 0 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Highlighted - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 1990528596262118944} - m_OnClick: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 2251121041795955683} - m_MethodName: SwipeRow - m_Mode: 6 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 1 - m_CallState: 2 ---- !u!114 &4937648187081177985 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6858159661338128569} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d0b148fe25e99eb48b9724523833bab1, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Delegates: - - eventID: 0 - callback: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 0} - m_MethodName: PlayHover - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 - - eventID: 4 - callback: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 0} - m_MethodName: PlayClick - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 ---- !u!1 &6958804181134327471 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7320064122044428091} - - component: {fileID: 3243911583827942615} - - component: {fileID: 1611259920501839651} - m_Layer: 5 - m_Name: Image - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &7320064122044428091 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6958804181134327471} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 8600105461494756807} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 32, y: 32} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &3243911583827942615 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6958804181134327471} - m_CullTransparentMesh: 0 ---- !u!114 &1611259920501839651 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6958804181134327471} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.02745098, g: 0.75686276, b: 0.84705883, a: 1} - m_RaycastTarget: 0 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 21300000, guid: c36e4922adf420842ad3738a5bb00a14, type: 3} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!1 &6970245048652602738 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1624031526298744626} - - component: {fileID: 7503463610766772197} - - component: {fileID: 4338456386790705458} - - component: {fileID: 6590103499955700473} - m_Layer: 5 - m_Name: Trending > - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1624031526298744626 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6970245048652602738} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 7927652363544414619} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 64, y: 0} - m_SizeDelta: {x: 283, y: 40} - m_Pivot: {x: 0, y: 1} ---- !u!222 &7503463610766772197 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6970245048652602738} - m_CullTransparentMesh: 0 ---- !u!114 &4338456386790705458 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6970245048652602738} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 0 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_text: Trending - m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 07eb140c74981ed4aab6d34ebb2e5737, type: 2} - m_sharedMaterial: {fileID: 21301536800525264, guid: 07eb140c74981ed4aab6d34ebb2e5737, - type: 2} - m_fontSharedMaterials: [] - m_fontMaterial: {fileID: 0} - m_fontMaterials: [] - m_fontColor32: - serializedVersion: 2 - rgba: 4294967295 - m_fontColor: {r: 1, g: 1, b: 1, a: 1} - m_enableVertexGradient: 0 - m_colorMode: 3 - m_fontColorGradient: - topLeft: {r: 1, g: 1, b: 1, a: 1} - topRight: {r: 1, g: 1, b: 1, a: 1} - bottomLeft: {r: 1, g: 1, b: 1, a: 1} - bottomRight: {r: 1, g: 1, b: 1, a: 1} - m_fontColorGradientPreset: {fileID: 0} - m_spriteAsset: {fileID: 0} - m_tintAllSprites: 0 - m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: -1183493901 - m_overrideHtmlColors: 0 - m_faceColor: - serializedVersion: 2 - rgba: 4294967295 - m_fontSize: 28 - m_fontSizeBase: 28 - m_fontWeight: 400 - m_enableAutoSizing: 0 - m_fontSizeMin: 18 - m_fontSizeMax: 72 - m_fontStyle: 0 - m_HorizontalAlignment: 1 - m_VerticalAlignment: 256 - m_textAlignment: 65535 - m_characterSpacing: 0 - m_wordSpacing: 0 - m_lineSpacing: 0 - m_lineSpacingMax: 0 - m_paragraphSpacing: 0 - m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 - m_wordWrappingRatios: 0.4 - m_overflowMode: 0 - m_linkedTextComponent: {fileID: 0} - parentLinkedComponent: {fileID: 0} - m_enableKerning: 1 - m_enableExtraPadding: 0 - checkPaddingRequired: 0 - m_isRichText: 1 - m_parseCtrlCharacters: 1 - m_isOrthographic: 1 - m_isCullingEnabled: 0 - m_horizontalMapping: 0 - m_verticalMapping: 0 - m_uvLineOffset: 0 - m_geometrySortingOrder: 0 - m_IsTextObjectScaleStatic: 0 - m_VertexBufferAutoSizeReduction: 1 - m_useMaxVisibleDescender: 1 - m_pageToDisplay: 1 - m_margin: {x: 0, y: 0, z: 0, w: 0} - m_isUsingLegacyAnimationComponent: 0 - m_isVolumetricText: 0 - m_hasFontAssetChanged: 0 - m_baseMaterial: {fileID: 0} - m_maskOffset: {x: 0, y: 0, z: 0, w: 0} ---- !u!114 &6590103499955700473 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6970245048652602738} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} - m_Name: - m_EditorClassIdentifier: - reference: Trending - text: {fileID: 4338456386790705458} - translatedLanguageFontPairingOverrides: {fileID: 0} ---- !u!1 &7000493217150169880 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6677660644696604223} - m_Layer: 5 - m_Name: ModRow_Most popular - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &6677660644696604223 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7000493217150169880} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 7670801858938926441} - - {fileID: 8641512021059779286} - - {fileID: 7775025196942318881} - m_Father: {fileID: 5760055838395833916} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 1920, y: 359} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!1 &7046131684741935659 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6914708581523774563} - - component: {fileID: 6201865373808570761} - - component: {fileID: 7025909234776504534} - - component: {fileID: 8708248776209235468} - m_Layer: 5 - m_Name: ErrorPanel - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 0 ---- !u!224 &6914708581523774563 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7046131684741935659} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 4910128418665223718} - - {fileID: 7768067448636396821} - - {fileID: 3809123786290613293} - m_Father: {fileID: 7224393530279423441} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &6201865373808570761 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7046131684741935659} - m_CullTransparentMesh: 0 ---- !u!114 &7025909234776504534 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7046131684741935659} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.05490196, g: 0.0627451, b: 0.105882354, a: 1} - m_RaycastTarget: 0 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 21300000, guid: c05eab6045e68c1449e9a85be63f1495, type: 3} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &8708248776209235468 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7046131684741935659} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} - m_Name: - m_EditorClassIdentifier: - type: 2 ---- !u!1 &7260892844688357895 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5105266302533462081} - - component: {fileID: 285959417149367952} - - component: {fileID: 7682678825094310565} - - component: {fileID: 3378671838576473904} - m_Layer: 5 - m_Name: arrow - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &5105266302533462081 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7260892844688357895} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 7410283501995677904} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 10, y: 18} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &285959417149367952 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7260892844688357895} - m_CullTransparentMesh: 0 ---- !u!114 &7682678825094310565 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7260892844688357895} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.05490196, g: 0.0627451, b: 0.105882354, a: 1} - m_RaycastTarget: 1 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 21300000, guid: 3b4f799ae62d42041ac993e0b2ef8ff5, type: 3} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &3378671838576473904 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7260892844688357895} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} - m_Name: - m_EditorClassIdentifier: - type: 2 ---- !u!1 &7350244591244291496 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7164317584136557773} - - component: {fileID: 6852057851942628879} - - component: {fileID: 5173510416939634720} - - component: {fileID: 8127986047100534342} - m_Layer: 5 - m_Name: arrow - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &7164317584136557773 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7350244591244291496} - m_LocalRotation: {x: 0, y: 0, z: 1, w: 0} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 4069555545533185230} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 180} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 10, y: 18} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &6852057851942628879 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7350244591244291496} - m_CullTransparentMesh: 0 ---- !u!114 &5173510416939634720 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7350244591244291496} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.05490196, g: 0.0627451, b: 0.105882354, a: 1} - m_RaycastTarget: 1 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 21300000, guid: 3b4f799ae62d42041ac993e0b2ef8ff5, type: 3} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &8127986047100534342 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7350244591244291496} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} - m_Name: - m_EditorClassIdentifier: - type: 2 ---- !u!1 &7480778162944276318 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7957012086486316792} - - component: {fileID: 57073405969563085} - - component: {fileID: 1593655339834263075} - - component: {fileID: 1751786305359861364} - m_Layer: 5 - m_Name: arrow - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &7957012086486316792 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7480778162944276318} - m_LocalRotation: {x: 0, y: 0, z: 1, w: 0} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 435819020512209117} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 180} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 10, y: 18} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &57073405969563085 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7480778162944276318} - m_CullTransparentMesh: 0 ---- !u!114 &1593655339834263075 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7480778162944276318} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.05490196, g: 0.0627451, b: 0.105882354, a: 1} - m_RaycastTarget: 1 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 21300000, guid: 3b4f799ae62d42041ac993e0b2ef8ff5, type: 3} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &1751786305359861364 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7480778162944276318} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} - m_Name: - m_EditorClassIdentifier: - type: 2 ---- !u!1 &7568424668732415792 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7400556031270052247} - - component: {fileID: 5007974329950115878} - - component: {fileID: 2666328831239230183} - - component: {fileID: 388757779518125694} - m_Layer: 5 - m_Name: Text (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &7400556031270052247 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7568424668732415792} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 8600105461494756807} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 130, y: 18} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &5007974329950115878 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7568424668732415792} - m_CullTransparentMesh: 0 ---- !u!114 &2666328831239230183 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7568424668732415792} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 0 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_text: Mod support by - m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 7357c164f341b0147a6115fd4f243f6b, type: 2} - m_sharedMaterial: {fileID: 21319758026491476, guid: 7357c164f341b0147a6115fd4f243f6b, - type: 2} - m_fontSharedMaterials: [] - m_fontMaterial: {fileID: 0} - m_fontMaterials: [] - m_fontColor32: - serializedVersion: 2 - rgba: 4292330689 - m_fontColor: {r: 0.75686276, g: 0.76862746, b: 0.84313726, a: 1} - m_enableVertexGradient: 0 - m_colorMode: 3 - m_fontColorGradient: - topLeft: {r: 1, g: 1, b: 1, a: 1} - topRight: {r: 1, g: 1, b: 1, a: 1} - bottomLeft: {r: 1, g: 1, b: 1, a: 1} - bottomRight: {r: 1, g: 1, b: 1, a: 1} - m_fontColorGradientPreset: {fileID: 0} - m_spriteAsset: {fileID: 0} - m_tintAllSprites: 0 - m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: -1183493901 - m_overrideHtmlColors: 0 - m_faceColor: - serializedVersion: 2 - rgba: 4294967295 - m_fontSize: 16 - m_fontSizeBase: 16 - m_fontWeight: 400 - m_enableAutoSizing: 0 - m_fontSizeMin: 18 - m_fontSizeMax: 72 - m_fontStyle: 0 - m_HorizontalAlignment: 2 - m_VerticalAlignment: 512 - m_textAlignment: 65535 - m_characterSpacing: 0 - m_wordSpacing: 0 - m_lineSpacing: 0 - m_lineSpacingMax: 0 - m_paragraphSpacing: 0 - m_charWidthMaxAdj: 0 - m_enableWordWrapping: 0 - m_wordWrappingRatios: 0.4 - m_overflowMode: 0 - m_linkedTextComponent: {fileID: 0} - parentLinkedComponent: {fileID: 0} - m_enableKerning: 1 - m_enableExtraPadding: 0 - checkPaddingRequired: 0 - m_isRichText: 1 - m_parseCtrlCharacters: 1 - m_isOrthographic: 1 - m_isCullingEnabled: 0 - m_horizontalMapping: 0 - m_verticalMapping: 0 - m_uvLineOffset: 0 - m_geometrySortingOrder: 0 - m_IsTextObjectScaleStatic: 0 - m_VertexBufferAutoSizeReduction: 1 - m_useMaxVisibleDescender: 1 - m_pageToDisplay: 1 - m_margin: {x: 0, y: 0, z: 0, w: 0} - m_isUsingLegacyAnimationComponent: 0 - m_isVolumetricText: 0 - m_hasFontAssetChanged: 0 - m_baseMaterial: {fileID: 0} - m_maskOffset: {x: 0, y: 0, z: 0, w: 0} ---- !u!114 &388757779518125694 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7568424668732415792} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} - m_Name: - m_EditorClassIdentifier: - type: 5 ---- !u!1 &7654624249032854811 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1513457552958644243} - - component: {fileID: 5353104926853468334} - - component: {fileID: 9193140308264717574} - - component: {fileID: 8156251311170559818} - m_Layer: 5 - m_Name: arrow - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1513457552958644243 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7654624249032854811} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 3290575739898776701} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 10, y: 18} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &5353104926853468334 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7654624249032854811} - m_CullTransparentMesh: 0 ---- !u!114 &9193140308264717574 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7654624249032854811} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.05490196, g: 0.0627451, b: 0.105882354, a: 1} - m_RaycastTarget: 1 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 21300000, guid: 3b4f799ae62d42041ac993e0b2ef8ff5, type: 3} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &8156251311170559818 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7654624249032854811} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} - m_Name: - m_EditorClassIdentifier: - type: 2 ---- !u!1 &7677036235723793262 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1664098654755114668} - - component: {fileID: 2079353304605004878} - - component: {fileID: 6573323893487487196} - - component: {fileID: 1244961684183644020} - - component: {fileID: 1641677791321614757} - m_Layer: 5 - m_Name: Failed to fetch - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1664098654755114668 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7677036235723793262} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 8041509762575082362} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0} - m_AnchorMax: {x: 0.5, y: 0} - m_AnchoredPosition: {x: 0, y: 132} - m_SizeDelta: {x: 194.59, y: 25.370003} - m_Pivot: {x: 0.5, y: 0} ---- !u!222 &2079353304605004878 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7677036235723793262} - m_CullTransparentMesh: 0 ---- !u!114 &6573323893487487196 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7677036235723793262} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_text: Failed to fetch mods - m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 07eb140c74981ed4aab6d34ebb2e5737, type: 2} - m_sharedMaterial: {fileID: 21301536800525264, guid: 07eb140c74981ed4aab6d34ebb2e5737, - type: 2} - m_fontSharedMaterials: [] - m_fontMaterial: {fileID: 0} - m_fontMaterials: [] - m_fontColor32: - serializedVersion: 2 - rgba: 4294967295 - m_fontColor: {r: 1, g: 1, b: 1, a: 1} - m_enableVertexGradient: 0 - m_colorMode: 3 - m_fontColorGradient: - topLeft: {r: 1, g: 1, b: 1, a: 1} - topRight: {r: 1, g: 1, b: 1, a: 1} - bottomLeft: {r: 1, g: 1, b: 1, a: 1} - bottomRight: {r: 1, g: 1, b: 1, a: 1} - m_fontColorGradientPreset: {fileID: 0} - m_spriteAsset: {fileID: 0} - m_tintAllSprites: 0 - m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: 0 - m_overrideHtmlColors: 0 - m_faceColor: - serializedVersion: 2 - rgba: 4294967295 - m_fontSize: 20 - m_fontSizeBase: 20 - m_fontWeight: 400 - m_enableAutoSizing: 0 - m_fontSizeMin: 18 - m_fontSizeMax: 72 - m_fontStyle: 0 - m_HorizontalAlignment: 1 - m_VerticalAlignment: 256 - m_textAlignment: 514 - m_characterSpacing: 0 - m_wordSpacing: 0 - m_lineSpacing: 0 - m_lineSpacingMax: 0 - m_paragraphSpacing: 0 - m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 - m_wordWrappingRatios: 0.4 - m_overflowMode: 0 - m_linkedTextComponent: {fileID: 0} - parentLinkedComponent: {fileID: 0} - m_enableKerning: 1 - m_enableExtraPadding: 0 - checkPaddingRequired: 0 - m_isRichText: 1 - m_parseCtrlCharacters: 1 - m_isOrthographic: 1 - m_isCullingEnabled: 0 - m_horizontalMapping: 0 - m_verticalMapping: 0 - m_uvLineOffset: 0 - m_geometrySortingOrder: 0 - m_IsTextObjectScaleStatic: 0 - m_VertexBufferAutoSizeReduction: 1 - m_useMaxVisibleDescender: 1 - m_pageToDisplay: 1 - m_margin: {x: 0, y: 0, z: 0, w: 0} - m_isUsingLegacyAnimationComponent: 0 - m_isVolumetricText: 0 - m_hasFontAssetChanged: 0 - m_baseMaterial: {fileID: 0} - m_maskOffset: {x: 0, y: 0, z: 0, w: 0} ---- !u!114 &1244961684183644020 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7677036235723793262} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} - m_Name: - m_EditorClassIdentifier: - m_HorizontalFit: 2 - m_VerticalFit: 2 ---- !u!114 &1641677791321614757 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7677036235723793262} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} - m_Name: - m_EditorClassIdentifier: - reference: Failed to fetch mods - text: {fileID: 6573323893487487196} - translatedLanguageFontPairingOverrides: {fileID: 0} ---- !u!1 &7761927191435843120 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2714744016542651328} - m_Layer: 5 - m_Name: Highlights - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 0 ---- !u!224 &2714744016542651328 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7761927191435843120} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 4174226357644456727} - - {fileID: 479681365169336812} - m_Father: {fileID: 9142932502483850576} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!1 &7850747361532961066 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3290575739898776701} - - component: {fileID: 3708585115004107790} - - component: {fileID: 7383234840435636631} - - component: {fileID: 7867082591680879536} - - component: {fileID: 4664961308672960731} - m_Layer: 5 - m_Name: Page Left - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &3290575739898776701 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7850747361532961066} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 1513457552958644243} - m_Father: {fileID: 9205084670609649368} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0.5} - m_AnchorMax: {x: 0, y: 0.5} - m_AnchoredPosition: {x: 40, y: 0} - m_SizeDelta: {x: 48, y: 48} - m_Pivot: {x: 0, y: 0.5} ---- !u!222 &3708585115004107790 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7850747361532961066} - m_CullTransparentMesh: 0 ---- !u!114 &7383234840435636631 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7850747361532961066} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 21300000, guid: de620a661822071448a42c3581ca6cdf, type: 3} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &7867082591680879536 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7850747361532961066} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 0 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Highlighted - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 7383234840435636631} - m_OnClick: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 961077494286650393} - m_MethodName: SwipeRow - m_Mode: 6 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 ---- !u!114 &4664961308672960731 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7850747361532961066} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d0b148fe25e99eb48b9724523833bab1, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Delegates: - - eventID: 0 - callback: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 0} - m_MethodName: PlayHover - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 - - eventID: 4 - callback: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 0} - m_MethodName: PlayClick - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 ---- !u!1 &7923603635805538967 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 3276554920018460687} - - component: {fileID: 7404621394306933416} - - component: {fileID: 1208090450898607754} - - component: {fileID: 8387828397140033858} - m_Layer: 5 - m_Name: LoadingPanel - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 0 ---- !u!224 &3276554920018460687 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7923603635805538967} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 4572481533955290054} - m_Father: {fileID: 2482191731014220696} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &7404621394306933416 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7923603635805538967} - m_CullTransparentMesh: 0 ---- !u!114 &1208090450898607754 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7923603635805538967} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.05490196, g: 0.0627451, b: 0.105882354, a: 1} - m_RaycastTarget: 0 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 21300000, guid: c05eab6045e68c1449e9a85be63f1495, type: 3} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &8387828397140033858 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7923603635805538967} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} - m_Name: - m_EditorClassIdentifier: - type: 2 ---- !u!1 &7938089249200574224 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2116367503642066428} - - component: {fileID: 8335913957185539974} - - component: {fileID: 3768161416618134728} - - component: {fileID: 5325017955118404512} - m_Layer: 5 - m_Name: arrow - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &2116367503642066428 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7938089249200574224} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 3485997611994867574} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 10, y: 18} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &8335913957185539974 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7938089249200574224} - m_CullTransparentMesh: 0 ---- !u!114 &3768161416618134728 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7938089249200574224} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.05490196, g: 0.0627451, b: 0.105882354, a: 1} - m_RaycastTarget: 1 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 21300000, guid: 3b4f799ae62d42041ac993e0b2ef8ff5, type: 3} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &5325017955118404512 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7938089249200574224} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} - m_Name: - m_EditorClassIdentifier: - type: 2 ---- !u!114 &3016909722375194229 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8072869995420742185} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: edb10346a1dac1d41a69f1b9c914fbfd, type: 3} - m_Name: - m_EditorClassIdentifier: - color: 8 - colorScheme: {fileID: 0} - image: {fileID: 7242469383006943057} ---- !u!114 &6044816181354508990 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8647640806741456545} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: edb10346a1dac1d41a69f1b9c914fbfd, type: 3} - m_Name: - m_EditorClassIdentifier: - color: 8 - colorScheme: {fileID: 0} - image: {fileID: 7820611297380938713} ---- !u!1 &8917182276175077081 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8041509762575082362} - - component: {fileID: 4990111275128904987} - - component: {fileID: 8504139325111461145} - - component: {fileID: 5206016459764628226} - m_Layer: 5 - m_Name: ErrorPanel - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 0 ---- !u!224 &8041509762575082362 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8917182276175077081} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 3782631751476734999} - - {fileID: 1664098654755114668} - - {fileID: 6992487807974688419} - m_Father: {fileID: 7775025196942318881} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &4990111275128904987 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8917182276175077081} - m_CullTransparentMesh: 0 ---- !u!114 &8504139325111461145 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8917182276175077081} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.05490196, g: 0.0627451, b: 0.105882354, a: 1} - m_RaycastTarget: 0 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 21300000, guid: c05eab6045e68c1449e9a85be63f1495, type: 3} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &5206016459764628226 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8917182276175077081} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} - m_Name: - m_EditorClassIdentifier: - type: 2 ---- !u!114 &5885099853580143000 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8920798156313719407} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} - m_Name: - m_EditorClassIdentifier: - reference: More options - text: {fileID: 8920798156313719405} - translatedLanguageFontPairingOverrides: {fileID: 0} ---- !u!1 &9007992486970540322 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8913687650595004255} - - component: {fileID: 2888907606410802720} - - component: {fileID: 6310678568168818378} - - component: {fileID: 4548620718517461500} - m_Layer: 5 - m_Name: LoadingPanel - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 0 ---- !u!224 &8913687650595004255 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9007992486970540322} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 4767083568656321468} - m_Father: {fileID: 7224393530279423441} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &2888907606410802720 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9007992486970540322} - m_CullTransparentMesh: 0 ---- !u!114 &6310678568168818378 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9007992486970540322} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.05490196, g: 0.0627451, b: 0.105882354, a: 1} - m_RaycastTarget: 0 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 21300000, guid: c05eab6045e68c1449e9a85be63f1495, type: 3} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &4548620718517461500 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9007992486970540322} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} - m_Name: - m_EditorClassIdentifier: - type: 2 ---- !u!1 &9057478845284533333 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 9142932502483850576} - - component: {fileID: 4668995753238682046} - - component: {fileID: 961077494286650393} - - component: {fileID: 126850650622171940} - - component: {fileID: 8076003954540550152} - m_Layer: 5 - m_Name: RowSelectable - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &9142932502483850576 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9057478845284533333} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 2714744016542651328} - m_Father: {fileID: 7998808985149902515} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &4668995753238682046 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9057478845284533333} - m_CullTransparentMesh: 0 ---- !u!114 &961077494286650393 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9057478845284533333} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 7c24c539ef8622a49a05be42a385d095, type: 3} - m_Name: - m_EditorClassIdentifier: - ErrorPanel: {fileID: 1927207057109629574} - LoadingPanel: {fileID: 1338792742464149430} - RowPanel: {fileID: 2476207998803975479} - MainSelectableHighlights: {fileID: 7761927191435843120} - ModListItemPrefab: {fileID: 3616021901904687619, guid: 6dab28ac97efe3645a00cfa31697b3e0, - type: 3} - ModListItemContainer: {fileID: 7844501160337624107} - AboveSelection: {fileID: 936357247105290562} - BelowSelection: {fileID: 6820534038293358429} ---- !u!114 &126850650622171940 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9057478845284533333} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d5ce6686d7065cf4986b2ed3e2773c96, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 4 - m_SelectOnUp: {fileID: 936357247105290562} - m_SelectOnDown: {fileID: 6820534038293358429} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 0} - m_HighlightedColor: {r: 1, g: 1, b: 1, a: 1} - m_PressedColor: {r: 1, g: 1, b: 1, a: 1} - m_SelectedColor: {r: 1, g: 1, b: 1, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Highlighted - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 5747839885396506897} - m_OnClick: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 961077494286650393} - m_MethodName: RetryGetMods - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 - scheme: {fileID: 0} - extraTargets: - - target: {fileID: 7608431339814648936} - transition: 1 - colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 0} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 1, g: 1, b: 1, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - colorSchemeBlock: - Normal: 6 - NormalColorAlpha: 1 - Highlighted: 4 - HighlightedColorAlpha: 1 - Pressed: 4 - PressedColorAlpha: 1 - Disabled: 2 - DisabledColorAlpha: 1 - ColorMultiplier: 1 - FadeDuration: 0.1 - spriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_SelectedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - animationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_SelectedTrigger: Highlighted - m_DisabledTrigger: Disabled - animator: {fileID: 0} - enableOnNormal: 0 - enableOnHighlight: 1 - enableOnPressed: 1 - enableOnDisabled: 0 - isControllerButtonIcon: 0 - childButtons: - - {fileID: 4380556625283861586} ---- !u!114 &8076003954540550152 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9057478845284533333} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 78a172db96e209b41a0f30a5676688e3, type: 3} - m_Name: - m_EditorClassIdentifier: - PercentPaddingHorizontal: 0.05 - PercentPaddingVertical: 0.25 - adjustHorizontally: 0 - adjustVertically: 1 - Viewport: {fileID: 5760055837242226404} - DefaultViewportContainer: {fileID: 5760055838395833916} - HorizontalViewportContainer: {fileID: 0} ---- !u!1 &9199711342294974878 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8103583356223253937} - - component: {fileID: 6669722855109062111} - - component: {fileID: 4897917125442554111} - - component: {fileID: 5207041807206620523} - - component: {fileID: 7041225697667395692} - m_Layer: 5 - m_Name: Failed to fetch - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &8103583356223253937 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9199711342294974878} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 4437617399257212789} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0} - m_AnchorMax: {x: 0.5, y: 0} - m_AnchoredPosition: {x: 0, y: 132} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0} ---- !u!222 &6669722855109062111 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9199711342294974878} - m_CullTransparentMesh: 0 ---- !u!114 &4897917125442554111 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9199711342294974878} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_text: Failed to fetch mods - m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 07eb140c74981ed4aab6d34ebb2e5737, type: 2} - m_sharedMaterial: {fileID: 21301536800525264, guid: 07eb140c74981ed4aab6d34ebb2e5737, - type: 2} - m_fontSharedMaterials: [] - m_fontMaterial: {fileID: 0} - m_fontMaterials: [] - m_fontColor32: - serializedVersion: 2 - rgba: 4294967295 - m_fontColor: {r: 1, g: 1, b: 1, a: 1} - m_enableVertexGradient: 0 - m_colorMode: 3 - m_fontColorGradient: - topLeft: {r: 1, g: 1, b: 1, a: 1} - topRight: {r: 1, g: 1, b: 1, a: 1} - bottomLeft: {r: 1, g: 1, b: 1, a: 1} - bottomRight: {r: 1, g: 1, b: 1, a: 1} - m_fontColorGradientPreset: {fileID: 0} - m_spriteAsset: {fileID: 0} - m_tintAllSprites: 0 - m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: 0 - m_overrideHtmlColors: 0 - m_faceColor: - serializedVersion: 2 - rgba: 4294967295 - m_fontSize: 20 - m_fontSizeBase: 20 - m_fontWeight: 400 - m_enableAutoSizing: 0 - m_fontSizeMin: 18 - m_fontSizeMax: 72 - m_fontStyle: 0 - m_HorizontalAlignment: 1 - m_VerticalAlignment: 256 - m_textAlignment: 514 - m_characterSpacing: 0 - m_wordSpacing: 0 - m_lineSpacing: 0 - m_lineSpacingMax: 0 - m_paragraphSpacing: 0 - m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 - m_wordWrappingRatios: 0.4 - m_overflowMode: 0 - m_linkedTextComponent: {fileID: 0} - parentLinkedComponent: {fileID: 0} - m_enableKerning: 1 - m_enableExtraPadding: 0 - checkPaddingRequired: 0 - m_isRichText: 1 - m_parseCtrlCharacters: 1 - m_isOrthographic: 1 - m_isCullingEnabled: 0 - m_horizontalMapping: 0 - m_verticalMapping: 0 - m_uvLineOffset: 0 - m_geometrySortingOrder: 0 - m_IsTextObjectScaleStatic: 0 - m_VertexBufferAutoSizeReduction: 1 - m_useMaxVisibleDescender: 1 - m_pageToDisplay: 1 - m_margin: {x: 0, y: 0, z: 0, w: 0} - m_isUsingLegacyAnimationComponent: 0 - m_isVolumetricText: 0 - m_hasFontAssetChanged: 0 - m_baseMaterial: {fileID: 0} - m_maskOffset: {x: 0, y: 0, z: 0, w: 0} ---- !u!114 &5207041807206620523 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9199711342294974878} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} - m_Name: - m_EditorClassIdentifier: - m_HorizontalFit: 2 - m_VerticalFit: 2 ---- !u!114 &7041225697667395692 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 9199711342294974878} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} - m_Name: - m_EditorClassIdentifier: - reference: Failed to fetch mods - text: {fileID: 4897917125442554111} - translatedLanguageFontPairingOverrides: {fileID: 0} ---- !u!1001 &576397482866874263 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 4437617399257212789} - m_Modifications: - - target: {fileID: 1798871725, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} - propertyPath: m_text - value: LS - objectReference: {fileID: 0} - - target: {fileID: 1798871725, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} - propertyPath: m_textInfo.lineCount - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1798871725, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} - propertyPath: m_textInfo.pageCount - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1798871725, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} - propertyPath: m_textInfo.wordCount - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1798871725, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} - propertyPath: m_textInfo.characterCount - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 2112189428, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} - propertyPath: m_IsActive - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 2112189429, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} - propertyPath: m_AnchorMax.y - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 2112189429, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} - propertyPath: m_AnchorMin.y - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 2112189429, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} - propertyPath: m_AnchoredPosition.x - value: 167.265 - objectReference: {fileID: 0} - - target: {fileID: 2112189429, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} - propertyPath: m_AnchoredPosition.y - value: -20 - objectReference: {fileID: 0} - - target: {fileID: 398439637101619662, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_text - value: Retry all failed fetches - objectReference: {fileID: 0} - - target: {fileID: 398439637101619662, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_textInfo.lineCount - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 398439637101619662, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_textInfo.pageCount - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 398439637101619662, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_textInfo.wordCount - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 398439637101619662, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_textInfo.spaceCount - value: 3 - objectReference: {fileID: 0} - - target: {fileID: 398439637101619662, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_textInfo.characterCount - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1635082254379573548, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: scheme - value: - objectReference: {fileID: 0} - - target: {fileID: 1635082254379573548, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_Navigation.m_Mode - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1635082254379573548, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target - value: - objectReference: {fileID: 8148420632553304631} - - target: {fileID: 1635082254379573548, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName - value: RetryGetMods - objectReference: {fileID: 0} - - target: {fileID: 2574403931799077613, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_AnchorMax.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 2574403931799077613, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_AnchorMin.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 2574403931799077613, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_SizeDelta.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 2574403931799077613, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_SizeDelta.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 2574403931799077613, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_AnchoredPosition.x - value: 100.5 - objectReference: {fileID: 0} - - target: {fileID: 2574403931799077613, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_AnchoredPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6442999689545999158, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_Name - value: Button with Cue Variant - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_Pivot.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_Pivot.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_RootOrder - value: 2 - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_AnchorMax.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_AnchorMax.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_AnchorMin.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_AnchorMin.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_SizeDelta.x - value: 201 - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_SizeDelta.y - value: 40 - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_LocalRotation.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_LocalRotation.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_LocalRotation.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_AnchoredPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_AnchoredPosition.y - value: 68 - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} ---- !u!1 &590683819935674035 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 1138638543927884068, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - m_PrefabInstance: {fileID: 576397482866874263} - m_PrefabAsset: {fileID: 0} ---- !u!114 &1247282491650438843 stripped -MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 1635082254379573548, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - m_PrefabInstance: {fileID: 576397482866874263} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d5ce6686d7065cf4986b2ed3e2773c96, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!224 &8415410797451387438 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - m_PrefabInstance: {fileID: 576397482866874263} - m_PrefabAsset: {fileID: 0} ---- !u!114 &177976614780747353 stripped -MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 398439637101619662, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - m_PrefabInstance: {fileID: 576397482866874263} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 590683819935674035} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1001 &1118649038973274318 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 8913687650595004255} - m_Modifications: - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_Pivot.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_Pivot.y - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_RootOrder - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_AnchorMax.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_AnchorMax.y - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_AnchorMin.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_AnchorMin.y - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_SizeDelta.x - value: 101 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_SizeDelta.y - value: 24 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_LocalRotation.x - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_LocalRotation.y - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_LocalRotation.z - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_AnchoredPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_AnchoredPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8497503018571144132, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_Name - value: Loading Icon - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: d5fdf02cff5c92349853772a91817fbc, type: 3} ---- !u!224 &4767083568656321468 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - m_PrefabInstance: {fileID: 1118649038973274318} - m_PrefabAsset: {fileID: 0} ---- !u!1001 &1313928908180222746 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 8041509762575082362} - m_Modifications: - - target: {fileID: 1798871725, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} - propertyPath: m_text - value: LS - objectReference: {fileID: 0} - - target: {fileID: 1798871725, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} - propertyPath: m_textInfo.lineCount - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 1798871725, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} - propertyPath: m_textInfo.pageCount - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 1798871725, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} - propertyPath: m_textInfo.wordCount - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 1798871725, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} - propertyPath: m_textInfo.characterCount - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 2112189428, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} - propertyPath: m_IsActive - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 2112189429, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} - propertyPath: m_AnchorMax.y - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 2112189429, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} - propertyPath: m_AnchorMin.y - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 2112189429, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} - propertyPath: m_AnchoredPosition.x - value: 167.265 - objectReference: {fileID: 0} - - target: {fileID: 2112189429, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} - propertyPath: m_AnchoredPosition.y - value: -20 - objectReference: {fileID: 0} - - target: {fileID: 398439637101619662, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_text - value: Retry all failed fetches - objectReference: {fileID: 0} - - target: {fileID: 398439637101619662, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_textInfo.lineCount - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 398439637101619662, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_textInfo.pageCount - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 398439637101619662, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_textInfo.wordCount - value: 4 - objectReference: {fileID: 0} - - target: {fileID: 398439637101619662, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_textInfo.spaceCount - value: 3 - objectReference: {fileID: 0} - - target: {fileID: 398439637101619662, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_textInfo.characterCount - value: 24 - objectReference: {fileID: 0} - - target: {fileID: 1635082254379573548, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: scheme - value: - objectReference: {fileID: 0} - - target: {fileID: 1635082254379573548, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_Navigation.m_Mode - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1635082254379573548, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target - value: - objectReference: {fileID: 2522303128527752034} - - target: {fileID: 1635082254379573548, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName - value: RetryGetMods - objectReference: {fileID: 0} - - target: {fileID: 2574403931799077613, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_AnchorMax.y - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 2574403931799077613, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_AnchorMin.y - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 2574403931799077613, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_SizeDelta.x - value: 130.06 - objectReference: {fileID: 0} - - target: {fileID: 2574403931799077613, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_SizeDelta.y - value: 15.22 - objectReference: {fileID: 0} - - target: {fileID: 2574403931799077613, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_AnchoredPosition.x - value: 100.5 - objectReference: {fileID: 0} - - target: {fileID: 2574403931799077613, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_AnchoredPosition.y - value: -20 - objectReference: {fileID: 0} - - target: {fileID: 6442999689545999158, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_Name - value: Button with Cue Variant - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_Pivot.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_Pivot.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_RootOrder - value: 2 - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_AnchorMax.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_AnchorMax.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_AnchorMin.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_AnchorMin.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_SizeDelta.x - value: 201 - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_SizeDelta.y - value: 40 - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_LocalRotation.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_LocalRotation.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_LocalRotation.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_AnchoredPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_AnchoredPosition.y - value: 68 - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} ---- !u!114 &1710112062607350484 stripped -MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 398439637101619662, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - m_PrefabInstance: {fileID: 1313928908180222746} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2157579194019695166} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &2157579194019695166 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 1138638543927884068, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - m_PrefabInstance: {fileID: 1313928908180222746} - m_PrefabAsset: {fileID: 0} ---- !u!114 &327911496839598646 stripped -MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 1635082254379573548, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - m_PrefabInstance: {fileID: 1313928908180222746} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d5ce6686d7065cf4986b2ed3e2773c96, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!224 &6992487807974688419 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - m_PrefabInstance: {fileID: 1313928908180222746} - m_PrefabAsset: {fileID: 0} ---- !u!1001 &1901678705630357912 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 6501039402507660445} - m_Modifications: - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_Pivot.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_Pivot.y - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_RootOrder - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_AnchorMax.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_AnchorMax.y - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_AnchorMin.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_AnchorMin.y - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_SizeDelta.x - value: 101 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_SizeDelta.y - value: 24 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_LocalRotation.x - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_LocalRotation.y - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_LocalRotation.z - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_AnchoredPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_AnchoredPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8497503018571144132, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_Name - value: Loading Icon - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: d5fdf02cff5c92349853772a91817fbc, type: 3} ---- !u!224 &6325928916897540842 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - m_PrefabInstance: {fileID: 1901678705630357912} - m_PrefabAsset: {fileID: 0} ---- !u!1001 &2960945229119092631 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 5760055838067006261} - m_Modifications: - - target: {fileID: 80111883152325677, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - propertyPath: m_AnchorMax.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 80111883152325677, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - propertyPath: m_AnchorMin.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 80111883152325677, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - propertyPath: m_AnchoredPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 80111883152325677, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - propertyPath: m_AnchoredPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 590529543902333711, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - propertyPath: m_RaycastTarget - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 2162522345605876853, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - propertyPath: m_AnchorMax.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 2162522345605876853, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - propertyPath: m_AnchorMin.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 2162522345605876853, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - propertyPath: m_AnchoredPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 2162522345605876853, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - propertyPath: m_AnchoredPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3585144004920789393, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - propertyPath: m_Color.b - value: 0.7607843 - objectReference: {fileID: 0} - - target: {fileID: 3585144004920789393, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - propertyPath: m_Color.g - value: 0.69411767 - objectReference: {fileID: 0} - - target: {fileID: 3585144004920789393, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - propertyPath: m_Color.r - value: 0.68235296 - objectReference: {fileID: 0} - - target: {fileID: 3585144004920789393, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - propertyPath: m_RaycastTarget - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 4580715859929486334, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - propertyPath: m_RaycastTarget - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 5384421881642650634, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - propertyPath: m_SizeDelta.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 5461561580308136585, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - propertyPath: m_RaycastTarget - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6263590729001574840, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - propertyPath: m_RaycastTarget - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6353333058533976017, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - propertyPath: scheme - value: - objectReference: {fileID: 0} - - target: {fileID: 6353333058533976017, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - propertyPath: rowIndex - value: 3 - objectReference: {fileID: 0} - - target: {fileID: 6353333058533976017, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - propertyPath: profileIndex - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 6485702370369012655, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - propertyPath: m_RaycastTarget - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6835143412918618022, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - propertyPath: m_RaycastTarget - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 7978843899110051886, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - propertyPath: m_RaycastTarget - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 7978843899359299680, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - propertyPath: m_Name - value: BrowserModListItem_Featured - objectReference: {fileID: 0} - - target: {fileID: 7978843899359299681, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - propertyPath: m_Pivot.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 7978843899359299681, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - propertyPath: m_Pivot.y - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 7978843899359299681, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - propertyPath: m_RootOrder - value: 3 - objectReference: {fileID: 0} - - target: {fileID: 7978843899359299681, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - propertyPath: m_AnchorMax.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 7978843899359299681, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - propertyPath: m_AnchorMax.y - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 7978843899359299681, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - propertyPath: m_AnchorMin.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 7978843899359299681, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - propertyPath: m_AnchorMin.y - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 7978843899359299681, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - propertyPath: m_SizeDelta.x - value: 906 - objectReference: {fileID: 0} - - target: {fileID: 7978843899359299681, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - propertyPath: m_SizeDelta.y - value: 510 - objectReference: {fileID: 0} - - target: {fileID: 7978843899359299681, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 7978843899359299681, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 7978843899359299681, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 7978843899359299681, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 7978843899359299681, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - propertyPath: m_LocalRotation.x - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 7978843899359299681, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - propertyPath: m_LocalRotation.y - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 7978843899359299681, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - propertyPath: m_LocalRotation.z - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 7978843899359299681, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - propertyPath: m_AnchoredPosition.x - value: 980 - objectReference: {fileID: 0} - - target: {fileID: 7978843899359299681, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - propertyPath: m_AnchoredPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 7978843899359299681, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 7978843899359299681, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 7978843899359299681, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8203825838756300506, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - propertyPath: m_Color.b - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 8203825838756300506, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - propertyPath: m_Color.g - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 8203825838756300506, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - propertyPath: m_Color.r - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 9025299317110473926, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - propertyPath: m_RaycastTarget - value: 0 - objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 7274536023900411211, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} - - {fileID: 2395107722392766565, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} - m_SourcePrefab: {fileID: 100100000, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} ---- !u!224 &5165047952197910518 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 7978843899359299681, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - m_PrefabInstance: {fileID: 2960945229119092631} - m_PrefabAsset: {fileID: 0} ---- !u!1 &3867584340805876192 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 2070257837969182327, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - m_PrefabInstance: {fileID: 2960945229119092631} - m_PrefabAsset: {fileID: 0} ---- !u!1 &5420402675149203750 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 7074662966819266225, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - m_PrefabInstance: {fileID: 2960945229119092631} - m_PrefabAsset: {fileID: 0} ---- !u!114 &3566837209152023851 stripped -MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 1758814485367298748, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - m_PrefabInstance: {fileID: 2960945229119092631} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5420402675149203750} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!114 &2388764337699028120 stripped -MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 590529543902333711, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - m_PrefabInstance: {fileID: 2960945229119092631} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3867584340805876192} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!114 &8159661877114048582 stripped -MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 6353333058533976017, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - m_PrefabInstance: {fileID: 2960945229119092631} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a89e843efc4975840844b6f3376f59fc, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1001 &3060802529698884990 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 3235364141091716426} - m_Modifications: - - target: {fileID: 1798871725, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} - propertyPath: m_text - value: LS - objectReference: {fileID: 0} - - target: {fileID: 1798871725, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} - propertyPath: m_textInfo.lineCount - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 1798871725, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} - propertyPath: m_textInfo.pageCount - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 1798871725, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} - propertyPath: m_textInfo.wordCount - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 1798871725, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} - propertyPath: m_textInfo.characterCount - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 2112189428, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} - propertyPath: m_IsActive - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 2112189429, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} - propertyPath: m_AnchorMax.y - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 2112189429, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} - propertyPath: m_AnchorMin.y - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 2112189429, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} - propertyPath: m_AnchoredPosition.x - value: 167.265 - objectReference: {fileID: 0} - - target: {fileID: 2112189429, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} - propertyPath: m_AnchoredPosition.y - value: -20 - objectReference: {fileID: 0} - - target: {fileID: 398439637101619662, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_text - value: Retry all failed fetches - objectReference: {fileID: 0} - - target: {fileID: 398439637101619662, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_textInfo.lineCount - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 398439637101619662, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_textInfo.pageCount - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 398439637101619662, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_textInfo.wordCount - value: 4 - objectReference: {fileID: 0} - - target: {fileID: 398439637101619662, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_textInfo.spaceCount - value: 3 - objectReference: {fileID: 0} - - target: {fileID: 398439637101619662, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_textInfo.characterCount - value: 24 - objectReference: {fileID: 0} - - target: {fileID: 1635082254379573548, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: scheme - value: - objectReference: {fileID: 0} - - target: {fileID: 1635082254379573548, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_Navigation.m_Mode - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1635082254379573548, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target - value: - objectReference: {fileID: 961077494286650393} - - target: {fileID: 1635082254379573548, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName - value: RetryGetMods - objectReference: {fileID: 0} - - target: {fileID: 2574403931799077613, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_AnchorMax.y - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 2574403931799077613, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_AnchorMin.y - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 2574403931799077613, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_SizeDelta.x - value: 130.06 - objectReference: {fileID: 0} - - target: {fileID: 2574403931799077613, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_SizeDelta.y - value: 15.22 - objectReference: {fileID: 0} - - target: {fileID: 2574403931799077613, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_AnchoredPosition.x - value: 100.5 - objectReference: {fileID: 0} - - target: {fileID: 2574403931799077613, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_AnchoredPosition.y - value: -20 - objectReference: {fileID: 0} - - target: {fileID: 6442999689545999158, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_Name - value: Button with Cue Variant - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_Pivot.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_Pivot.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_RootOrder - value: 2 - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_AnchorMax.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7568424668732415792} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} + m_Name: + m_EditorClassIdentifier: + type: 5 +--- !u!1001 &2960945229119092631 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 5760055838067006261} + m_Modifications: + - target: {fileID: 80111883152325677, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} propertyPath: m_AnchorMax.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_AnchorMin.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + - target: {fileID: 80111883152325677, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} propertyPath: m_AnchorMin.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_SizeDelta.x - value: 201 - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_SizeDelta.y - value: 40 - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + - target: {fileID: 80111883152325677, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} - propertyPath: m_LocalPosition.y + propertyPath: m_AnchoredPosition.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + - target: {fileID: 80111883152325677, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} - propertyPath: m_LocalPosition.z + propertyPath: m_AnchoredPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + - target: {fileID: 590529543902333711, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} - propertyPath: m_LocalRotation.x + propertyPath: m_RaycastTarget value: 0 objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + - target: {fileID: 2162522345605876853, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} - propertyPath: m_LocalRotation.y + propertyPath: m_AnchorMax.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + - target: {fileID: 2162522345605876853, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} - propertyPath: m_LocalRotation.z + propertyPath: m_AnchorMin.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + - target: {fileID: 2162522345605876853, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} propertyPath: m_AnchoredPosition.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + - target: {fileID: 2162522345605876853, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} propertyPath: m_AnchoredPosition.y - value: 68 - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + - target: {fileID: 3585144004920789393, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} ---- !u!114 &3458110382779991216 stripped -MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 398439637101619662, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - m_PrefabInstance: {fileID: 3060802529698884990} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2717753144887088218} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &2717753144887088218 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 1138638543927884068, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - m_PrefabInstance: {fileID: 3060802529698884990} - m_PrefabAsset: {fileID: 0} ---- !u!114 &4380556625283861586 stripped -MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 1635082254379573548, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - m_PrefabInstance: {fileID: 3060802529698884990} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d5ce6686d7065cf4986b2ed3e2773c96, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!224 &6434634874148591815 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - m_PrefabInstance: {fileID: 3060802529698884990} - m_PrefabAsset: {fileID: 0} ---- !u!1001 &5182222716198058388 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 6914708581523774563} - m_Modifications: - - target: {fileID: 1798871725, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} - propertyPath: m_text - value: LS - objectReference: {fileID: 0} - - target: {fileID: 1798871725, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} - propertyPath: m_textInfo.lineCount - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 1798871725, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} - propertyPath: m_textInfo.pageCount - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 1798871725, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} - propertyPath: m_textInfo.wordCount - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 1798871725, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} - propertyPath: m_textInfo.characterCount - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 2112189428, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} - propertyPath: m_IsActive - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 2112189429, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} - propertyPath: m_AnchorMax.y - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 2112189429, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} - propertyPath: m_AnchorMin.y - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 2112189429, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} - propertyPath: m_AnchoredPosition.x - value: 167.265 - objectReference: {fileID: 0} - - target: {fileID: 2112189429, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} - propertyPath: m_AnchoredPosition.y - value: -20 + propertyPath: m_Color.b + value: 0.7607843 objectReference: {fileID: 0} - - target: {fileID: 398439637101619662, guid: 3d63c60c076ced34294aeaf91358d462, + - target: {fileID: 3585144004920789393, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} - propertyPath: m_text - value: Retry all failed fetches + propertyPath: m_Color.g + value: 0.69411767 objectReference: {fileID: 0} - - target: {fileID: 398439637101619662, guid: 3d63c60c076ced34294aeaf91358d462, + - target: {fileID: 3585144004920789393, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} - propertyPath: m_textInfo.lineCount - value: 1 + propertyPath: m_Color.r + value: 0.68235296 objectReference: {fileID: 0} - - target: {fileID: 398439637101619662, guid: 3d63c60c076ced34294aeaf91358d462, + - target: {fileID: 3585144004920789393, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} - propertyPath: m_textInfo.pageCount - value: 1 + propertyPath: m_RaycastTarget + value: 0 objectReference: {fileID: 0} - - target: {fileID: 398439637101619662, guid: 3d63c60c076ced34294aeaf91358d462, + - target: {fileID: 4580715859929486334, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} - propertyPath: m_textInfo.wordCount - value: 4 + propertyPath: m_RaycastTarget + value: 0 objectReference: {fileID: 0} - - target: {fileID: 398439637101619662, guid: 3d63c60c076ced34294aeaf91358d462, + - target: {fileID: 5384421881642650634, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} - propertyPath: m_textInfo.spaceCount - value: 3 + propertyPath: m_SizeDelta.x + value: 0 objectReference: {fileID: 0} - - target: {fileID: 398439637101619662, guid: 3d63c60c076ced34294aeaf91358d462, + - target: {fileID: 5461561580308136585, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} - propertyPath: m_textInfo.characterCount - value: 24 + propertyPath: m_RaycastTarget + value: 0 objectReference: {fileID: 0} - - target: {fileID: 1635082254379573548, guid: 3d63c60c076ced34294aeaf91358d462, + - target: {fileID: 5800346156525401733, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} - propertyPath: scheme - value: + propertyPath: m_IsActive + value: 0 objectReference: {fileID: 0} - - target: {fileID: 1635082254379573548, guid: 3d63c60c076ced34294aeaf91358d462, + - target: {fileID: 6263590729001574840, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} - propertyPath: m_Navigation.m_Mode + propertyPath: m_RaycastTarget value: 0 objectReference: {fileID: 0} - - target: {fileID: 1635082254379573548, guid: 3d63c60c076ced34294aeaf91358d462, + - target: {fileID: 6353333058533976017, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} - propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target + propertyPath: scheme value: - objectReference: {fileID: 2251121041795955683} - - target: {fileID: 1635082254379573548, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName - value: RetryGetMods objectReference: {fileID: 0} - - target: {fileID: 2574403931799077613, guid: 3d63c60c076ced34294aeaf91358d462, + - target: {fileID: 6353333058533976017, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} - propertyPath: m_AnchorMax.y - value: 1 + propertyPath: rowIndex + value: 3 objectReference: {fileID: 0} - - target: {fileID: 2574403931799077613, guid: 3d63c60c076ced34294aeaf91358d462, + - target: {fileID: 6353333058533976017, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} - propertyPath: m_AnchorMin.y + propertyPath: profileIndex value: 1 objectReference: {fileID: 0} - - target: {fileID: 2574403931799077613, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - propertyPath: m_SizeDelta.x - value: 130.06 - objectReference: {fileID: 0} - - target: {fileID: 2574403931799077613, guid: 3d63c60c076ced34294aeaf91358d462, + - target: {fileID: 6485702370369012655, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} - propertyPath: m_SizeDelta.y - value: 15.22 + propertyPath: m_RaycastTarget + value: 0 objectReference: {fileID: 0} - - target: {fileID: 2574403931799077613, guid: 3d63c60c076ced34294aeaf91358d462, + - target: {fileID: 6835143412918618022, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} - propertyPath: m_AnchoredPosition.x - value: 100.5 + propertyPath: m_RaycastTarget + value: 0 objectReference: {fileID: 0} - - target: {fileID: 2574403931799077613, guid: 3d63c60c076ced34294aeaf91358d462, + - target: {fileID: 7978843899110051886, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} - propertyPath: m_AnchoredPosition.y - value: -20 + propertyPath: m_RaycastTarget + value: 0 objectReference: {fileID: 0} - - target: {fileID: 6442999689545999158, guid: 3d63c60c076ced34294aeaf91358d462, + - target: {fileID: 7978843899359299680, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} propertyPath: m_Name - value: Button with Cue Variant + value: BrowserModListItem_Featured 4 objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + - target: {fileID: 7978843899359299681, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} propertyPath: m_Pivot.x value: 0.5 objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + - target: {fileID: 7978843899359299681, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} propertyPath: m_Pivot.y - value: 0 + value: 0.5 objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + - target: {fileID: 7978843899359299681, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} propertyPath: m_RootOrder - value: 2 + value: 3 objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + - target: {fileID: 7978843899359299681, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} propertyPath: m_AnchorMax.x value: 0.5 objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + - target: {fileID: 7978843899359299681, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} propertyPath: m_AnchorMax.y - value: 0 + value: 0.5 objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + - target: {fileID: 7978843899359299681, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} propertyPath: m_AnchorMin.x value: 0.5 objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + - target: {fileID: 7978843899359299681, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} propertyPath: m_AnchorMin.y - value: 0 + value: 0.5 objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + - target: {fileID: 7978843899359299681, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} propertyPath: m_SizeDelta.x - value: 201 + value: 906 objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + - target: {fileID: 7978843899359299681, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} propertyPath: m_SizeDelta.y - value: 40 + value: 510 objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + - target: {fileID: 7978843899359299681, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + - target: {fileID: 7978843899359299681, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + - target: {fileID: 7978843899359299681, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + - target: {fileID: 7978843899359299681, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + - target: {fileID: 7978843899359299681, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} propertyPath: m_LocalRotation.x - value: 0 + value: -0 objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + - target: {fileID: 7978843899359299681, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} propertyPath: m_LocalRotation.y - value: 0 + value: -0 objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + - target: {fileID: 7978843899359299681, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} propertyPath: m_LocalRotation.z - value: 0 + value: -0 objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + - target: {fileID: 7978843899359299681, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} propertyPath: m_AnchoredPosition.x - value: 0 + value: 980 objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + - target: {fileID: 7978843899359299681, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} propertyPath: m_AnchoredPosition.y - value: 68 + value: 0 objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + - target: {fileID: 7978843899359299681, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + - target: {fileID: 7978843899359299681, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + - target: {fileID: 7978843899359299681, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} ---- !u!224 &3809123786290613293 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + - target: {fileID: 8203825838756300506, guid: 6b73fb45c04f95140b44e918b7f02337, + type: 3} + propertyPath: m_Color.b + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8203825838756300506, guid: 6b73fb45c04f95140b44e918b7f02337, + type: 3} + propertyPath: m_Color.g + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8203825838756300506, guid: 6b73fb45c04f95140b44e918b7f02337, + type: 3} + propertyPath: m_Color.r + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 9025299317110473926, guid: 6b73fb45c04f95140b44e918b7f02337, + type: 3} + propertyPath: m_RaycastTarget + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: + - {fileID: 7274536023900411211, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} + - {fileID: 2395107722392766565, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} + m_SourcePrefab: {fileID: 100100000, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} +--- !u!1 &5420402675149203750 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 7074662966819266225, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} - m_PrefabInstance: {fileID: 5182222716198058388} + m_PrefabInstance: {fileID: 2960945229119092631} m_PrefabAsset: {fileID: 0} ---- !u!114 &5862014079134537912 stripped +--- !u!114 &3566837209152023851 stripped MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 1635082254379573548, guid: 3d63c60c076ced34294aeaf91358d462, + m_CorrespondingSourceObject: {fileID: 1758814485367298748, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} - m_PrefabInstance: {fileID: 5182222716198058388} + m_PrefabInstance: {fileID: 2960945229119092631} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} + m_GameObject: {fileID: 5420402675149203750} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d5ce6686d7065cf4986b2ed3e2773c96, type: 3} + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &2388764337699028120 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 590529543902333711, guid: 6b73fb45c04f95140b44e918b7f02337, + type: 3} + m_PrefabInstance: {fileID: 2960945229119092631} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3867584340805876192} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!1 &5199324008714223792 stripped +--- !u!1 &3867584340805876192 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 1138638543927884068, guid: 3d63c60c076ced34294aeaf91358d462, + m_CorrespondingSourceObject: {fileID: 2070257837969182327, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} - m_PrefabInstance: {fileID: 5182222716198058388} + m_PrefabInstance: {fileID: 2960945229119092631} m_PrefabAsset: {fileID: 0} ---- !u!114 &4786621237777485914 stripped +--- !u!114 &8159661877114048582 stripped MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 398439637101619662, guid: 3d63c60c076ced34294aeaf91358d462, + m_CorrespondingSourceObject: {fileID: 6353333058533976017, guid: 6b73fb45c04f95140b44e918b7f02337, + type: 3} + m_PrefabInstance: {fileID: 2960945229119092631} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a89e843efc4975840844b6f3376f59fc, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!224 &5165047952197910518 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 7978843899359299681, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} - m_PrefabInstance: {fileID: 5182222716198058388} + m_PrefabInstance: {fileID: 2960945229119092631} + m_PrefabAsset: {fileID: 0} +--- !u!114 &1695487116257317269 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5199324008714223792} + m_GameObject: {fileID: 3867584340805876192} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Script: {fileID: 11500000, guid: edb10346a1dac1d41a69f1b9c914fbfd, type: 3} + m_Name: + m_EditorClassIdentifier: + color: 8 + colorScheme: {fileID: 0} + image: {fileID: 2388764337699028120} +--- !u!114 &2079228338589458093 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5420402675149203750} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: edb10346a1dac1d41a69f1b9c914fbfd, type: 3} m_Name: m_EditorClassIdentifier: + color: 8 + colorScheme: {fileID: 0} + image: {fileID: 3566837209152023851} --- !u!1001 &5439462583199170271 PrefabInstance: m_ObjectHideFlags: 0 @@ -12198,22 +3261,16 @@ RectTransform: type: 3} m_PrefabInstance: {fileID: 5439462583199170271} m_PrefabAsset: {fileID: 0} ---- !u!1 &4949908849466198011 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 1138638543927884068, guid: 3d63c60c076ced34294aeaf91358d462, - type: 3} - m_PrefabInstance: {fileID: 5439462583199170271} - m_PrefabAsset: {fileID: 0} ---- !u!114 &5691231456873797393 stripped +--- !u!114 &5790463146231801133 stripped MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 398439637101619662, guid: 3d63c60c076ced34294aeaf91358d462, + m_CorrespondingSourceObject: {fileID: 1956534672024296434, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} m_PrefabInstance: {fileID: 5439462583199170271} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4949908849466198011} + m_GameObject: {fileID: 0} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: --- !u!114 &6758813166262263795 stripped @@ -12228,18 +3285,39 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d5ce6686d7065cf4986b2ed3e2773c96, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!114 &5790463146231801133 stripped +--- !u!114 &5691231456873797393 stripped MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 1956534672024296434, guid: 3d63c60c076ced34294aeaf91358d462, + m_CorrespondingSourceObject: {fileID: 398439637101619662, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} m_PrefabInstance: {fileID: 5439462583199170271} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} + m_GameObject: {fileID: 4949908849466198011} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &4949908849466198011 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 1138638543927884068, guid: 3d63c60c076ced34294aeaf91358d462, + type: 3} + m_PrefabInstance: {fileID: 5439462583199170271} + m_PrefabAsset: {fileID: 0} +--- !u!114 &3822552800568194711 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4949908849466198011} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} m_Name: m_EditorClassIdentifier: + reference: Subscribe + text: {fileID: 5691231456873797393} + translatedLanguageFontPairingOverrides: {fileID: 0} --- !u!1001 &5760055837304107652 PrefabInstance: m_ObjectHideFlags: 0 @@ -12327,6 +3405,11 @@ PrefabInstance: propertyPath: m_RaycastTarget value: 0 objectReference: {fileID: 0} + - target: {fileID: 5800346156525401733, guid: 6b73fb45c04f95140b44e918b7f02337, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} - target: {fileID: 6263590729001574840, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} propertyPath: m_RaycastTarget @@ -12365,7 +3448,7 @@ PrefabInstance: - target: {fileID: 7978843899359299680, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} propertyPath: m_Name - value: BrowserModListItem_Featured (2) + value: BrowserModListItem_Featured 1 objectReference: {fileID: 0} - target: {fileID: 7978843899359299681, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} @@ -12496,21 +3579,21 @@ PrefabInstance: - {fileID: 7274536023900411211, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} - {fileID: 2395107722392766565, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} m_SourcePrefab: {fileID: 100100000, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} ---- !u!114 &1712571296581473621 stripped +--- !u!114 &5178628547027220875 stripped MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 6353333058533976017, guid: 6b73fb45c04f95140b44e918b7f02337, + m_CorrespondingSourceObject: {fileID: 590529543902333711, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} m_PrefabInstance: {fileID: 5760055837304107652} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} + m_GameObject: {fileID: 6004666975772622067} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a89e843efc4975840844b6f3376f59fc, type: 3} + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!224 &2401922753284782821 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 7978843899359299681, guid: 6b73fb45c04f95140b44e918b7f02337, +--- !u!1 &3297079371091848245 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 7074662966819266225, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} m_PrefabInstance: {fileID: 5760055837304107652} m_PrefabAsset: {fileID: 0} @@ -12526,30 +3609,60 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!1 &3297079371091848245 stripped +--- !u!1 &6004666975772622067 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 7074662966819266225, guid: 6b73fb45c04f95140b44e918b7f02337, + m_CorrespondingSourceObject: {fileID: 2070257837969182327, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} m_PrefabInstance: {fileID: 5760055837304107652} m_PrefabAsset: {fileID: 0} ---- !u!114 &5178628547027220875 stripped +--- !u!114 &1712571296581473621 stripped MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 590529543902333711, guid: 6b73fb45c04f95140b44e918b7f02337, + m_CorrespondingSourceObject: {fileID: 6353333058533976017, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} m_PrefabInstance: {fileID: 5760055837304107652} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6004666975772622067} + m_GameObject: {fileID: 0} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Script: {fileID: 11500000, guid: a89e843efc4975840844b6f3376f59fc, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!1 &6004666975772622067 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 2070257837969182327, guid: 6b73fb45c04f95140b44e918b7f02337, +--- !u!224 &2401922753284782821 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 7978843899359299681, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} m_PrefabInstance: {fileID: 5760055837304107652} m_PrefabAsset: {fileID: 0} +--- !u!114 &6720307159234867504 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3297079371091848245} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: edb10346a1dac1d41a69f1b9c914fbfd, type: 3} + m_Name: + m_EditorClassIdentifier: + color: 8 + colorScheme: {fileID: 0} + image: {fileID: 6307084778903185464} +--- !u!114 &5948634683712322172 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6004666975772622067} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: edb10346a1dac1d41a69f1b9c914fbfd, type: 3} + m_Name: + m_EditorClassIdentifier: + color: 8 + colorScheme: {fileID: 0} + image: {fileID: 5178628547027220875} --- !u!1001 &5760055837738800448 PrefabInstance: m_ObjectHideFlags: 0 @@ -12637,6 +3750,11 @@ PrefabInstance: propertyPath: m_RaycastTarget value: 0 objectReference: {fileID: 0} + - target: {fileID: 5800346156525401733, guid: 6b73fb45c04f95140b44e918b7f02337, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} - target: {fileID: 6263590729001574840, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} propertyPath: m_RaycastTarget @@ -12675,7 +3793,7 @@ PrefabInstance: - target: {fileID: 7978843899359299680, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} propertyPath: m_Name - value: BrowserModListItem_Featured (3) + value: BrowserModListItem_Featured 2 objectReference: {fileID: 0} - target: {fileID: 7978843899359299680, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} @@ -12811,12 +3929,24 @@ PrefabInstance: - {fileID: 7274536023900411211, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} - {fileID: 2395107722392766565, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} m_SourcePrefab: {fileID: 100100000, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} ---- !u!1 &6004666975669263159 stripped +--- !u!1 &3297079370921380849 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 2070257837969182327, guid: 6b73fb45c04f95140b44e918b7f02337, + m_CorrespondingSourceObject: {fileID: 7074662966819266225, guid: 6b73fb45c04f95140b44e918b7f02337, + type: 3} + m_PrefabInstance: {fileID: 5760055837738800448} + m_PrefabAsset: {fileID: 0} +--- !u!114 &6307084778738225148 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 1758814485367298748, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} m_PrefabInstance: {fileID: 5760055837738800448} m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3297079370921380849} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!224 &2401922753114184993 stripped RectTransform: m_CorrespondingSourceObject: {fileID: 7978843899359299681, guid: 6b73fb45c04f95140b44e918b7f02337, @@ -12847,24 +3977,42 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!1 &3297079370921380849 stripped +--- !u!1 &6004666975669263159 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 7074662966819266225, guid: 6b73fb45c04f95140b44e918b7f02337, + m_CorrespondingSourceObject: {fileID: 2070257837969182327, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} m_PrefabInstance: {fileID: 5760055837738800448} m_PrefabAsset: {fileID: 0} ---- !u!114 &6307084778738225148 stripped +--- !u!114 &6538474542240260110 MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 1758814485367298748, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - m_PrefabInstance: {fileID: 5760055837738800448} + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 3297079370921380849} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Script: {fileID: 11500000, guid: edb10346a1dac1d41a69f1b9c914fbfd, type: 3} + m_Name: + m_EditorClassIdentifier: + color: 8 + colorScheme: {fileID: 0} + image: {fileID: 6307084778738225148} +--- !u!114 &762097077507522159 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6004666975669263159} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: edb10346a1dac1d41a69f1b9c914fbfd, type: 3} m_Name: m_EditorClassIdentifier: + color: 8 + colorScheme: {fileID: 0} + image: {fileID: 5178628547198721615} --- !u!1001 &5760055838732525082 PrefabInstance: m_ObjectHideFlags: 0 @@ -12952,6 +4100,11 @@ PrefabInstance: propertyPath: m_RaycastTarget value: 0 objectReference: {fileID: 0} + - target: {fileID: 5800346156525401733, guid: 6b73fb45c04f95140b44e918b7f02337, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} - target: {fileID: 6263590729001574840, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} propertyPath: m_RaycastTarget @@ -12990,7 +4143,7 @@ PrefabInstance: - target: {fileID: 7978843899359299680, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} propertyPath: m_Name - value: BrowserModListItem_Featured (1) + value: BrowserModListItem_Featured 5 objectReference: {fileID: 0} - target: {fileID: 7978843899359299681, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} @@ -13121,12 +4274,30 @@ PrefabInstance: - {fileID: 7274536023900411211, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} - {fileID: 2395107722392766565, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} m_SourcePrefab: {fileID: 100100000, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} +--- !u!114 &6307084779731813542 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 1758814485367298748, guid: 6b73fb45c04f95140b44e918b7f02337, + type: 3} + m_PrefabInstance: {fileID: 5760055838732525082} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3297079371940921515} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!224 &2401922754124945019 stripped RectTransform: m_CorrespondingSourceObject: {fileID: 7978843899359299681, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} m_PrefabInstance: {fileID: 5760055838732525082} m_PrefabAsset: {fileID: 0} +--- !u!1 &3297079371940921515 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 7074662966819266225, guid: 6b73fb45c04f95140b44e918b7f02337, + type: 3} + m_PrefabInstance: {fileID: 5760055838732525082} + m_PrefabAsset: {fileID: 0} --- !u!114 &5178628546196477205 stripped MonoBehaviour: m_CorrespondingSourceObject: {fileID: 590529543902333711, guid: 6b73fb45c04f95140b44e918b7f02337, @@ -13157,24 +4328,36 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: a89e843efc4975840844b6f3376f59fc, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!114 &6307084779731813542 stripped +--- !u!114 &1137320149233190250 MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 1758814485367298748, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - m_PrefabInstance: {fileID: 5760055838732525082} + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 3297079371940921515} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Script: {fileID: 11500000, guid: edb10346a1dac1d41a69f1b9c914fbfd, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!1 &3297079371940921515 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 7074662966819266225, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - m_PrefabInstance: {fileID: 5760055838732525082} + color: 8 + colorScheme: {fileID: 0} + image: {fileID: 6307084779731813542} +--- !u!114 &5582723225925148102 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6004666974532931693} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: edb10346a1dac1d41a69f1b9c914fbfd, type: 3} + m_Name: + m_EditorClassIdentifier: + color: 8 + colorScheme: {fileID: 0} + image: {fileID: 5178628546196477205} --- !u!1001 &5760055838943638639 PrefabInstance: m_ObjectHideFlags: 0 @@ -13615,15 +4798,27 @@ PrefabInstance: - {fileID: 5738179984268958194, guid: 5e57d74c874a1da4b9e2f8b3b1c90e90, type: 3} - {fileID: 750810840369874140, guid: 5e57d74c874a1da4b9e2f8b3b1c90e90, type: 3} m_SourcePrefab: {fileID: 100100000, guid: 5e57d74c874a1da4b9e2f8b3b1c90e90, type: 3} ---- !u!1 &475094077524649575 stripped +--- !u!1 &8647640806741456545 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 5293994348530749960, guid: 5e57d74c874a1da4b9e2f8b3b1c90e90, + m_CorrespondingSourceObject: {fileID: 4029951163999273678, guid: 5e57d74c874a1da4b9e2f8b3b1c90e90, type: 3} m_PrefabInstance: {fileID: 5760055838943638639} m_PrefabAsset: {fileID: 0} ---- !u!224 &9061634454445475437 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 3616021901904687618, guid: 5e57d74c874a1da4b9e2f8b3b1c90e90, +--- !u!114 &8756585969402851012 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 3921070459970083499, guid: 5e57d74c874a1da4b9e2f8b3b1c90e90, + type: 3} + m_PrefabInstance: {fileID: 5760055838943638639} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6185195325434835825} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &6185195325434835825 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 1889803360405899038, guid: 5e57d74c874a1da4b9e2f8b3b1c90e90, type: 3} m_PrefabInstance: {fileID: 5760055838943638639} m_PrefabAsset: {fileID: 0} @@ -13639,179 +4834,128 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!114 &7820611297380938713 stripped +--- !u!114 &2449030627395505075 stripped MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 2551202114154678198, guid: 5e57d74c874a1da4b9e2f8b3b1c90e90, + m_CorrespondingSourceObject: {fileID: 7931789081754763228, guid: 5e57d74c874a1da4b9e2f8b3b1c90e90, type: 3} m_PrefabInstance: {fileID: 5760055838943638639} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8647640806741456545} + m_GameObject: {fileID: 0} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Script: {fileID: 11500000, guid: 811030f917147504589eb74c563a0d3a, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!1 &8647640806741456545 stripped +--- !u!224 &9061634454445475437 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 3616021901904687618, guid: 5e57d74c874a1da4b9e2f8b3b1c90e90, + type: 3} + m_PrefabInstance: {fileID: 5760055838943638639} + m_PrefabAsset: {fileID: 0} +--- !u!1 &475094077524649575 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 4029951163999273678, guid: 5e57d74c874a1da4b9e2f8b3b1c90e90, + m_CorrespondingSourceObject: {fileID: 5293994348530749960, guid: 5e57d74c874a1da4b9e2f8b3b1c90e90, type: 3} m_PrefabInstance: {fileID: 5760055838943638639} m_PrefabAsset: {fileID: 0} ---- !u!114 &2449030627395505075 stripped +--- !u!114 &7820611297380938713 stripped MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 7931789081754763228, guid: 5e57d74c874a1da4b9e2f8b3b1c90e90, + m_CorrespondingSourceObject: {fileID: 2551202114154678198, guid: 5e57d74c874a1da4b9e2f8b3b1c90e90, type: 3} m_PrefabInstance: {fileID: 5760055838943638639} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} + m_GameObject: {fileID: 8647640806741456545} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 811030f917147504589eb74c563a0d3a, type: 3} + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!114 &8756585969402851012 stripped +--- !u!114 &8153928342839849703 MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 3921070459970083499, guid: 5e57d74c874a1da4b9e2f8b3b1c90e90, - type: 3} - m_PrefabInstance: {fileID: 5760055838943638639} + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6185195325434835825} + m_GameObject: {fileID: 475094077524649575} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Script: {fileID: 11500000, guid: edb10346a1dac1d41a69f1b9c914fbfd, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!1 &6185195325434835825 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 1889803360405899038, guid: 5e57d74c874a1da4b9e2f8b3b1c90e90, - type: 3} - m_PrefabInstance: {fileID: 5760055838943638639} - m_PrefabAsset: {fileID: 0} ---- !u!1001 &7186500213509875776 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 1752478102183024605} - m_Modifications: - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_Pivot.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_Pivot.y - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_RootOrder - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_AnchorMax.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_AnchorMax.y - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_AnchorMin.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_AnchorMin.y - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_SizeDelta.x - value: 101 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_SizeDelta.y - value: 24 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_LocalRotation.x - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_LocalRotation.y - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_LocalRotation.z - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_AnchoredPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_AnchoredPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8497503018571144132, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_Name - value: Loading Icon - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: d5fdf02cff5c92349853772a91817fbc, type: 3} ---- !u!224 &3320766725855603506 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - m_PrefabInstance: {fileID: 7186500213509875776} + color: 8 + colorScheme: {fileID: 0} + image: {fileID: 8993986987715273322} +--- !u!114 &2960945229548237462 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6185195325434835825} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 8756585969402851012} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 2449030627395505075} + m_TargetAssemblyTypeName: + m_MethodName: OpenModDetailsForThisModProfile + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &6044816181354508990 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8647640806741456545} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: edb10346a1dac1d41a69f1b9c914fbfd, type: 3} + m_Name: + m_EditorClassIdentifier: + color: 8 + colorScheme: {fileID: 0} + image: {fileID: 7820611297380938713} --- !u!1001 &7832763562549935198 PrefabInstance: m_ObjectHideFlags: 0 @@ -13854,6 +4998,11 @@ PrefabInstance: propertyPath: m_RaycastTarget value: 0 objectReference: {fileID: 0} + - target: {fileID: 5800346156525401733, guid: 6b73fb45c04f95140b44e918b7f02337, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} - target: {fileID: 6263590729001574840, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} propertyPath: m_RaycastTarget @@ -13877,7 +5026,12 @@ PrefabInstance: - target: {fileID: 7978843899359299680, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} propertyPath: m_Name - value: BrowserModListItem_Featured + value: BrowserModListItem_Featured 3 + objectReference: {fileID: 0} + - target: {fileID: 7978843899359299680, guid: 6b73fb45c04f95140b44e918b7f02337, + type: 3} + propertyPath: m_IsActive + value: 1 objectReference: {fileID: 0} - target: {fileID: 7978843899359299681, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} @@ -13993,9 +5147,15 @@ PrefabInstance: - {fileID: 7274536023900411211, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} - {fileID: 2395107722392766565, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} m_SourcePrefab: {fileID: 100100000, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} ---- !u!1 &1053227178624738031 stripped +--- !u!224 &146680028341728319 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 7978843899359299681, guid: 6b73fb45c04f95140b44e918b7f02337, + type: 3} + m_PrefabInstance: {fileID: 7832763562549935198} + m_PrefabAsset: {fileID: 0} +--- !u!1 &8072869995420742185 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 7074662966819266225, guid: 6b73fb45c04f95140b44e918b7f02337, + m_CorrespondingSourceObject: {fileID: 2070257837969182327, guid: 6b73fb45c04f95140b44e918b7f02337, type: 3} m_PrefabInstance: {fileID: 7832763562549935198} m_PrefabAsset: {fileID: 0} @@ -14011,6 +5171,12 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: +--- !u!1 &1053227178624738031 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 7074662966819266225, guid: 6b73fb45c04f95140b44e918b7f02337, + type: 3} + m_PrefabInstance: {fileID: 7832763562549935198} + m_PrefabAsset: {fileID: 0} --- !u!114 &8420324484116408034 stripped MonoBehaviour: m_CorrespondingSourceObject: {fileID: 1758814485367298748, guid: 6b73fb45c04f95140b44e918b7f02337, @@ -14023,18 +5189,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!1 &8072869995420742185 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 2070257837969182327, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - m_PrefabInstance: {fileID: 7832763562549935198} - m_PrefabAsset: {fileID: 0} ---- !u!224 &146680028341728319 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 7978843899359299681, guid: 6b73fb45c04f95140b44e918b7f02337, - type: 3} - m_PrefabInstance: {fileID: 7832763562549935198} - m_PrefabAsset: {fileID: 0} --- !u!114 &3789781511054597007 stripped MonoBehaviour: m_CorrespondingSourceObject: {fileID: 6353333058533976017, guid: 6b73fb45c04f95140b44e918b7f02337, @@ -14047,131 +5201,36 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: a89e843efc4975840844b6f3376f59fc, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!1001 &8276103027211448500 -PrefabInstance: +--- !u!114 &7507750654048744374 +MonoBehaviour: m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 3276554920018460687} - m_Modifications: - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_Pivot.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_Pivot.y - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_RootOrder - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_AnchorMax.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_AnchorMax.y - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_AnchorMin.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_AnchorMin.y - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_SizeDelta.x - value: 101 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_SizeDelta.y - value: 24 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_LocalRotation.x - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_LocalRotation.y - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_LocalRotation.z - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_AnchoredPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_AnchoredPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8497503018571144132, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - propertyPath: m_Name - value: Loading Icon - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: d5fdf02cff5c92349853772a91817fbc, type: 3} ---- !u!224 &4572481533955290054 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, - type: 3} - m_PrefabInstance: {fileID: 8276103027211448500} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1053227178624738031} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: edb10346a1dac1d41a69f1b9c914fbfd, type: 3} + m_Name: + m_EditorClassIdentifier: + color: 8 + colorScheme: {fileID: 0} + image: {fileID: 8420324484116408034} +--- !u!114 &3016909722375194229 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8072869995420742185} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: edb10346a1dac1d41a69f1b9c914fbfd, type: 3} + m_Name: + m_EditorClassIdentifier: + color: 8 + colorScheme: {fileID: 0} + image: {fileID: 7242469383006943057} --- !u!1001 &8495276881012336810 PrefabInstance: m_ObjectHideFlags: 0 @@ -14252,7 +5311,7 @@ PrefabInstance: - target: {fileID: 2760373121462030376, guid: 71af8a9a5a69a5648af22465acf51a99, type: 3} propertyPath: m_AnchoredPosition.x - value: 73.5 + value: 0 objectReference: {fileID: 0} - target: {fileID: 2760373121462030376, guid: 71af8a9a5a69a5648af22465acf51a99, type: 3} @@ -14532,6 +5591,18 @@ PrefabInstance: objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 71af8a9a5a69a5648af22465acf51a99, type: 3} +--- !u!114 &2960945230090701357 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 6697462529236771463, guid: 71af8a9a5a69a5648af22465acf51a99, + type: 3} + m_PrefabInstance: {fileID: 8495276881012336810} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!114 &8920798156313719405 stripped MonoBehaviour: m_CorrespondingSourceObject: {fileID: 1020140050670541511, guid: 71af8a9a5a69a5648af22465acf51a99, @@ -14568,15 +5639,18 @@ RectTransform: type: 3} m_PrefabInstance: {fileID: 8495276881012336810} m_PrefabAsset: {fileID: 0} ---- !u!114 &2960945230090701357 stripped +--- !u!114 &5885099853580143000 MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 6697462529236771463, guid: 71af8a9a5a69a5648af22465acf51a99, - type: 3} - m_PrefabInstance: {fileID: 8495276881012336810} + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} + m_GameObject: {fileID: 8920798156313719407} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} m_Name: m_EditorClassIdentifier: + reference: More options + text: {fileID: 8920798156313719405} + translatedLanguageFontPairingOverrides: {fileID: 0} diff --git a/UI/Prefabs/Home/ModRow.prefab b/UI/Prefabs/Home/ModRow.prefab new file mode 100644 index 0000000..6b94366 --- /dev/null +++ b/UI/Prefabs/Home/ModRow.prefab @@ -0,0 +1,2330 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &278643369185392956 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 780753378862430770} + - component: {fileID: 6093953689695109288} + - component: {fileID: 6322323582217652522} + - component: {fileID: 6136398003000827028} + m_Layer: 5 + m_Name: Error Icon + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &780753378862430770 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 278643369185392956} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 137890490981637199} + m_Father: {fileID: 2608564109743907866} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0} + m_AnchorMax: {x: 0.5, y: 0} + m_AnchoredPosition: {x: 0, y: 168} + m_SizeDelta: {x: 64, y: 64} + m_Pivot: {x: 0.5, y: 0} +--- !u!222 &6093953689695109288 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 278643369185392956} + m_CullTransparentMesh: 0 +--- !u!114 &6322323582217652522 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 278643369185392956} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.85882354, g: 0.3254902, b: 0.33333334, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 91a797609e9a1bf4eafc93d15a99087f, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &6136398003000827028 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 278643369185392956} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} + m_Name: + m_EditorClassIdentifier: + type: 9 +--- !u!1 &758711729699008864 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6407756750911152519} + - component: {fileID: 332925341475949279} + - component: {fileID: 3473042943642245752} + - component: {fileID: 8627397994325686294} + m_Layer: 5 + m_Name: arrow + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6407756750911152519 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 758711729699008864} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 7651851858055543266} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 10, y: 18} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &332925341475949279 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 758711729699008864} + m_CullTransparentMesh: 0 +--- !u!114 &3473042943642245752 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 758711729699008864} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.05490196, g: 0.0627451, b: 0.105882354, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 3b4f799ae62d42041ac993e0b2ef8ff5, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &8627397994325686294 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 758711729699008864} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} + m_Name: + m_EditorClassIdentifier: + type: 2 +--- !u!1 &1927641389205953783 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2608564109743907866} + - component: {fileID: 6497420993873216109} + - component: {fileID: 8341041871546794247} + - component: {fileID: 412358571802046873} + m_Layer: 5 + m_Name: ErrorPanel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &2608564109743907866 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1927641389205953783} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 780753378862430770} + - {fileID: 7625536035329126110} + - {fileID: 7885632761088467265} + m_Father: {fileID: 4311187865234864375} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &6497420993873216109 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1927641389205953783} + m_CullTransparentMesh: 0 +--- !u!114 &8341041871546794247 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1927641389205953783} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.05490196, g: 0.0627451, b: 0.105882354, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: c05eab6045e68c1449e9a85be63f1495, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &412358571802046873 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1927641389205953783} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} + m_Name: + m_EditorClassIdentifier: + type: 2 +--- !u!1 &2105079609748342267 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8222658155347304424} + - component: {fileID: 8572810726763425438} + - component: {fileID: 9191152650179518061} + m_Layer: 5 + m_Name: Row text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8222658155347304424 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2105079609748342267} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 627240019283217173} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 64, y: 0} + m_SizeDelta: {x: 283, y: 40} + m_Pivot: {x: 0, y: 1} +--- !u!222 &8572810726763425438 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2105079609748342267} + m_CullTransparentMesh: 0 +--- !u!114 &9191152650179518061 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2105079609748342267} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Highest rated + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 07eb140c74981ed4aab6d34ebb2e5737, type: 2} + m_sharedMaterial: {fileID: 21301536800525264, guid: 07eb140c74981ed4aab6d34ebb2e5737, + type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 28 + m_fontSizeBase: 28 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 1 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &2280014399909405003 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 627240019283217173} + - component: {fileID: 8769127253978432476} + m_Layer: 5 + m_Name: ModRow + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &627240019283217173 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2280014399909405003} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 8222658155347304424} + - {fileID: 7440057230179050641} + - {fileID: 4311187865234864375} + - {fileID: 9177242424724618973} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 1920, y: 359} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &8769127253978432476 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2280014399909405003} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7c24c539ef8622a49a05be42a385d095, type: 3} + m_Name: + m_EditorClassIdentifier: + ErrorPanel: {fileID: 1927641389205953783} + LoadingPanel: {fileID: 8381380572410350072} + RowPanel: {fileID: 3644680597156577132} + MainSelectableHighlights: {fileID: 6042392017047248367} + ModListItemPrefab: {fileID: 3616021901904687619, guid: 6dab28ac97efe3645a00cfa31697b3e0, + type: 3} + ModListItemContainer: {fileID: 1757614041400821874} + headerText: {fileID: 9191152650179518061} + Selectable: {fileID: 1538108239816495661} + AboveSelection: {fileID: 0} + BelowSelection: {fileID: 0} +--- !u!1 &3291237830717180415 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1654893750673008324} + - component: {fileID: 7673271895844582059} + - component: {fileID: 1538108239816495661} + - component: {fileID: 2891285407729213992} + - component: {fileID: 1481618404273638369} + m_Layer: 5 + m_Name: RowSelectable + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1654893750673008324 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3291237830717180415} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4796037574554945615} + m_Father: {fileID: 4311187865234864375} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &7673271895844582059 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3291237830717180415} + m_CullTransparentMesh: 0 +--- !u!114 &1538108239816495661 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3291237830717180415} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d5ce6686d7065cf4986b2ed3e2773c96, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 4 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 0} + m_HighlightedColor: {r: 1, g: 1, b: 1, a: 1} + m_PressedColor: {r: 1, g: 1, b: 1, a: 1} + m_SelectedColor: {r: 1, g: 1, b: 1, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1539729444033881433} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 0} + m_TargetAssemblyTypeName: + m_MethodName: RetryGetMods + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + scheme: {fileID: 0} + extraTargets: + - target: {fileID: 542758341952499637} + transition: 1 + colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 0} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 1, g: 1, b: 1, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + colorSchemeBlock: + Normal: 6 + NormalColorAlpha: 1 + Highlighted: 4 + HighlightedColorAlpha: 1 + Pressed: 4 + PressedColorAlpha: 1 + Disabled: 2 + DisabledColorAlpha: 1 + ColorMultiplier: 1 + FadeDuration: 0.1 + spriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + animationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + animator: {fileID: 0} + enableOnNormal: 0 + enableOnHighlight: 1 + enableOnPressed: 1 + enableOnDisabled: 0 + isControllerButtonIcon: 0 + childButtons: + - {fileID: 642275794679018964} +--- !u!114 &2891285407729213992 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3291237830717180415} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 78a172db96e209b41a0f30a5676688e3, type: 3} + m_Name: + m_EditorClassIdentifier: + PercentPaddingHorizontal: 0.05 + PercentPaddingVertical: 0.25 + adjustHorizontally: 0 + adjustVertically: 1 + Viewport: {fileID: 0} + DefaultViewportContainer: {fileID: 0} + HorizontalViewportContainer: {fileID: 0} +--- !u!114 &1481618404273638369 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3291237830717180415} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1687e18d88b77d5468f4a0aca33a36c3, type: 3} + m_Name: + m_EditorClassIdentifier: + unityEvent: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 8769127253978432476} + m_TargetAssemblyTypeName: ModIOBrowser.Implementation.ModListRow, modio.UI + m_MethodName: OnRowSelected + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!1 &3334047415183462182 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7651851858055543266} + - component: {fileID: 5525745048130401756} + - component: {fileID: 5883722536691731150} + - component: {fileID: 9196234019285128495} + - component: {fileID: 4474502283848394101} + m_Layer: 5 + m_Name: Page Left + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7651851858055543266 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3334047415183462182} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 6407756750911152519} + m_Father: {fileID: 7440057230179050641} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: 40, y: 0} + m_SizeDelta: {x: 48, y: 48} + m_Pivot: {x: 0, y: 0.5} +--- !u!222 &5525745048130401756 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3334047415183462182} + m_CullTransparentMesh: 0 +--- !u!114 &5883722536691731150 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3334047415183462182} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: de620a661822071448a42c3581ca6cdf, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &9196234019285128495 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3334047415183462182} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 0 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 5883722536691731150} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 8769127253978432476} + m_TargetAssemblyTypeName: ModIOBrowser.Implementation.ModListRow, modio.UI + m_MethodName: SwipeRow + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &4474502283848394101 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3334047415183462182} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0b148fe25e99eb48b9724523833bab1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Delegates: + - eventID: 0 + callback: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 354077887453220643} + m_TargetAssemblyTypeName: ModIOBrowser.SoundPlayer, modio.UI + m_MethodName: PlayHover + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - eventID: 4 + callback: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 354077887453220643} + m_TargetAssemblyTypeName: ModIOBrowser.SoundPlayer, modio.UI + m_MethodName: PlayClick + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!1 &3644680597156577132 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7440057230179050641} + m_Layer: 5 + m_Name: Mod Items Container + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7440057230179050641 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3644680597156577132} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1757614041400821874} + - {fileID: 7651851858055543266} + - {fileID: 2440697607747944353} + m_Father: {fileID: 627240019283217173} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 301} + m_Pivot: {x: 0.5, y: 0} +--- !u!1 &4180749186684733622 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3408464216342106579} + - component: {fileID: 5353778025999635568} + - component: {fileID: 542758341952499637} + - component: {fileID: 3995866027657331641} + m_Layer: 5 + m_Name: Dropshadow + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &3408464216342106579 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4180749186684733622} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4796037574554945615} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 40, y: 40} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5353778025999635568 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4180749186684733622} + m_CullTransparentMesh: 0 +--- !u!114 &542758341952499637 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4180749186684733622} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.02745098, g: 0.75686276, b: 0.84705883, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 2331a654c7aa71748b92458aa50e1748, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &3995866027657331641 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4180749186684733622} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} + m_Name: + m_EditorClassIdentifier: + type: 4 +--- !u!1 &4317024372895363738 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2440697607747944353} + - component: {fileID: 1133365649698670666} + - component: {fileID: 7764209552156998357} + - component: {fileID: 2428380080007216125} + - component: {fileID: 5955789226826653837} + m_Layer: 5 + m_Name: Page Right + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2440697607747944353 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4317024372895363738} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 8847930998995064738} + m_Father: {fileID: 7440057230179050641} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: -40, y: 0} + m_SizeDelta: {x: 48, y: 48} + m_Pivot: {x: 1, y: 0.5} +--- !u!222 &1133365649698670666 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4317024372895363738} + m_CullTransparentMesh: 0 +--- !u!114 &7764209552156998357 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4317024372895363738} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: de620a661822071448a42c3581ca6cdf, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &2428380080007216125 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4317024372895363738} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 0 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 7764209552156998357} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 8769127253978432476} + m_TargetAssemblyTypeName: ModIOBrowser.Implementation.ModListRow, modio.UI + m_MethodName: SwipeRow + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 1 + m_CallState: 2 +--- !u!114 &5955789226826653837 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4317024372895363738} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0b148fe25e99eb48b9724523833bab1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Delegates: + - eventID: 0 + callback: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 354077887453220643} + m_TargetAssemblyTypeName: ModIOBrowser.SoundPlayer, modio.UI + m_MethodName: PlayHover + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - eventID: 4 + callback: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 354077887453220643} + m_TargetAssemblyTypeName: ModIOBrowser.SoundPlayer, modio.UI + m_MethodName: PlayClick + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!1 &5272247770038538067 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1757614041400821874} + - component: {fileID: 1617001177584023362} + - component: {fileID: 5301479105228293880} + m_Layer: 5 + m_Name: Content + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1757614041400821874 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5272247770038538067} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 7440057230179050641} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 0.000061035156, y: 0.000061035156} + m_SizeDelta: {x: 0, y: 300} + m_Pivot: {x: 0, y: 1} +--- !u!114 &1617001177584023362 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5272247770038538067} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 64 + m_Right: 64 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_Spacing: 28 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 0 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!114 &5301479105228293880 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5272247770038538067} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 0 +--- !u!1 &5328053054953233521 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 137890490981637199} + - component: {fileID: 102719438724758857} + - component: {fileID: 4820045023203894806} + - component: {fileID: 6010224609088430377} + m_Layer: 5 + m_Name: Exclamation + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &137890490981637199 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5328053054953233521} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 780753378862430770} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 12, y: 32} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &102719438724758857 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5328053054953233521} + m_CullTransparentMesh: 0 +--- !u!114 &4820045023203894806 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5328053054953233521} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: bf3ef0ed793cec648b85261648c43e27, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &6010224609088430377 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5328053054953233521} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} + m_Name: + m_EditorClassIdentifier: + type: 3 +--- !u!1 &6042392017047248367 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4796037574554945615} + m_Layer: 5 + m_Name: Highlights + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &4796037574554945615 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6042392017047248367} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 3408464216342106579} + - {fileID: 8460844361972567673} + m_Father: {fileID: 1654893750673008324} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &6142281527528088684 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4311187865234864375} + m_Layer: 5 + m_Name: Mod Row Panels + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4311187865234864375 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6142281527528088684} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 2608564109743907866} + - {fileID: 3809561401023628128} + - {fileID: 1654893750673008324} + m_Father: {fileID: 627240019283217173} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -128, y: 301} + m_Pivot: {x: 0.5, y: 0} +--- !u!1 &6225936305981397591 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8460844361972567673} + - component: {fileID: 4763449393076498818} + - component: {fileID: 1539729444033881433} + - component: {fileID: 2227027209241511045} + m_Layer: 5 + m_Name: Outline + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8460844361972567673 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6225936305981397591} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4796037574554945615} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4763449393076498818 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6225936305981397591} + m_CullTransparentMesh: 0 +--- !u!114 &1539729444033881433 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6225936305981397591} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.02745098, g: 0.75686276, b: 0.84705883, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: f60c6439d2c5aef4680dc039853db562, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &2227027209241511045 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6225936305981397591} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} + m_Name: + m_EditorClassIdentifier: + type: 4 +--- !u!1 &7353566780726444785 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7625536035329126110} + - component: {fileID: 4983641072624971440} + - component: {fileID: 6511654287817411472} + - component: {fileID: 5901349731709705732} + - component: {fileID: 8651867645540233987} + m_Layer: 5 + m_Name: Failed to fetch + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7625536035329126110 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7353566780726444785} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2608564109743907866} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0} + m_AnchorMax: {x: 0.5, y: 0} + m_AnchoredPosition: {x: 0, y: 132} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0} +--- !u!222 &4983641072624971440 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7353566780726444785} + m_CullTransparentMesh: 0 +--- !u!114 &6511654287817411472 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7353566780726444785} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Failed to fetch mods + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 07eb140c74981ed4aab6d34ebb2e5737, type: 2} + m_sharedMaterial: {fileID: 21301536800525264, guid: 07eb140c74981ed4aab6d34ebb2e5737, + type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: 0 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 20 + m_fontSizeBase: 20 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 256 + m_textAlignment: 514 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 1 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!114 &5901349731709705732 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7353566780726444785} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 2 +--- !u!114 &8651867645540233987 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7353566780726444785} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} + m_Name: + m_EditorClassIdentifier: + reference: Failed to fetch mods + text: {fileID: 6511654287817411472} + translatedLanguageFontPairingOverrides: {fileID: 0} +--- !u!1 &8381380572410350072 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3809561401023628128} + - component: {fileID: 9179621725269385671} + - component: {fileID: 676966434589744613} + - component: {fileID: 7908712111498887725} + m_Layer: 5 + m_Name: LoadingPanel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &3809561401023628128 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8381380572410350072} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 2797396197931741353} + m_Father: {fileID: 4311187865234864375} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &9179621725269385671 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8381380572410350072} + m_CullTransparentMesh: 0 +--- !u!114 &676966434589744613 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8381380572410350072} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.05490196, g: 0.0627451, b: 0.105882354, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: c05eab6045e68c1449e9a85be63f1495, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &7908712111498887725 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8381380572410350072} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} + m_Name: + m_EditorClassIdentifier: + type: 2 +--- !u!1 &9198529932149780167 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8847930998995064738} + - component: {fileID: 5094003217666714976} + - component: {fileID: 6803512900174975823} + - component: {fileID: 7596031610123582761} + m_Layer: 5 + m_Name: arrow + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8847930998995064738 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9198529932149780167} + m_LocalRotation: {x: 0, y: 0, z: 1, w: 0} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2440697607747944353} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 180} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 10, y: 18} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5094003217666714976 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9198529932149780167} + m_CullTransparentMesh: 0 +--- !u!114 &6803512900174975823 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9198529932149780167} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.05490196, g: 0.0627451, b: 0.105882354, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 3b4f799ae62d42041ac993e0b2ef8ff5, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &7596031610123582761 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9198529932149780167} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} + m_Name: + m_EditorClassIdentifier: + type: 2 +--- !u!1001 &2186823946869560568 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 2608564109743907866} + m_Modifications: + - target: {fileID: 1798871725, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} + propertyPath: m_text + value: LS + objectReference: {fileID: 0} + - target: {fileID: 1798871725, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} + propertyPath: m_textInfo.lineCount + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1798871725, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} + propertyPath: m_textInfo.pageCount + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1798871725, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} + propertyPath: m_textInfo.wordCount + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1798871725, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} + propertyPath: m_textInfo.characterCount + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2112189428, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2112189429, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2112189429, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2112189429, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} + propertyPath: m_AnchoredPosition.x + value: 167.265 + objectReference: {fileID: 0} + - target: {fileID: 2112189429, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} + propertyPath: m_AnchoredPosition.y + value: -20 + objectReference: {fileID: 0} + - target: {fileID: 398439637101619662, guid: 3d63c60c076ced34294aeaf91358d462, + type: 3} + propertyPath: m_text + value: Retry all failed fetches + objectReference: {fileID: 0} + - target: {fileID: 398439637101619662, guid: 3d63c60c076ced34294aeaf91358d462, + type: 3} + propertyPath: m_textInfo.lineCount + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 398439637101619662, guid: 3d63c60c076ced34294aeaf91358d462, + type: 3} + propertyPath: m_textInfo.pageCount + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 398439637101619662, guid: 3d63c60c076ced34294aeaf91358d462, + type: 3} + propertyPath: m_textInfo.wordCount + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 398439637101619662, guid: 3d63c60c076ced34294aeaf91358d462, + type: 3} + propertyPath: m_textInfo.spaceCount + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 398439637101619662, guid: 3d63c60c076ced34294aeaf91358d462, + type: 3} + propertyPath: m_textInfo.characterCount + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1635082254379573548, guid: 3d63c60c076ced34294aeaf91358d462, + type: 3} + propertyPath: scheme + value: + objectReference: {fileID: 0} + - target: {fileID: 1635082254379573548, guid: 3d63c60c076ced34294aeaf91358d462, + type: 3} + propertyPath: m_Navigation.m_Mode + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1635082254379573548, guid: 3d63c60c076ced34294aeaf91358d462, + type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 0} + - target: {fileID: 1635082254379573548, guid: 3d63c60c076ced34294aeaf91358d462, + type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName + value: RetryGetMods + objectReference: {fileID: 0} + - target: {fileID: 2574403931799077613, guid: 3d63c60c076ced34294aeaf91358d462, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2574403931799077613, guid: 3d63c60c076ced34294aeaf91358d462, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2574403931799077613, guid: 3d63c60c076ced34294aeaf91358d462, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2574403931799077613, guid: 3d63c60c076ced34294aeaf91358d462, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2574403931799077613, guid: 3d63c60c076ced34294aeaf91358d462, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 100.5 + objectReference: {fileID: 0} + - target: {fileID: 2574403931799077613, guid: 3d63c60c076ced34294aeaf91358d462, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6442999689545999158, guid: 3d63c60c076ced34294aeaf91358d462, + type: 3} + propertyPath: m_Name + value: Button with Cue Variant + objectReference: {fileID: 0} + - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + type: 3} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + type: 3} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + type: 3} + propertyPath: m_AnchorMax.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + type: 3} + propertyPath: m_AnchorMin.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + type: 3} + propertyPath: m_SizeDelta.x + value: 201 + objectReference: {fileID: 0} + - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + type: 3} + propertyPath: m_SizeDelta.y + value: 40 + objectReference: {fileID: 0} + - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 68 + objectReference: {fileID: 0} + - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 3d63c60c076ced34294aeaf91358d462, type: 3} +--- !u!1 &1266753333697834460 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 1138638543927884068, guid: 3d63c60c076ced34294aeaf91358d462, + type: 3} + m_PrefabInstance: {fileID: 2186823946869560568} + m_PrefabAsset: {fileID: 0} +--- !u!114 &2008221112392678710 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 398439637101619662, guid: 3d63c60c076ced34294aeaf91358d462, + type: 3} + m_PrefabInstance: {fileID: 2186823946869560568} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1266753333697834460} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &642275794679018964 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 1635082254379573548, guid: 3d63c60c076ced34294aeaf91358d462, + type: 3} + m_PrefabInstance: {fileID: 2186823946869560568} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d5ce6686d7065cf4986b2ed3e2773c96, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!224 &7885632761088467265 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 8301908709888898489, guid: 3d63c60c076ced34294aeaf91358d462, + type: 3} + m_PrefabInstance: {fileID: 2186823946869560568} + m_PrefabAsset: {fileID: 0} +--- !u!114 &8364214156854280323 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1266753333697834460} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} + m_Name: + m_EditorClassIdentifier: + reference: Retry all failed fetches + text: {fileID: 2008221112392678710} + translatedLanguageFontPairingOverrides: {fileID: 0} +--- !u!1001 &7745190138610119643 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 3809561401023628128} + m_Modifications: + - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, + type: 3} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, + type: 3} + propertyPath: m_AnchorMax.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, + type: 3} + propertyPath: m_AnchorMax.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, + type: 3} + propertyPath: m_AnchorMin.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, + type: 3} + propertyPath: m_AnchorMin.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, + type: 3} + propertyPath: m_SizeDelta.x + value: 101 + objectReference: {fileID: 0} + - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, + type: 3} + propertyPath: m_SizeDelta.y + value: 24 + objectReference: {fileID: 0} + - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8497503018571144132, guid: d5fdf02cff5c92349853772a91817fbc, + type: 3} + propertyPath: m_Name + value: Loading Icon + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: d5fdf02cff5c92349853772a91817fbc, type: 3} +--- !u!224 &2797396197931741353 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 5597455781261280114, guid: d5fdf02cff5c92349853772a91817fbc, + type: 3} + m_PrefabInstance: {fileID: 7745190138610119643} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &8173157764325832496 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 627240019283217173} + m_Modifications: + - target: {fileID: 1022597431898343917, guid: 65c74c8b969a6574f919233163cda9d9, + type: 3} + propertyPath: m_RootOrder + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 1022597431898343917, guid: 65c74c8b969a6574f919233163cda9d9, + type: 3} + propertyPath: m_LocalPosition.x + value: 715.8291 + objectReference: {fileID: 0} + - target: {fileID: 1022597431898343917, guid: 65c74c8b969a6574f919233163cda9d9, + type: 3} + propertyPath: m_LocalPosition.y + value: 509.27173 + objectReference: {fileID: 0} + - target: {fileID: 1022597431898343917, guid: 65c74c8b969a6574f919233163cda9d9, + type: 3} + propertyPath: m_LocalPosition.z + value: -5.029846 + objectReference: {fileID: 0} + - target: {fileID: 1022597431898343917, guid: 65c74c8b969a6574f919233163cda9d9, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 1022597431898343917, guid: 65c74c8b969a6574f919233163cda9d9, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 1022597431898343917, guid: 65c74c8b969a6574f919233163cda9d9, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 1022597431898343917, guid: 65c74c8b969a6574f919233163cda9d9, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 1022597431898343917, guid: 65c74c8b969a6574f919233163cda9d9, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1022597431898343917, guid: 65c74c8b969a6574f919233163cda9d9, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1022597431898343917, guid: 65c74c8b969a6574f919233163cda9d9, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4149718850367148094, guid: 65c74c8b969a6574f919233163cda9d9, + type: 3} + propertyPath: m_Name + value: SoundPlayer + objectReference: {fileID: 0} + - target: {fileID: 8468188248645416979, guid: 65c74c8b969a6574f919233163cda9d9, + type: 3} + propertyPath: audioSlider + value: + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 65c74c8b969a6574f919233163cda9d9, type: 3} +--- !u!4 &9177242424724618973 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 1022597431898343917, guid: 65c74c8b969a6574f919233163cda9d9, + type: 3} + m_PrefabInstance: {fileID: 8173157764325832496} + m_PrefabAsset: {fileID: 0} +--- !u!114 &354077887453220643 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 8468188248645416979, guid: 65c74c8b969a6574f919233163cda9d9, + type: 3} + m_PrefabInstance: {fileID: 8173157764325832496} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: abcfba95a5a23e141b14a3ae260ab189, type: 3} + m_Name: + m_EditorClassIdentifier: diff --git a/UI/Prefabs/Home/ModRow.prefab.meta b/UI/Prefabs/Home/ModRow.prefab.meta new file mode 100644 index 0000000..11c1784 --- /dev/null +++ b/UI/Prefabs/Home/ModRow.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: cdcba5d84bf1ed84cbe0880932001409 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UI/Prefabs/Log In & Settings/Log in & settings.prefab b/UI/Prefabs/Log In & Settings/Log in & settings.prefab index 069031f..f4e1023 100644 --- a/UI/Prefabs/Log In & Settings/Log in & settings.prefab +++ b/UI/Prefabs/Log In & Settings/Log in & settings.prefab @@ -32,13 +32,13 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: - {fileID: 6235027345524414359} - m_Father: {fileID: 2635385768219430554} + m_Father: {fileID: 7808192905588639855} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} + m_SizeDelta: {x: -15.993011, y: -16.0003} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &8798355825203015350 CanvasRenderer: @@ -63,6 +63,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 0.02745098, g: 0.75686276, b: 0.84705883, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -103,7 +104,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: type: 4 ---- !u!1 &692372752566181458 +--- !u!1 &1114311413777551917 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -111,64 +112,66 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 4038997292926213209} - - component: {fileID: 7864253269811821758} - - component: {fileID: 3321750138378995776} - - component: {fileID: 7447796154557079637} + - component: {fileID: 4615285751454943296} + - component: {fileID: 1263634986968949749} + - component: {fileID: 8858337260031431448} + - component: {fileID: 3440507254819235991} + - component: {fileID: 2440123361784252276} m_Layer: 5 - m_Name: Settings Icon + m_Name: Outline m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &4038997292926213209 +--- !u!224 &4615285751454943296 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 692372752566181458} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_GameObject: {fileID: 1114311413777551917} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] - m_Father: {fileID: 6249688957269115881} - m_RootOrder: 0 + m_Father: {fileID: 3859365066391222367} + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 24, y: 24} + m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &7864253269811821758 +--- !u!222 &1263634986968949749 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 692372752566181458} - m_CullTransparentMesh: 0 ---- !u!114 &3321750138378995776 + m_GameObject: {fileID: 1114311413777551917} + m_CullTransparentMesh: 1 +--- !u!114 &8858337260031431448 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 692372752566181458} + m_GameObject: {fileID: 1114311413777551917} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 0, g: 0, b: 0, a: 1} - m_RaycastTarget: 1 + m_Color: {r: 0.20784314, g: 0.25882354, b: 0.43137255, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 21300000, guid: ea6c2bed6b5cad84aa3d9e515f40883f, type: 3} + m_Sprite: {fileID: 0} m_Type: 0 m_PreserveAspect: 0 m_FillCenter: 1 @@ -178,20 +181,41 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 ---- !u!114 &7447796154557079637 +--- !u!114 &3440507254819235991 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 692372752566181458} + m_GameObject: {fileID: 1114311413777551917} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 855c6deec25285a45b525b71db458251, type: 3} + m_Script: {fileID: 11500000, guid: 134e3ef2fca249a45986349d3925bbc5, type: 3} + m_Name: + m_EditorClassIdentifier: + radius: 28 + thickness: 4 + image: {fileID: 8858337260031431448} +--- !u!114 &2440123361784252276 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1114311413777551917} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} m_Name: m_EditorClassIdentifier: - image: {fileID: 3321750138378995776} - config: {fileID: 11400000, guid: 39a46c89e1cfb8d4c91c13db830e3b5c, type: 2} + m_IgnoreLayout: 1 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 --- !u!1 &2635385767444069040 GameObject: m_ObjectHideFlags: 0 @@ -223,7 +247,7 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: - {fileID: 4785763858176646974} - m_Father: {fileID: 2635385768219430554} + m_Father: {fileID: 7808192905588639855} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} @@ -254,6 +278,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 0.75686276, g: 0.76862746, b: 0.84313726, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -281,95 +306,6 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: type: 5 ---- !u!1 &2635385768032112951 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2635385768032112950} - - component: {fileID: 2635385768032112947} - - component: {fileID: 2635385768032112944} - - component: {fileID: 3703042453049406470} - m_Layer: 5 - m_Name: Settings Icon Background - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 0 ---- !u!224 &2635385768032112950 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2635385768032112951} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 2635385768219430554} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 1, y: 0.5} - m_AnchorMax: {x: 1, y: 0.5} - m_AnchoredPosition: {x: 20, y: 0} - m_SizeDelta: {x: 32, y: 32} - m_Pivot: {x: 0, y: 0.5} ---- !u!222 &2635385768032112947 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2635385768032112951} - m_CullTransparentMesh: 0 ---- !u!114 &2635385768032112944 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2635385768032112951} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 0 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 21300000, guid: cedacde8e3a148a49a326faa6fa7b03b, type: 3} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &3703042453049406470 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2635385768032112951} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 855c6deec25285a45b525b71db458251, type: 3} - m_Name: - m_EditorClassIdentifier: - image: {fileID: 2635385768032112944} - config: {fileID: 0} --- !u!1 &2635385768219430555 GameObject: m_ObjectHideFlags: 0 @@ -382,6 +318,7 @@ GameObject: - component: {fileID: 2635385768219430503} - component: {fileID: 2635385768219430501} - component: {fileID: 7422655373767724808} + - component: {fileID: 6436482963448647474} m_Layer: 5 m_Name: Log in & settings m_TagString: Untagged @@ -400,19 +337,18 @@ RectTransform: m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: - - {fileID: 2635385767444069043} - - {fileID: 4785763858148713970} - - {fileID: 8069636408411776629} - - {fileID: 2635385769336968311} - - {fileID: 2635385768032112950} - - {fileID: 6249688957269115881} + - {fileID: 3859365066391222367} + - {fileID: 9081781215163789535} + - {fileID: 1853660046857333322} + - {fileID: 7808192905588639855} + - {fileID: 5527837280934008748} m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 1} m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: -80, y: -40} - m_SizeDelta: {x: 48, y: 48} + m_AnchoredPosition: {x: 0, y: -64.400024} + m_SizeDelta: {x: 503.8538, y: 75.2407} m_Pivot: {x: 1, y: 1} --- !u!222 &2635385768219430503 CanvasRenderer: @@ -436,6 +372,7 @@ MonoBehaviour: m_EditorClassIdentifier: m_Navigation: m_Mode: 0 + m_WrapAround: 0 m_SelectOnUp: {fileID: 0} m_SelectOnDown: {fileID: 0} m_SelectOnLeft: {fileID: 0} @@ -466,6 +403,7 @@ MonoBehaviour: m_PersistentCalls: m_Calls: - m_Target: {fileID: 0} + m_TargetAssemblyTypeName: m_MethodName: OpenMenuProfile m_Mode: 1 m_Arguments: @@ -477,6 +415,7 @@ MonoBehaviour: m_BoolArgument: 0 m_CallState: 2 - m_Target: {fileID: 0} + m_TargetAssemblyTypeName: m_MethodName: PlayClick m_Mode: 1 m_Arguments: @@ -505,6 +444,7 @@ MonoBehaviour: m_PersistentCalls: m_Calls: - m_Target: {fileID: 0} + m_TargetAssemblyTypeName: m_MethodName: PlayHover m_Mode: 1 m_Arguments: @@ -515,6 +455,32 @@ MonoBehaviour: m_StringArgument: m_BoolArgument: 0 m_CallState: 2 +--- !u!114 &6436482963448647474 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2635385768219430555} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 20 + m_Right: 20 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 5 + m_Spacing: 10 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 0 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 1 + m_ReverseArrangement: 0 --- !u!1 &2635385769247464048 GameObject: m_ObjectHideFlags: 0 @@ -575,6 +541,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 0.75686276, g: 0.76862746, b: 0.84313726, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -615,12 +582,12 @@ RectTransform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2635385769336968308} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: - {fileID: 4785763858246432504} - m_Father: {fileID: 2635385768219430554} + m_Father: {fileID: 7808192905588639855} m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} @@ -651,6 +618,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 0.2} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -678,7 +646,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: type: 3 ---- !u!1 &4785763858148713969 +--- !u!1 &3580085804179660078 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -686,52 +654,50 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 4785763858148713970} - - component: {fileID: 4785763858148713973} - - component: {fileID: 4785763858148713972} - - component: {fileID: 4785763858148713971} + - component: {fileID: 4025287311901046787} + - component: {fileID: 8210552034981297134} + - component: {fileID: 6660406178768764943} m_Layer: 5 - m_Name: Mask + m_Name: Image m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &4785763858148713970 +--- !u!224 &4025287311901046787 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4785763858148713969} + m_GameObject: {fileID: 3580085804179660078} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 2635385769247464051} - m_Father: {fileID: 2635385768219430554} + m_Children: [] + m_Father: {fileID: 3859365066391222367} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 48, y: 48} + m_SizeDelta: {x: 36, y: 36} m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &4785763858148713973 +--- !u!222 &8210552034981297134 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4785763858148713969} - m_CullTransparentMesh: 0 ---- !u!114 &4785763858148713972 + m_GameObject: {fileID: 3580085804179660078} + m_CullTransparentMesh: 1 +--- !u!114 &6660406178768764943 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4785763858148713969} + m_GameObject: {fileID: 3580085804179660078} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} @@ -739,13 +705,14 @@ MonoBehaviour: m_EditorClassIdentifier: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 0 + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 21300000, guid: de620a661822071448a42c3581ca6cdf, type: 3} - m_Type: 1 + m_Sprite: {fileID: 21300000, guid: 9add6864895115c4587c2a86d9ba1a46, type: 3} + m_Type: 0 m_PreserveAspect: 0 m_FillCenter: 1 m_FillMethod: 4 @@ -754,20 +721,7 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 ---- !u!114 &4785763858148713971 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4785763858148713969} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3} - m_Name: - m_EditorClassIdentifier: - m_ShowMaskGraphic: 0 ---- !u!1 &4785763858176646973 +--- !u!1 &4061685019357016757 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -775,65 +729,67 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 4785763858176646974} - - component: {fileID: 4785763858176646945} - - component: {fileID: 4785763858176646944} - - component: {fileID: 4785763858176646975} + - component: {fileID: 9081781215163789535} + - component: {fileID: 1277180490166035771} + - component: {fileID: 3416437498638267191} + - component: {fileID: 1579664289299134966} m_Layer: 5 - m_Name: icon + m_Name: Controller Icon m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &4785763858176646974 +--- !u!224 &9081781215163789535 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4785763858176646973} + m_GameObject: {fileID: 4061685019357016757} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 2635385767444069043} - m_RootOrder: 0 + m_Children: + - {fileID: 2781442378424820471} + m_Father: {fileID: 2635385768219430554} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 28, y: 28} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &4785763858176646945 + m_SizeDelta: {x: 24, y: 24} + m_Pivot: {x: 1, y: 0.5} +--- !u!222 &1277180490166035771 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4785763858176646973} + m_GameObject: {fileID: 4061685019357016757} m_CullTransparentMesh: 0 ---- !u!114 &4785763858176646944 +--- !u!114 &3416437498638267191 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4785763858176646973} + m_GameObject: {fileID: 4061685019357016757} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 0.105882354, g: 0.1254902, b: 0.21960784, a: 1} + m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 21300000, guid: d548629b1a283544bb1a5ac261d5678c, type: 3} - m_Type: 0 + m_Sprite: {fileID: 21300000, guid: de620a661822071448a42c3581ca6cdf, type: 3} + m_Type: 1 m_PreserveAspect: 0 m_FillCenter: 1 m_FillMethod: 4 @@ -842,20 +798,21 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 ---- !u!114 &4785763858176646975 +--- !u!114 &1579664289299134966 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4785763858176646973} + m_GameObject: {fileID: 4061685019357016757} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} + m_Script: {fileID: 11500000, guid: 855c6deec25285a45b525b71db458251, type: 3} m_Name: m_EditorClassIdentifier: - type: 0 ---- !u!1 &4785763858246432503 + image: {fileID: 3416437498638267191} + config: {fileID: 11400000, guid: 34d5a2682375b1b4cb4ed887d7f0c032, type: 2} +--- !u!1 &4229503027266028110 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -863,89 +820,103 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 4785763858246432504} - - component: {fileID: 4785763858246432507} - - component: {fileID: 4785763858246432506} - - component: {fileID: 6974348143228534723} + - component: {fileID: 2040702485626053872} + - component: {fileID: 1176165050239533143} + - component: {fileID: 4350200811587321609} + - component: {fileID: 8687011552843518661} + - component: {fileID: 165530622057958670} m_Layer: 5 - m_Name: Fill + m_Name: '|||' m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &4785763858246432504 +--- !u!224 &2040702485626053872 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4785763858246432503} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_GameObject: {fileID: 4229503027266028110} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] - m_Father: {fileID: 2635385769336968311} + m_Father: {fileID: 5527837280934008748} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 64, y: 64} + m_SizeDelta: {x: 24, y: 24} m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &4785763858246432507 +--- !u!222 &1176165050239533143 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4785763858246432503} + m_GameObject: {fileID: 4229503027266028110} m_CullTransparentMesh: 0 ---- !u!114 &4785763858246432506 +--- !u!114 &4350200811587321609 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4785763858246432503} + m_GameObject: {fileID: 4229503027266028110} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 0.49411765, g: 0.9372549, b: 0.54901963, a: 1} + m_Color: {r: 0.05490196, g: 0.0627451, b: 0.105882354, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 21300000, guid: 8c6d8c412d9adc54d9b2c740823870d1, type: 3} - m_Type: 3 + m_Sprite: {fileID: 21300000, guid: 29fadb9eb6d0f7941bad461200aa1cb5, type: 3} + m_Type: 0 m_PreserveAspect: 0 m_FillCenter: 1 m_FillMethod: 4 - m_FillAmount: 0 + m_FillAmount: 1 m_FillClockwise: 1 m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 ---- !u!114 &6974348143228534723 +--- !u!114 &8687011552843518661 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4785763858246432503} + m_GameObject: {fileID: 4229503027266028110} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: edb10346a1dac1d41a69f1b9c914fbfd, type: 3} + m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} m_Name: m_EditorClassIdentifier: - color: 8 - colorScheme: {fileID: 0} - image: {fileID: 4785763858246432506} ---- !u!1 &5343684403193737378 + type: 2 +--- !u!114 &165530622057958670 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4229503027266028110} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 855c6deec25285a45b525b71db458251, type: 3} + m_Name: + m_EditorClassIdentifier: + image: {fileID: 4350200811587321609} + config: {fileID: 11400000, guid: b84b9b55d5fe5d34ab014b1eee895eb1, type: 2} +--- !u!1 &4286792684075734315 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -953,59 +924,421 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 6235027345524414359} - - component: {fileID: 6337517235193370061} - - component: {fileID: 3670592316288033229} - - component: {fileID: 876281999150142088} + - component: {fileID: 5527837280934008748} + - component: {fileID: 8388359715231717788} + - component: {fileID: 5209677839979513398} + - component: {fileID: 677568058015274374} m_Layer: 5 - m_Name: Logo + m_Name: Controller Icon m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &6235027345524414359 +--- !u!224 &5527837280934008748 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5343684403193737378} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_GameObject: {fileID: 4286792684075734315} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 8069636408411776629} - m_RootOrder: 0 + m_Children: + - {fileID: 2040702485626053872} + m_Father: {fileID: 2635385768219430554} + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 40, y: 40} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &6337517235193370061 + m_SizeDelta: {x: 22.86, y: 24} + m_Pivot: {x: 0, y: 0.5} +--- !u!222 &8388359715231717788 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5343684403193737378} + m_GameObject: {fileID: 4286792684075734315} m_CullTransparentMesh: 0 ---- !u!114 &3670592316288033229 +--- !u!114 &5209677839979513398 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5343684403193737378} + m_GameObject: {fileID: 4286792684075734315} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 0.05490196, g: 0.0627451, b: 0.105882354, a: 1} - m_RaycastTarget: 1 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 38fe18e59483a2b47a24bafb02c61c33, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &677568058015274374 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4286792684075734315} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 855c6deec25285a45b525b71db458251, type: 3} + m_Name: + m_EditorClassIdentifier: + image: {fileID: 5209677839979513398} + config: {fileID: 11400000, guid: 34d5a2682375b1b4cb4ed887d7f0c032, type: 2} +--- !u!1 &4785763858148713969 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4785763858148713970} + - component: {fileID: 4785763858148713973} + - component: {fileID: 4785763858148713972} + - component: {fileID: 4785763858148713971} + m_Layer: 5 + m_Name: Mask + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4785763858148713970 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4785763858148713969} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 2635385769247464051} + m_Father: {fileID: 7808192905588639855} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 48, y: 48} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4785763858148713973 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4785763858148713969} + m_CullTransparentMesh: 0 +--- !u!114 &4785763858148713972 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4785763858148713969} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: de620a661822071448a42c3581ca6cdf, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &4785763858148713971 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4785763858148713969} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 0 +--- !u!1 &4785763858176646973 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4785763858176646974} + - component: {fileID: 4785763858176646945} + - component: {fileID: 4785763858176646944} + - component: {fileID: 4785763858176646975} + m_Layer: 5 + m_Name: icon + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4785763858176646974 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4785763858176646973} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2635385767444069043} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 28, y: 28} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4785763858176646945 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4785763858176646973} + m_CullTransparentMesh: 0 +--- !u!114 &4785763858176646944 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4785763858176646973} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.105882354, g: 0.1254902, b: 0.21960784, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: d548629b1a283544bb1a5ac261d5678c, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &4785763858176646975 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4785763858176646973} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} + m_Name: + m_EditorClassIdentifier: + type: 0 +--- !u!1 &4785763858246432503 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4785763858246432504} + - component: {fileID: 4785763858246432507} + - component: {fileID: 4785763858246432506} + - component: {fileID: 6974348143228534723} + m_Layer: 5 + m_Name: Fill + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4785763858246432504 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4785763858246432503} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2635385769336968311} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 64, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4785763858246432507 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4785763858246432503} + m_CullTransparentMesh: 0 +--- !u!114 &4785763858246432506 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4785763858246432503} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.49411765, g: 0.9372549, b: 0.54901963, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 8c6d8c412d9adc54d9b2c740823870d1, type: 3} + m_Type: 3 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 0 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &6974348143228534723 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4785763858246432503} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: edb10346a1dac1d41a69f1b9c914fbfd, type: 3} + m_Name: + m_EditorClassIdentifier: + color: 8 + colorScheme: {fileID: 0} + image: {fileID: 4785763858246432506} +--- !u!1 &5343684403193737378 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6235027345524414359} + - component: {fileID: 6337517235193370061} + - component: {fileID: 3670592316288033229} + - component: {fileID: 876281999150142088} + m_Layer: 5 + m_Name: Logo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6235027345524414359 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5343684403193737378} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8069636408411776629} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 40, y: 40} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &6337517235193370061 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5343684403193737378} + m_CullTransparentMesh: 0 +--- !u!114 &3670592316288033229 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5343684403193737378} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.05490196, g: 0.0627451, b: 0.105882354, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -1033,7 +1366,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: type: 2 ---- !u!1 &8253798538732382468 +--- !u!1 &6133221413630383067 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1041,65 +1374,180 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 6249688957269115881} - - component: {fileID: 8116522375390579113} - - component: {fileID: 4606767314790387840} - - component: {fileID: 3057023817460824506} + - component: {fileID: 1853660046857333322} + - component: {fileID: 7693505921131010199} + - component: {fileID: 5125995001418781279} m_Layer: 5 - m_Name: Settings Icon Background + m_Name: Divider m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &6249688957269115881 +--- !u!224 &1853660046857333322 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8253798538732382468} + m_GameObject: {fileID: 6133221413630383067} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2635385768219430554} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 2, y: 50} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &7693505921131010199 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6133221413630383067} + m_CullTransparentMesh: 1 +--- !u!114 &5125995001418781279 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6133221413630383067} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.20784314, g: 0.25882354, b: 0.43137255, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &6606660325372263288 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7808192905588639855} + m_Layer: 5 + m_Name: Profile + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7808192905588639855 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6606660325372263288} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} m_Children: - - {fileID: 4038997292926213209} + - {fileID: 2635385767444069043} + - {fileID: 4785763858148713970} + - {fileID: 8069636408411776629} + - {fileID: 2635385769336968311} m_Father: {fileID: 2635385768219430554} - m_RootOrder: 5 + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 1, y: 0.5} - m_AnchorMax: {x: 1, y: 0.5} - m_AnchoredPosition: {x: 20, y: 0} - m_SizeDelta: {x: 30, y: 30} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 64, y: 64} m_Pivot: {x: 0, y: 0.5} ---- !u!222 &8116522375390579113 +--- !u!1 &6917280872270065486 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2781442378424820471} + - component: {fileID: 7390637796340034280} + - component: {fileID: 5280150387741946376} + - component: {fileID: 4431664996048075175} + - component: {fileID: 262724185143947151} + m_Layer: 5 + m_Name: RS + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2781442378424820471 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6917280872270065486} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 9081781215163789535} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 24, y: 24} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &7390637796340034280 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8253798538732382468} + m_GameObject: {fileID: 6917280872270065486} m_CullTransparentMesh: 0 ---- !u!114 &4606767314790387840 +--- !u!114 &5280150387741946376 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8253798538732382468} + m_GameObject: {fileID: 6917280872270065486} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Color: {r: 0.05490196, g: 0.0627451, b: 0.105882354, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 21300000, guid: 38fe18e59483a2b47a24bafb02c61c33, type: 3} + m_Sprite: {fileID: 21300000, guid: 1f5c03735f86c174ab7cf07e0de082f4, type: 3} m_Type: 0 m_PreserveAspect: 0 m_FillCenter: 1 @@ -1109,17 +1557,565 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 ---- !u!114 &3057023817460824506 +--- !u!114 &4431664996048075175 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8253798538732382468} + m_GameObject: {fileID: 6917280872270065486} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} + m_Name: + m_EditorClassIdentifier: + type: 2 +--- !u!114 &262724185143947151 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6917280872270065486} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 855c6deec25285a45b525b71db458251, type: 3} m_Name: m_EditorClassIdentifier: - image: {fileID: 4606767314790387840} - config: {fileID: 11400000, guid: e0420b28badf13c4aacb5ff5743e5fdd, type: 2} + image: {fileID: 5280150387741946376} + config: {fileID: 11400000, guid: b84b9b55d5fe5d34ab014b1eee895eb1, type: 2} +--- !u!1001 &3856848452104108041 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 2635385768219430554} + m_Modifications: + - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} + propertyPath: m_Pivot.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} + propertyPath: m_Pivot.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} + propertyPath: m_SizeDelta.x + value: 56 + objectReference: {fileID: 0} + - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} + propertyPath: m_SizeDelta.y + value: 56 + objectReference: {fileID: 0} + - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3050362772334548697, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: m_Name + value: Search & filter + objectReference: {fileID: 0} + - target: {fileID: 3050362772334548697, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5802092550609450754, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5802092550609450754, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5802092550609450754, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5802092550609450754, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: m_SizeDelta.x + value: 82.73 + objectReference: {fileID: 0} + - target: {fileID: 5802092550609450754, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: m_SizeDelta.y + value: 15.22 + objectReference: {fileID: 0} + - target: {fileID: 5802092550609450754, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 61.365 + objectReference: {fileID: 0} + - target: {fileID: 5802092550609450754, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -20 + objectReference: {fileID: 0} + - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: scheme + value: + objectReference: {fileID: 0} + - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: m_Enabled + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: m_Navigation.m_Mode + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: extraTargets.Array.size + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: m_Colors.m_PressedColor.b + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: m_Colors.m_PressedColor.g + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: m_Colors.m_PressedColor.r + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: extraTargets.Array.data[3].target + value: + objectReference: {fileID: 3416437498638267191} + - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: extraTargets.Array.data[3].transition + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: extraTargets.Array.data[3].enableOnPressed + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: extraTargets.Array.data[3].enableOnHighlight + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: extraTargets.Array.data[3].colors.m_FadeDuration + value: 0.1 + objectReference: {fileID: 0} + - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: extraTargets.Array.data[3].colors.m_NormalColor.a + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: extraTargets.Array.data[3].colors.m_NormalColor.b + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: extraTargets.Array.data[3].colors.m_NormalColor.g + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: extraTargets.Array.data[3].colors.m_NormalColor.r + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: extraTargets.Array.data[3].colorSchemeBlock.Normal + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: extraTargets.Array.data[3].colors.m_PressedColor.a + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: extraTargets.Array.data[3].colors.m_PressedColor.b + value: 0.78431374 + objectReference: {fileID: 0} + - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: extraTargets.Array.data[3].colors.m_PressedColor.g + value: 0.78431374 + objectReference: {fileID: 0} + - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: extraTargets.Array.data[3].colors.m_PressedColor.r + value: 0.78431374 + objectReference: {fileID: 0} + - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: extraTargets.Array.data[3].colorSchemeBlock.Pressed + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: extraTargets.Array.data[3].colors.m_ColorMultiplier + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: extraTargets.Array.data[3].colors.m_DisabledColor.a + value: 0.5019608 + objectReference: {fileID: 0} + - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: extraTargets.Array.data[3].colors.m_DisabledColor.b + value: 0.78431374 + objectReference: {fileID: 0} + - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: extraTargets.Array.data[3].colors.m_DisabledColor.g + value: 0.78431374 + objectReference: {fileID: 0} + - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: extraTargets.Array.data[3].colors.m_DisabledColor.r + value: 0.78431374 + objectReference: {fileID: 0} + - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: extraTargets.Array.data[3].colorSchemeBlock.Disabled + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: extraTargets.Array.data[3].colors.m_HighlightedColor.a + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: extraTargets.Array.data[3].colors.m_HighlightedColor.b + value: 0.9607843 + objectReference: {fileID: 0} + - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: extraTargets.Array.data[3].colors.m_HighlightedColor.g + value: 0.9607843 + objectReference: {fileID: 0} + - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: extraTargets.Array.data[3].colors.m_HighlightedColor.r + value: 0.9607843 + objectReference: {fileID: 0} + - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: extraTargets.Array.data[3].colorSchemeBlock.Highlighted + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: extraTargets.Array.data[3].colorSchemeBlock.FadeDuration + value: 0.1 + objectReference: {fileID: 0} + - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Mode + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 0} + - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: extraTargets.Array.data[3].colorSchemeBlock.ColorMultiplier + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: extraTargets.Array.data[3].animationTriggers.m_NormalTrigger + value: Normal + objectReference: {fileID: 0} + - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: extraTargets.Array.data[3].colorSchemeBlock.NormalColorAlpha + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: extraTargets.Array.data[3].animationTriggers.m_PressedTrigger + value: Pressed + objectReference: {fileID: 0} + - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: extraTargets.Array.data[3].colorSchemeBlock.PressedColorAlpha + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_CallState + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: extraTargets.Array.data[3].animationTriggers.m_DisabledTrigger + value: Disabled + objectReference: {fileID: 0} + - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: extraTargets.Array.data[3].colorSchemeBlock.DisabledColorAlpha + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName + value: Open + objectReference: {fileID: 0} + - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: extraTargets.Array.data[3].animationTriggers.m_HighlightedTrigger + value: Highlighted + objectReference: {fileID: 0} + - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: extraTargets.Array.data[3].colorSchemeBlock.HighlightedColorAlpha + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName + value: UnityEngine.Object, UnityEngine + objectReference: {fileID: 0} + - target: {fileID: 7500801496791559709, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: m_Sprite + value: + objectReference: {fileID: 0} + - target: {fileID: 7500801496791559709, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: m_Color.b + value: 0.23137255 + objectReference: {fileID: 0} + - target: {fileID: 7500801496791559709, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: m_Color.g + value: 0.13725491 + objectReference: {fileID: 0} + - target: {fileID: 7500801496791559709, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: m_Color.r + value: 0.10980392 + objectReference: {fileID: 0} + - target: {fileID: 7500801496791559709, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: m_Material + value: + objectReference: {fileID: 0} + - target: {fileID: 8554790275978124321, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: m_text + value: Search & filter + objectReference: {fileID: 0} + - target: {fileID: 8554790275978124321, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: m_textAlignment + value: 65535 + objectReference: {fileID: 0} + - target: {fileID: 8554790275978124321, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: m_TextStyleHashCode + value: -1183493901 + objectReference: {fileID: 0} + - target: {fileID: 8554790275978124321, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: m_VerticalAlignment + value: 512 + objectReference: {fileID: 0} + - target: {fileID: 8554790275978124321, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: m_textInfo.lineCount + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8554790275978124321, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: m_textInfo.pageCount + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8554790275978124321, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: m_textInfo.wordCount + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 8554790275978124321, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: m_HorizontalAlignment + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 8554790275978124321, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: m_textInfo.spaceCount + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 8554790275978124321, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: m_textInfo.characterCount + value: 15 + objectReference: {fileID: 0} + - target: {fileID: 9003385506253720779, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: + - {fileID: 6149685810869579981, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} + m_SourcePrefab: {fileID: 100100000, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} +--- !u!114 &4845590993183597608 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 8554790275978124321, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + m_PrefabInstance: {fileID: 3856848452104108041} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5292912988457104578} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &2293273376132542160 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 3050362772334548697, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + m_PrefabInstance: {fileID: 3856848452104108041} + m_PrefabAsset: {fileID: 0} +--- !u!224 &3859365066391222367 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + m_PrefabInstance: {fileID: 3856848452104108041} + m_PrefabAsset: {fileID: 0} +--- !u!114 &6745956852356650516 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 7500801496791559709, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + m_PrefabInstance: {fileID: 3856848452104108041} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2293273376132542160} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &5292912988457104578 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 9003385506253720779, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + m_PrefabInstance: {fileID: 3856848452104108041} + m_PrefabAsset: {fileID: 0} +--- !u!114 &1339129943251795040 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2293273376132542160} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: adb30198aa32dd140b5750692dd48104, type: 3} + m_Name: + m_EditorClassIdentifier: + radius: 28 + image: {fileID: 6745956852356650516} +--- !u!114 &3082295625049245867 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5292912988457104578} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} + m_Name: + m_EditorClassIdentifier: + reference: Search & filter + text: {fileID: 4845590993183597608} + translatedLanguageFontPairingOverrides: {fileID: 0} diff --git a/UI/Prefabs/NavBar/Top Nav Bar.prefab b/UI/Prefabs/NavBar/Top Nav Bar.prefab index 748192f..8f6807b 100644 --- a/UI/Prefabs/NavBar/Top Nav Bar.prefab +++ b/UI/Prefabs/NavBar/Top Nav Bar.prefab @@ -61,6 +61,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 0.02745098, g: 0.75686276, b: 0.84705883, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -149,6 +150,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 0.02745098, g: 0.75686276, b: 0.84705883, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -238,6 +240,7 @@ MonoBehaviour: m_EditorClassIdentifier: m_Navigation: m_Mode: 0 + m_WrapAround: 0 m_SelectOnUp: {fileID: 0} m_SelectOnDown: {fileID: 0} m_SelectOnLeft: {fileID: 0} @@ -268,6 +271,7 @@ MonoBehaviour: m_PersistentCalls: m_Calls: - m_Target: {fileID: 0} + m_TargetAssemblyTypeName: m_MethodName: Open m_Mode: 1 m_Arguments: @@ -417,6 +421,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 0.02745098, g: 0.75686276, b: 0.84705883, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -505,6 +510,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 0.02745098, g: 0.75686276, b: 0.84705883, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -612,6 +618,7 @@ MonoBehaviour: m_ChildControlHeight: 0 m_ChildScaleWidth: 0 m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 --- !u!1 &560606090044140640 GameObject: m_ObjectHideFlags: 0 @@ -674,6 +681,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -875,6 +883,7 @@ MonoBehaviour: m_EditorClassIdentifier: m_Navigation: m_Mode: 0 + m_WrapAround: 0 m_SelectOnUp: {fileID: 0} m_SelectOnDown: {fileID: 0} m_SelectOnLeft: {fileID: 0} @@ -905,6 +914,7 @@ MonoBehaviour: m_PersistentCalls: m_Calls: - m_Target: {fileID: 0} + m_TargetAssemblyTypeName: m_MethodName: Open m_Mode: 1 m_Arguments: @@ -956,109 +966,6 @@ MonoBehaviour: enableOnDisabled: 0 isControllerButtonIcon: 0 childButtons: [] ---- !u!1 &560606090383989697 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 560606090383989696} - - component: {fileID: 560606090383989698} - - component: {fileID: 560606090383989699} - - component: {fileID: 7007350327579172437} - - component: {fileID: 6354488166368890661} - m_Layer: 5 - m_Name: RS - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &560606090383989696 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 560606090383989697} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 7007350329050589388} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 24, y: 24} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &560606090383989698 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 560606090383989697} - m_CullTransparentMesh: 0 ---- !u!114 &560606090383989699 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 560606090383989697} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.05490196, g: 0.0627451, b: 0.105882354, a: 1} - m_RaycastTarget: 0 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 21300000, guid: 1f5c03735f86c174ab7cf07e0de082f4, type: 3} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &7007350327579172437 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 560606090383989697} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} - m_Name: - m_EditorClassIdentifier: - type: 2 ---- !u!114 &6354488166368890661 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 560606090383989697} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 855c6deec25285a45b525b71db458251, type: 3} - m_Name: - m_EditorClassIdentifier: - image: {fileID: 560606090383989699} - config: {fileID: 11400000, guid: b84b9b55d5fe5d34ab014b1eee895eb1, type: 2} --- !u!1 &560606090467960151 GameObject: m_ObjectHideFlags: 0 @@ -1089,8 +996,8 @@ RectTransform: m_Children: - {fileID: 7007350328927686891} - {fileID: 560606089867562704} - - {fileID: 562619462984882778} - {fileID: 562619463613292778} + - {fileID: 560606090235584822} m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -1115,6 +1022,8 @@ MonoBehaviour: BrowserPanelNavButtonHighlights: {fileID: 560606090165666797} BrowserPanelHeaderBackground: {fileID: 7007350328927686886} CollectionPanelNavButton: {fileID: 7007350328586836470} + Wallet: {fileID: 0} + WalletBalance: {fileID: 0} CollectionPanelNavButtonHighlights: {fileID: 560606089427905395} --- !u!1 &560606090551311677 GameObject: @@ -1178,6 +1087,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -1267,6 +1177,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 0, g: 0, b: 0, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -1357,6 +1268,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -1385,70 +1297,6 @@ MonoBehaviour: m_EditorClassIdentifier: image: {fileID: 3809534266735092323} config: {fileID: 11400000, guid: 42498adbd513e4f42b11d744efe971d4, type: 2} ---- !u!114 &560606089474578951 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3283894349386878165} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Padding: - m_Left: 20 - m_Right: 20 - m_Top: 0 - m_Bottom: 0 - m_ChildAlignment: 4 - m_Spacing: 0 - m_ChildForceExpandWidth: 1 - m_ChildForceExpandHeight: 1 - m_ChildControlWidth: 0 - m_ChildControlHeight: 0 - m_ChildScaleWidth: 0 - m_ChildScaleHeight: 0 ---- !u!114 &2108038530347348048 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3283894350837544549} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Padding: - m_Left: 24 - m_Right: 24 - m_Top: 0 - m_Bottom: 0 - m_ChildAlignment: 4 - m_Spacing: 12 - m_ChildForceExpandWidth: 1 - m_ChildForceExpandHeight: 1 - m_ChildControlWidth: 0 - m_ChildControlHeight: 0 - m_ChildScaleWidth: 0 - m_ChildScaleHeight: 0 ---- !u!114 &3116438725800401860 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3283894350837544549} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} - m_Name: - m_EditorClassIdentifier: - m_HorizontalFit: 2 - m_VerticalFit: 0 --- !u!1 &3851356965864075827 GameObject: m_ObjectHideFlags: 0 @@ -1510,6 +1358,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 0, g: 0, b: 0, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -1600,6 +1449,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -1763,6 +1613,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 0.12941177, g: 0.16078432, b: 0.27058825, a: 0} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -1852,6 +1703,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -1954,96 +1806,6 @@ MonoBehaviour: reference: BROWSE text: {fileID: 7007350328933744514} translatedLanguageFontPairingOverrides: {fileID: 0} ---- !u!1 &7007350329050589395 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7007350329050589388} - - component: {fileID: 7007350329050589390} - - component: {fileID: 7007350329050589389} - - component: {fileID: 5957684260442304284} - m_Layer: 5 - m_Name: Controller Icon - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &7007350329050589388 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7007350329050589395} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 560606090383989696} - m_Father: {fileID: 562619462984882778} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 24, y: 24} - m_Pivot: {x: 1, y: 0.5} ---- !u!222 &7007350329050589390 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7007350329050589395} - m_CullTransparentMesh: 0 ---- !u!114 &7007350329050589389 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7007350329050589395} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 0 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 21300000, guid: de620a661822071448a42c3581ca6cdf, type: 3} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &5957684260442304284 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7007350329050589395} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 855c6deec25285a45b525b71db458251, type: 3} - m_Name: - m_EditorClassIdentifier: - image: {fileID: 7007350329050589389} - config: {fileID: 11400000, guid: 34d5a2682375b1b4cb4ed887d7f0c032, type: 2} --- !u!1 &7007350329056984917 GameObject: m_ObjectHideFlags: 0 @@ -2106,6 +1868,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -2269,6 +2032,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 0, g: 0, b: 0, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -2297,36 +2061,6 @@ MonoBehaviour: m_EditorClassIdentifier: image: {fileID: 4102996975799792630} config: {fileID: 11400000, guid: 9385cd1af17a68a46804c228c01afe2e, type: 2} ---- !u!114 &5892151161115263390 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8878247632055676023} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} - m_Name: - m_EditorClassIdentifier: - reference: Back - text: {fileID: 8178277621283601565} - translatedLanguageFontPairingOverrides: {fileID: 0} ---- !u!114 &7435689386660960107 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8878247632752531143} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} - m_Name: - m_EditorClassIdentifier: - reference: Search & filter - text: {fileID: 8178277622735291949} - translatedLanguageFontPairingOverrides: {fileID: 0} --- !u!1 &9210249928777495307 GameObject: m_ObjectHideFlags: 0 @@ -2340,7 +2074,7 @@ GameObject: - component: {fileID: 9017902043026296707} - component: {fileID: 4924740659705317235} m_Layer: 5 - m_Name: Cue (ModDetails Back) + m_Name: Cue (Home Back) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -2389,6 +2123,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -2417,7 +2152,7 @@ MonoBehaviour: m_EditorClassIdentifier: image: {fileID: 9017902043026296707} config: {fileID: 11400000, guid: f61575af3474946408f87595370cf4ad, type: 2} ---- !u!1001 &560606089474578956 +--- !u!1001 &560606090120061116 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 @@ -2426,7 +2161,7 @@ PrefabInstance: m_Modifications: - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_Pivot.x - value: 1 + value: 0 objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_Pivot.y @@ -2438,7 +2173,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_AnchorMax.x - value: 1 + value: 0 objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_AnchorMax.y @@ -2446,7 +2181,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_AnchorMin.x - value: 1 + value: 0 objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_AnchorMin.y @@ -2454,7 +2189,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_SizeDelta.x - value: 160 + value: 0 objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_SizeDelta.y @@ -2490,11 +2225,11 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_AnchoredPosition.x - value: -164 + value: 80 objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_AnchoredPosition.y - value: -40 + value: -36 objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_LocalEulerAnglesHint.x @@ -2508,17 +2243,22 @@ PrefabInstance: propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 3050362772334548697, guid: 9bde00a16f32d6d42a1280198365e78b, + - target: {fileID: 1100119940201048372, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} - propertyPath: m_Name - value: Search & filter + propertyPath: m_RaycastTarget + value: 0 objectReference: {fileID: 0} - target: {fileID: 3050362772334548697, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} - propertyPath: m_IsActive - value: 1 + propertyPath: m_Name + value: Back / Exit objectReference: {fileID: 0} - - target: {fileID: 5802092550609450754, guid: 9bde00a16f32d6d42a1280198365e78b, + - target: {fileID: 5303711281568416601, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: m_Text + value: Back + objectReference: {fileID: 0} + - target: {fileID: 5802092550609450754, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_AnchorMax.x value: 0 @@ -2536,17 +2276,17 @@ PrefabInstance: - target: {fileID: 5802092550609450754, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_SizeDelta.x - value: 82.73 + value: 0 objectReference: {fileID: 0} - target: {fileID: 5802092550609450754, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_SizeDelta.y - value: 15.22 + value: 0 objectReference: {fileID: 0} - target: {fileID: 5802092550609450754, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_AnchoredPosition.x - value: 0 + value: 38.19 objectReference: {fileID: 0} - target: {fileID: 5802092550609450754, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} @@ -2558,161 +2298,16 @@ PrefabInstance: propertyPath: scheme value: objectReference: {fileID: 0} - - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - propertyPath: m_Enabled - value: 1 - objectReference: {fileID: 0} - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_Navigation.m_Mode value: 0 objectReference: {fileID: 0} - - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - propertyPath: extraTargets.Array.size - value: 3 - objectReference: {fileID: 0} - - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - propertyPath: extraTargets.Array.data[3].target - value: - objectReference: {fileID: 7007350329050589389} - - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - propertyPath: extraTargets.Array.data[3].transition - value: 4 - objectReference: {fileID: 0} - - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - propertyPath: extraTargets.Array.data[3].enableOnPressed - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - propertyPath: extraTargets.Array.data[3].enableOnHighlight - value: 1 - objectReference: {fileID: 0} - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.size value: 1 objectReference: {fileID: 0} - - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - propertyPath: extraTargets.Array.data[3].colors.m_FadeDuration - value: 0.1 - objectReference: {fileID: 0} - - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - propertyPath: extraTargets.Array.data[3].colors.m_NormalColor.a - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - propertyPath: extraTargets.Array.data[3].colors.m_NormalColor.b - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - propertyPath: extraTargets.Array.data[3].colors.m_NormalColor.g - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - propertyPath: extraTargets.Array.data[3].colors.m_NormalColor.r - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - propertyPath: extraTargets.Array.data[3].colorSchemeBlock.Normal - value: 6 - objectReference: {fileID: 0} - - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - propertyPath: extraTargets.Array.data[3].colors.m_PressedColor.a - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - propertyPath: extraTargets.Array.data[3].colors.m_PressedColor.b - value: 0.78431374 - objectReference: {fileID: 0} - - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - propertyPath: extraTargets.Array.data[3].colors.m_PressedColor.g - value: 0.78431374 - objectReference: {fileID: 0} - - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - propertyPath: extraTargets.Array.data[3].colors.m_PressedColor.r - value: 0.78431374 - objectReference: {fileID: 0} - - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - propertyPath: extraTargets.Array.data[3].colorSchemeBlock.Pressed - value: 4 - objectReference: {fileID: 0} - - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - propertyPath: extraTargets.Array.data[3].colors.m_ColorMultiplier - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - propertyPath: extraTargets.Array.data[3].colors.m_DisabledColor.a - value: 0.5019608 - objectReference: {fileID: 0} - - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - propertyPath: extraTargets.Array.data[3].colors.m_DisabledColor.b - value: 0.78431374 - objectReference: {fileID: 0} - - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - propertyPath: extraTargets.Array.data[3].colors.m_DisabledColor.g - value: 0.78431374 - objectReference: {fileID: 0} - - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - propertyPath: extraTargets.Array.data[3].colors.m_DisabledColor.r - value: 0.78431374 - objectReference: {fileID: 0} - - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - propertyPath: extraTargets.Array.data[3].colorSchemeBlock.Disabled - value: 2 - objectReference: {fileID: 0} - - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - propertyPath: extraTargets.Array.data[3].colors.m_HighlightedColor.a - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - propertyPath: extraTargets.Array.data[3].colors.m_HighlightedColor.b - value: 0.9607843 - objectReference: {fileID: 0} - - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - propertyPath: extraTargets.Array.data[3].colors.m_HighlightedColor.g - value: 0.9607843 - objectReference: {fileID: 0} - - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - propertyPath: extraTargets.Array.data[3].colors.m_HighlightedColor.r - value: 0.9607843 - objectReference: {fileID: 0} - - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - propertyPath: extraTargets.Array.data[3].colorSchemeBlock.Highlighted - value: 4 - objectReference: {fileID: 0} - - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - propertyPath: extraTargets.Array.data[3].colorSchemeBlock.FadeDuration - value: 0.1 - objectReference: {fileID: 0} - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Mode @@ -2723,60 +2318,15 @@ PrefabInstance: propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target value: objectReference: {fileID: 0} - - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - propertyPath: extraTargets.Array.data[3].colorSchemeBlock.ColorMultiplier - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - propertyPath: extraTargets.Array.data[3].animationTriggers.m_NormalTrigger - value: Normal - objectReference: {fileID: 0} - - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - propertyPath: extraTargets.Array.data[3].colorSchemeBlock.NormalColorAlpha - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - propertyPath: extraTargets.Array.data[3].animationTriggers.m_PressedTrigger - value: Pressed - objectReference: {fileID: 0} - - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - propertyPath: extraTargets.Array.data[3].colorSchemeBlock.PressedColorAlpha - value: 1 - objectReference: {fileID: 0} - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_CallState value: 2 objectReference: {fileID: 0} - - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - propertyPath: extraTargets.Array.data[3].animationTriggers.m_DisabledTrigger - value: Disabled - objectReference: {fileID: 0} - - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - propertyPath: extraTargets.Array.data[3].colorSchemeBlock.DisabledColorAlpha - value: 1 - objectReference: {fileID: 0} - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName - value: Open - objectReference: {fileID: 0} - - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - propertyPath: extraTargets.Array.data[3].animationTriggers.m_HighlightedTrigger - value: Highlighted - objectReference: {fileID: 0} - - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - propertyPath: extraTargets.Array.data[3].colorSchemeBlock.HighlightedColorAlpha - value: 1 + value: CloseBrowserPanel objectReference: {fileID: 0} - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} @@ -2786,7 +2336,7 @@ PrefabInstance: - target: {fileID: 8554790275978124321, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_text - value: Search & filter + value: Back objectReference: {fileID: 0} - target: {fileID: 8554790275978124321, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} @@ -2816,7 +2366,7 @@ PrefabInstance: - target: {fileID: 8554790275978124321, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_textInfo.wordCount - value: 2 + value: 1 objectReference: {fileID: 0} - target: {fileID: 8554790275978124321, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} @@ -2826,280 +2376,341 @@ PrefabInstance: - target: {fileID: 8554790275978124321, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_textInfo.spaceCount - value: 2 + value: 1 objectReference: {fileID: 0} - target: {fileID: 8554790275978124321, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_textInfo.characterCount - value: 15 + value: 5 objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} ---- !u!114 &8178277622735291949 stripped +--- !u!1 &3283894350837544549 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 3050362772334548697, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + m_PrefabInstance: {fileID: 560606090120061116} + m_PrefabAsset: {fileID: 0} +--- !u!224 &562619463613292778 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + m_PrefabInstance: {fileID: 560606090120061116} + m_PrefabAsset: {fileID: 0} +--- !u!1 &8878247632055676023 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 9003385506253720779, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + m_PrefabInstance: {fileID: 560606090120061116} + m_PrefabAsset: {fileID: 0} +--- !u!114 &8178277621283601565 stripped MonoBehaviour: m_CorrespondingSourceObject: {fileID: 8554790275978124321, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} - m_PrefabInstance: {fileID: 560606089474578956} + m_PrefabInstance: {fileID: 560606090120061116} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8878247632752531143} + m_GameObject: {fileID: 8878247632055676023} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!1 &8878247632752531143 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 9003385506253720779, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - m_PrefabInstance: {fileID: 560606089474578956} +--- !u!114 &2108038530347348048 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} ---- !u!224 &562619462984882778 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - m_PrefabInstance: {fileID: 560606089474578956} + m_GameObject: {fileID: 3283894350837544549} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 24 + m_Right: 24 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 4 + m_Spacing: 12 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 0 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!114 &3116438725800401860 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} ---- !u!1 &3283894349386878165 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 3050362772334548697, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - m_PrefabInstance: {fileID: 560606089474578956} + m_GameObject: {fileID: 3283894350837544549} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 0 +--- !u!114 &5892151161115263390 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} ---- !u!1001 &560606090120061116 + m_GameObject: {fileID: 8878247632055676023} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} + m_Name: + m_EditorClassIdentifier: + reference: Back + text: {fileID: 8178277621283601565} + translatedLanguageFontPairingOverrides: {fileID: 0} +--- !u!114 &8349791448163938663 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8878247632055676023} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 2 +--- !u!1001 &2546056752181243820 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 560606090467960150} m_Modifications: - - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} - propertyPath: m_Pivot.x + - target: {fileID: 34783764131666221, guid: 4e3560bff46556f4b8dcdd3e31f54a32, + type: 3} + propertyPath: m_AnchorMax.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} + - target: {fileID: 34783764131666221, guid: 4e3560bff46556f4b8dcdd3e31f54a32, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 34783764131666221, guid: 4e3560bff46556f4b8dcdd3e31f54a32, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 34783764131666221, guid: 4e3560bff46556f4b8dcdd3e31f54a32, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 976389685351378771, guid: 4e3560bff46556f4b8dcdd3e31f54a32, + type: 3} + propertyPath: m_Material + value: + objectReference: {fileID: 0} + - target: {fileID: 1784055556414039979, guid: 4e3560bff46556f4b8dcdd3e31f54a32, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1784055556414039979, guid: 4e3560bff46556f4b8dcdd3e31f54a32, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1784055556414039979, guid: 4e3560bff46556f4b8dcdd3e31f54a32, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1784055556414039979, guid: 4e3560bff46556f4b8dcdd3e31f54a32, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2635385768219430501, guid: 4e3560bff46556f4b8dcdd3e31f54a32, + type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 0} + - target: {fileID: 2635385768219430501, guid: 4e3560bff46556f4b8dcdd3e31f54a32, + type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[1].m_Target + value: + objectReference: {fileID: 0} + - target: {fileID: 2635385768219430554, guid: 4e3560bff46556f4b8dcdd3e31f54a32, + type: 3} + propertyPath: m_Pivot.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2635385768219430554, guid: 4e3560bff46556f4b8dcdd3e31f54a32, + type: 3} propertyPath: m_Pivot.y value: 1 objectReference: {fileID: 0} - - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} + - target: {fileID: 2635385768219430554, guid: 4e3560bff46556f4b8dcdd3e31f54a32, + type: 3} propertyPath: m_RootOrder value: 3 objectReference: {fileID: 0} - - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} + - target: {fileID: 2635385768219430554, guid: 4e3560bff46556f4b8dcdd3e31f54a32, + type: 3} propertyPath: m_AnchorMax.x - value: 0 + value: 1 objectReference: {fileID: 0} - - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} + - target: {fileID: 2635385768219430554, guid: 4e3560bff46556f4b8dcdd3e31f54a32, + type: 3} propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} + - target: {fileID: 2635385768219430554, guid: 4e3560bff46556f4b8dcdd3e31f54a32, + type: 3} propertyPath: m_AnchorMin.x - value: 0 + value: 1 objectReference: {fileID: 0} - - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} + - target: {fileID: 2635385768219430554, guid: 4e3560bff46556f4b8dcdd3e31f54a32, + type: 3} propertyPath: m_AnchorMin.y value: 1 objectReference: {fileID: 0} - - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} + - target: {fileID: 2635385768219430554, guid: 4e3560bff46556f4b8dcdd3e31f54a32, + type: 3} propertyPath: m_SizeDelta.x - value: 0 + value: 360.17 objectReference: {fileID: 0} - - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} + - target: {fileID: 2635385768219430554, guid: 4e3560bff46556f4b8dcdd3e31f54a32, + type: 3} propertyPath: m_SizeDelta.y - value: 40 + value: 75.241 objectReference: {fileID: 0} - - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} + - target: {fileID: 2635385768219430554, guid: 4e3560bff46556f4b8dcdd3e31f54a32, + type: 3} propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} + - target: {fileID: 2635385768219430554, guid: 4e3560bff46556f4b8dcdd3e31f54a32, + type: 3} propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} + - target: {fileID: 2635385768219430554, guid: 4e3560bff46556f4b8dcdd3e31f54a32, + type: 3} propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} + - target: {fileID: 2635385768219430554, guid: 4e3560bff46556f4b8dcdd3e31f54a32, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} + - target: {fileID: 2635385768219430554, guid: 4e3560bff46556f4b8dcdd3e31f54a32, + type: 3} propertyPath: m_LocalRotation.x - value: 0 + value: -0 objectReference: {fileID: 0} - - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} + - target: {fileID: 2635385768219430554, guid: 4e3560bff46556f4b8dcdd3e31f54a32, + type: 3} propertyPath: m_LocalRotation.y - value: 0 + value: -0 objectReference: {fileID: 0} - - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} + - target: {fileID: 2635385768219430554, guid: 4e3560bff46556f4b8dcdd3e31f54a32, + type: 3} propertyPath: m_LocalRotation.z - value: 0 + value: -0 objectReference: {fileID: 0} - - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} + - target: {fileID: 2635385768219430554, guid: 4e3560bff46556f4b8dcdd3e31f54a32, + type: 3} propertyPath: m_AnchoredPosition.x - value: 80 + value: -11.800049 objectReference: {fileID: 0} - - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} + - target: {fileID: 2635385768219430554, guid: 4e3560bff46556f4b8dcdd3e31f54a32, + type: 3} propertyPath: m_AnchoredPosition.y - value: -36 + value: -12.379028 objectReference: {fileID: 0} - - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} + - target: {fileID: 2635385768219430554, guid: 4e3560bff46556f4b8dcdd3e31f54a32, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} + - target: {fileID: 2635385768219430554, guid: 4e3560bff46556f4b8dcdd3e31f54a32, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1100119940201048372, guid: 9bde00a16f32d6d42a1280198365e78b, + - target: {fileID: 2635385768219430554, guid: 4e3560bff46556f4b8dcdd3e31f54a32, type: 3} - propertyPath: m_RaycastTarget + propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 3050362772334548697, guid: 9bde00a16f32d6d42a1280198365e78b, + - target: {fileID: 2635385768219430555, guid: 4e3560bff46556f4b8dcdd3e31f54a32, type: 3} propertyPath: m_Name - value: Back / Exit - objectReference: {fileID: 0} - - target: {fileID: 5303711281568416601, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - propertyPath: m_Text - value: Back + value: Log in & settings objectReference: {fileID: 0} - - target: {fileID: 5802092550609450754, guid: 9bde00a16f32d6d42a1280198365e78b, + - target: {fileID: 3381127063046159886, guid: 4e3560bff46556f4b8dcdd3e31f54a32, type: 3} - propertyPath: m_AnchorMax.x - value: 0 + propertyPath: m_Material + value: objectReference: {fileID: 0} - - target: {fileID: 5802092550609450754, guid: 9bde00a16f32d6d42a1280198365e78b, + - target: {fileID: 3837273055418077336, guid: 4e3560bff46556f4b8dcdd3e31f54a32, type: 3} propertyPath: m_AnchorMax.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - propertyPath: scheme - value: - objectReference: {fileID: 0} - - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + - target: {fileID: 3837273055418077336, guid: 4e3560bff46556f4b8dcdd3e31f54a32, type: 3} - propertyPath: m_Navigation.m_Mode + propertyPath: m_AnchorMin.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.size - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Mode - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + - target: {fileID: 3837273055418077336, guid: 4e3560bff46556f4b8dcdd3e31f54a32, type: 3} - propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target - value: - objectReference: {fileID: 0} - - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_CallState - value: 2 - objectReference: {fileID: 0} - - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName - value: CloseBrowserPanel - objectReference: {fileID: 0} - - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName - value: UnityEngine.Object, UnityEngine - objectReference: {fileID: 0} - - target: {fileID: 8554790275978124321, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - propertyPath: m_text - value: Back - objectReference: {fileID: 0} - - target: {fileID: 8554790275978124321, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - propertyPath: m_textAlignment - value: 65535 - objectReference: {fileID: 0} - - target: {fileID: 8554790275978124321, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - propertyPath: m_TextStyleHashCode - value: -1183493901 - objectReference: {fileID: 0} - - target: {fileID: 8554790275978124321, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - propertyPath: m_VerticalAlignment - value: 512 + propertyPath: m_AnchoredPosition.x + value: 0 objectReference: {fileID: 0} - - target: {fileID: 8554790275978124321, guid: 9bde00a16f32d6d42a1280198365e78b, + - target: {fileID: 3837273055418077336, guid: 4e3560bff46556f4b8dcdd3e31f54a32, type: 3} - propertyPath: m_textInfo.lineCount - value: 1 + propertyPath: m_AnchoredPosition.y + value: 0 objectReference: {fileID: 0} - - target: {fileID: 8554790275978124321, guid: 9bde00a16f32d6d42a1280198365e78b, + - target: {fileID: 5180570380256791384, guid: 4e3560bff46556f4b8dcdd3e31f54a32, type: 3} - propertyPath: m_textInfo.pageCount - value: 1 + propertyPath: m_AnchorMax.y + value: 0 objectReference: {fileID: 0} - - target: {fileID: 8554790275978124321, guid: 9bde00a16f32d6d42a1280198365e78b, + - target: {fileID: 5180570380256791384, guid: 4e3560bff46556f4b8dcdd3e31f54a32, type: 3} - propertyPath: m_textInfo.wordCount - value: 1 + propertyPath: m_AnchorMin.y + value: 0 objectReference: {fileID: 0} - - target: {fileID: 8554790275978124321, guid: 9bde00a16f32d6d42a1280198365e78b, + - target: {fileID: 5180570380256791384, guid: 4e3560bff46556f4b8dcdd3e31f54a32, type: 3} - propertyPath: m_HorizontalAlignment - value: 2 + propertyPath: m_AnchoredPosition.x + value: 0 objectReference: {fileID: 0} - - target: {fileID: 8554790275978124321, guid: 9bde00a16f32d6d42a1280198365e78b, + - target: {fileID: 5180570380256791384, guid: 4e3560bff46556f4b8dcdd3e31f54a32, type: 3} - propertyPath: m_textInfo.spaceCount - value: 1 + propertyPath: m_AnchoredPosition.y + value: 0 objectReference: {fileID: 0} - - target: {fileID: 8554790275978124321, guid: 9bde00a16f32d6d42a1280198365e78b, + - target: {fileID: 7422655373767724808, guid: 4e3560bff46556f4b8dcdd3e31f54a32, type: 3} - propertyPath: m_textInfo.characterCount - value: 5 + propertyPath: m_Delegates.Array.data[0].callback.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: objectReference: {fileID: 0} m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} ---- !u!224 &562619463613292778 stripped + m_SourcePrefab: {fileID: 100100000, guid: 4e3560bff46556f4b8dcdd3e31f54a32, type: 3} +--- !u!224 &560606090235584822 stripped RectTransform: - m_CorrespondingSourceObject: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, + m_CorrespondingSourceObject: {fileID: 2635385768219430554, guid: 4e3560bff46556f4b8dcdd3e31f54a32, type: 3} - m_PrefabInstance: {fileID: 560606090120061116} - m_PrefabAsset: {fileID: 0} ---- !u!1 &3283894350837544549 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 3050362772334548697, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - m_PrefabInstance: {fileID: 560606090120061116} - m_PrefabAsset: {fileID: 0} ---- !u!114 &8178277621283601565 stripped -MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 8554790275978124321, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - m_PrefabInstance: {fileID: 560606090120061116} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8878247632055676023} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &8878247632055676023 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 9003385506253720779, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - m_PrefabInstance: {fileID: 560606090120061116} + m_PrefabInstance: {fileID: 2546056752181243820} m_PrefabAsset: {fileID: 0} diff --git a/UI/Prefabs/Report Panel/Report Panel.prefab b/UI/Prefabs/Report Panel/Report Panel.prefab index b418dbf..a0cb8fd 100644 --- a/UI/Prefabs/Report Panel/Report Panel.prefab +++ b/UI/Prefabs/Report Panel/Report Panel.prefab @@ -1,18 +1,171 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: ---- !u!114 &5172607165973715851 +--- !u!1 &884165647751137999 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2516146929250872761} + - component: {fileID: 3832557476416341984} + - component: {fileID: 7544323781485848523} + - component: {fileID: 3732983223319287464} + - component: {fileID: 6676796167917324892} + m_Layer: 5 + m_Name: InvalidDescription + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &2516146929250872761 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 884165647751137999} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 5172607165931077460} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 440, y: -319.89502} + m_SizeDelta: {x: 720, y: 22.83} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3832557476416341984 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 884165647751137999} + m_CullTransparentMesh: 0 +--- !u!114 &7544323781485848523 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 622839552717027456} + m_GameObject: {fileID: 884165647751137999} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} m_Name: m_EditorClassIdentifier: - type: 2 + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Please enter a valid description longer than 20 characters. + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 7357c164f341b0147a6115fd4f243f6b, type: 2} + m_sharedMaterial: {fileID: 21319758026491476, guid: 7357c164f341b0147a6115fd4f243f6b, + type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4279899307 + m_fontColor: {r: 0.6698113, g: 0.078987174, b: 0.1014301, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 18 + m_fontSizeBase: 18 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 1 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!114 &3732983223319287464 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 884165647751137999} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!114 &6676796167917324892 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 884165647751137999} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} + m_Name: + m_EditorClassIdentifier: + reference: InputValidDescription + text: {fileID: 7544323781485848523} + translatedLanguageFontPairingOverrides: {fileID: 0} --- !u!1 &2391549339589373396 GameObject: m_ObjectHideFlags: 0 @@ -91,6 +244,7 @@ MonoBehaviour: m_ChildControlHeight: 0 m_ChildScaleWidth: 0 m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 --- !u!1 &2391549339723379886 GameObject: m_ObjectHideFlags: 0 @@ -153,6 +307,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -254,6 +409,7 @@ MonoBehaviour: m_EditorClassIdentifier: reference: 'Reason for reporting:' text: {fileID: 2391549339723379889} + translatedLanguageFontPairingOverrides: {fileID: 0} --- !u!1 &2391549340146156330 GameObject: m_ObjectHideFlags: 0 @@ -326,6 +482,8 @@ MonoBehaviour: ReportPanelNextButton: {fileID: 4953877138741667721} ReportPanelDoneButton: {fileID: 4953877137789660210} ReportPanelLoadingAnimation: {fileID: 3613570487818305609} + ReportPanelInvalidEmail: {fileID: 5156809301071843908} + ReportPanelInvalidDescription: {fileID: 7544323781485848523} --- !u!1 &2391549340376708266 GameObject: m_ObjectHideFlags: 0 @@ -424,6 +582,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -451,7 +610,7 @@ MonoBehaviour: m_spriteAsset: {fileID: 0} m_tintAllSprites: 0 m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: 0 + m_TextStyleHashCode: -1183493901 m_overrideHtmlColors: 0 m_faceColor: serializedVersion: 2 @@ -463,9 +622,9 @@ MonoBehaviour: m_fontSizeMin: 18 m_fontSizeMax: 72 m_fontStyle: 0 - m_HorizontalAlignment: 1 + m_HorizontalAlignment: 2 m_VerticalAlignment: 256 - m_textAlignment: 258 + m_textAlignment: 65535 m_characterSpacing: 0 m_wordSpacing: 0 m_lineSpacing: 0 @@ -525,6 +684,7 @@ MonoBehaviour: m_EditorClassIdentifier: reference: Obviously explicit mod text: {fileID: 2391549340436633847} + translatedLanguageFontPairingOverrides: {fileID: 0} --- !u!1 &2391549340580683847 GameObject: m_ObjectHideFlags: 0 @@ -603,6 +763,7 @@ MonoBehaviour: m_ChildControlHeight: 0 m_ChildScaleWidth: 0 m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 --- !u!1 &2391549340956669947 GameObject: m_ObjectHideFlags: 0 @@ -665,6 +826,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -844,6 +1006,7 @@ MonoBehaviour: m_ChildControlHeight: 0 m_ChildScaleWidth: 0 m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 --- !u!1 &2391549341199285174 GameObject: m_ObjectHideFlags: 0 @@ -927,47 +1090,6 @@ MonoBehaviour: m_EditorClassIdentifier: m_HorizontalFit: 0 m_VerticalFit: 2 ---- !u!114 &5172607165973715850 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3764400646674925740} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} - m_Name: - m_EditorClassIdentifier: - type: 2 ---- !u!114 &4983395974720420552 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4267927719200361385} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} - m_Name: - m_EditorClassIdentifier: - reference: Back - text: {fileID: 3562473344663558979} ---- !u!114 &2395556085609599812 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4267927719403977389} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} - m_Name: - m_EditorClassIdentifier: - reference: Cancel - text: {fileID: 3562473344313780807} --- !u!1 &5172607164592827400 GameObject: m_ObjectHideFlags: 0 @@ -1032,6 +1154,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 0.02745098, g: 0.75686276, b: 0.84705883, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -1060,6 +1183,7 @@ MonoBehaviour: m_EditorClassIdentifier: m_Navigation: m_Mode: 3 + m_WrapAround: 0 m_SelectOnUp: {fileID: 0} m_SelectOnDown: {fileID: 0} m_SelectOnLeft: {fileID: 0} @@ -1274,6 +1398,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -1288,7 +1413,7 @@ MonoBehaviour: m_fontMaterials: [] m_fontColor32: serializedVersion: 2 - rgba: 2132480014 + rgba: 2149257230 m_fontColor: {r: 0.05490196, g: 0.0627451, b: 0.105882354, a: 0.5} m_enableVertexGradient: 0 m_colorMode: 3 @@ -1301,7 +1426,7 @@ MonoBehaviour: m_spriteAsset: {fileID: 0} m_tintAllSprites: 0 m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: 0 + m_TextStyleHashCode: -1183493901 m_overrideHtmlColors: 0 m_faceColor: serializedVersion: 2 @@ -1314,8 +1439,8 @@ MonoBehaviour: m_fontSizeMax: 72 m_fontStyle: 0 m_HorizontalAlignment: 1 - m_VerticalAlignment: 256 - m_textAlignment: 513 + m_VerticalAlignment: 512 + m_textAlignment: 65535 m_characterSpacing: 0 m_wordSpacing: 0 m_lineSpacing: 0 @@ -1375,6 +1500,7 @@ MonoBehaviour: m_EditorClassIdentifier: reference: Email address text: {fileID: 5172607164684209423} + translatedLanguageFontPairingOverrides: {fileID: 0} --- !u!1 &5172607164856312805 GameObject: m_ObjectHideFlags: 0 @@ -1436,6 +1562,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 0.75686276, g: 0.76862746, b: 0.84313726, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -1523,6 +1650,7 @@ MonoBehaviour: m_EditorClassIdentifier: m_Navigation: m_Mode: 3 + m_WrapAround: 0 m_SelectOnUp: {fileID: 0} m_SelectOnDown: {fileID: 0} m_SelectOnLeft: {fileID: 0} @@ -1619,6 +1747,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -1817,6 +1946,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -1965,6 +2095,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -1992,7 +2123,7 @@ MonoBehaviour: m_spriteAsset: {fileID: 0} m_tintAllSprites: 0 m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: 0 + m_TextStyleHashCode: -1183493901 m_overrideHtmlColors: 0 m_faceColor: serializedVersion: 2 @@ -2005,8 +2136,8 @@ MonoBehaviour: m_fontSizeMax: 72 m_fontStyle: 0 m_HorizontalAlignment: 1 - m_VerticalAlignment: 256 - m_textAlignment: 513 + m_VerticalAlignment: 512 + m_textAlignment: 65535 m_characterSpacing: 0 m_wordSpacing: 0 m_lineSpacing: 0 @@ -2160,6 +2291,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -2187,7 +2319,7 @@ MonoBehaviour: m_spriteAsset: {fileID: 0} m_tintAllSprites: 0 m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: 0 + m_TextStyleHashCode: -1183493901 m_overrideHtmlColors: 0 m_faceColor: serializedVersion: 2 @@ -2201,7 +2333,7 @@ MonoBehaviour: m_fontStyle: 0 m_HorizontalAlignment: 1 m_VerticalAlignment: 256 - m_textAlignment: 257 + m_textAlignment: 65535 m_characterSpacing: 0 m_wordSpacing: 0 m_lineSpacing: 0 @@ -2261,6 +2393,7 @@ MonoBehaviour: m_EditorClassIdentifier: reference: Your email text: {fileID: 5172607165303505427} + translatedLanguageFontPairingOverrides: {fileID: 0} --- !u!1 &5172607165356868038 GameObject: m_ObjectHideFlags: 0 @@ -2324,6 +2457,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -2354,7 +2488,7 @@ MonoBehaviour: m_spriteAsset: {fileID: 0} m_tintAllSprites: 0 m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: 0 + m_TextStyleHashCode: -1183493901 m_overrideHtmlColors: 0 m_faceColor: serializedVersion: 2 @@ -2367,8 +2501,8 @@ MonoBehaviour: m_fontSizeMax: 72 m_fontStyle: 0 m_HorizontalAlignment: 1 - m_VerticalAlignment: 256 - m_textAlignment: 513 + m_VerticalAlignment: 512 + m_textAlignment: 65535 m_characterSpacing: 0 m_wordSpacing: 0 m_lineSpacing: 0 @@ -2445,6 +2579,7 @@ MonoBehaviour: If you'd like to report Copyright infringement and are the copyright holder, select 'DMCA' below. text: {fileID: 5172607165356868034} + translatedLanguageFontPairingOverrides: {fileID: 0} --- !u!1 &5172607165532123088 GameObject: m_ObjectHideFlags: 0 @@ -2507,6 +2642,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -2672,6 +2808,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -2820,6 +2957,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 0.02745098, g: 0.75686276, b: 0.84705883, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -2909,6 +3047,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -3010,6 +3149,7 @@ MonoBehaviour: m_EditorClassIdentifier: reference: Describe the report... text: {fileID: 5172607165611800062} + translatedLanguageFontPairingOverrides: {fileID: 0} --- !u!1 &5172607165658296421 GameObject: m_ObjectHideFlags: 0 @@ -3149,6 +3289,7 @@ MonoBehaviour: m_ChildControlHeight: 0 m_ChildScaleWidth: 0 m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 --- !u!1 &5172607165931077461 GameObject: m_ObjectHideFlags: 0 @@ -3190,6 +3331,8 @@ RectTransform: - {fileID: 5172607166735554722} - {fileID: 2391549340376708267} - {fileID: 2391549341199285175} + - {fileID: 343862506581123752} + - {fileID: 2516146929250872761} - {fileID: 5172607166144280154} m_Father: {fileID: 2391549340146156331} m_RootOrder: 1 @@ -3222,6 +3365,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -3288,6 +3432,7 @@ MonoBehaviour: m_ChildControlHeight: 0 m_ChildScaleWidth: 0 m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 --- !u!1 &5172607166017534748 GameObject: m_ObjectHideFlags: 0 @@ -3350,6 +3495,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -3377,7 +3523,7 @@ MonoBehaviour: m_spriteAsset: {fileID: 0} m_tintAllSprites: 0 m_StyleSheet: {fileID: 0} - m_TextStyleHashCode: 0 + m_TextStyleHashCode: -1183493901 m_overrideHtmlColors: 0 m_faceColor: serializedVersion: 2 @@ -3389,9 +3535,9 @@ MonoBehaviour: m_fontSizeMin: 18 m_fontSizeMax: 72 m_fontStyle: 0 - m_HorizontalAlignment: 1 + m_HorizontalAlignment: 2 m_VerticalAlignment: 256 - m_textAlignment: 258 + m_textAlignment: 65535 m_characterSpacing: 0 m_wordSpacing: 0 m_lineSpacing: 0 @@ -3451,6 +3597,7 @@ MonoBehaviour: m_EditorClassIdentifier: reference: Report a problem text: {fileID: 5172607166017534745} + translatedLanguageFontPairingOverrides: {fileID: 0} --- !u!1 &5172607166144280155 GameObject: m_ObjectHideFlags: 0 @@ -3486,7 +3633,7 @@ RectTransform: - {fileID: 2393947266920543004} - {fileID: 2393947268376000679} m_Father: {fileID: 5172607165931077460} - m_RootOrder: 9 + m_RootOrder: 11 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -3518,6 +3665,7 @@ MonoBehaviour: m_ChildControlHeight: 0 m_ChildScaleWidth: 0 m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 --- !u!1 &5172607166188576079 GameObject: m_ObjectHideFlags: 0 @@ -3579,6 +3727,7 @@ MonoBehaviour: m_EditorClassIdentifier: m_Navigation: m_Mode: 3 + m_WrapAround: 0 m_SelectOnUp: {fileID: 0} m_SelectOnDown: {fileID: 0} m_SelectOnLeft: {fileID: 0} @@ -3792,6 +3941,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 0.05490196, g: 0.0627451, b: 0.105882354, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -3880,6 +4030,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -4029,6 +4180,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -4191,6 +4343,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -4353,6 +4506,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -4429,6 +4583,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 0.05490196, g: 0.0627451, b: 0.105882354, a: 0.78431374} m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -4470,6 +4625,7 @@ MonoBehaviour: m_EditorClassIdentifier: m_Navigation: m_Mode: 3 + m_WrapAround: 0 m_SelectOnUp: {fileID: 0} m_SelectOnDown: {fileID: 0} m_SelectOnLeft: {fileID: 0} @@ -4500,6 +4656,7 @@ MonoBehaviour: m_PersistentCalls: m_Calls: - m_Target: {fileID: 2490486611824912638} + m_TargetAssemblyTypeName: m_MethodName: Close m_Mode: 1 m_Arguments: @@ -4604,6 +4761,7 @@ MonoBehaviour: m_Material: {fileID: 0} m_Color: {r: 0.05490196, g: 0.0627451, b: 0.105882354, a: 1} m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -4631,173 +4789,172 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: type: 2 ---- !u!114 &5172607165973715848 -MonoBehaviour: +--- !u!1 &6300403054020933199 +GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5236656194357645908} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} - m_Name: - m_EditorClassIdentifier: - type: 2 ---- !u!114 &7523245058210308002 -MonoBehaviour: + serializedVersion: 6 + m_Component: + - component: {fileID: 343862506581123752} + - component: {fileID: 1705373355069538035} + - component: {fileID: 5156809301071843908} + - component: {fileID: 431658415831428739} + - component: {fileID: 235076464690463287} + m_Layer: 5 + m_Name: InvalidEmail + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &343862506581123752 +RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6755977913163380199} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} - m_Name: - m_EditorClassIdentifier: - reference: Not working - text: {fileID: 6307507994464609549} ---- !u!114 &5488055146320904415 -MonoBehaviour: + m_GameObject: {fileID: 6300403054020933199} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 5172607165931077460} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 440, y: -319.89502} + m_SizeDelta: {x: 720, y: 22.83} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &1705373355069538035 +CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6755977913815216863} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} - m_Name: - m_EditorClassIdentifier: - reference: Submit - text: {fileID: 6307507993941647925} ---- !u!114 &1408320839518170705 + m_GameObject: {fileID: 6300403054020933199} + m_CullTransparentMesh: 0 +--- !u!114 &5156809301071843908 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6755977913932510266} + m_GameObject: {fileID: 6300403054020933199} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} m_Name: m_EditorClassIdentifier: - reference: Done - text: {fileID: 6307507993824453840} ---- !u!114 &3790818238735214924 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6755977914101635906} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} - m_Name: - m_EditorClassIdentifier: - reference: DMCA - text: {fileID: 6307507995671169960} ---- !u!114 &3291257504723911091 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6755977914112451462} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} - m_Name: - m_EditorClassIdentifier: - reference: Rude content - text: {fileID: 6307507995648308076} ---- !u!114 &1631593738859914021 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6755977914372178539} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} - m_Name: - m_EditorClassIdentifier: - reference: Illegal content - text: {fileID: 6307507995388072577} ---- !u!114 &2120518103897270648 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6755977914675426895} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} - m_Name: - m_EditorClassIdentifier: - reference: False information - text: {fileID: 6307507995087464101} ---- !u!114 &3221010879056571816 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6755977914677044508} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} - m_Name: - m_EditorClassIdentifier: - reference: Stolen content - text: {fileID: 6307507995088958966} ---- !u!114 &7516485437026707547 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6755977914884342526} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} - m_Name: - m_EditorClassIdentifier: - reference: Generic - text: {fileID: 6307507995011174932} ---- !u!114 &6165152757606876946 + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Please enter a valid email address. + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 7357c164f341b0147a6115fd4f243f6b, type: 2} + m_sharedMaterial: {fileID: 21319758026491476, guid: 7357c164f341b0147a6115fd4f243f6b, + type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4279899307 + m_fontColor: {r: 0.6698113, g: 0.078987174, b: 0.1014301, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 18 + m_fontSizeBase: 18 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 1 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!114 &431658415831428739 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6755977914884652929} + m_GameObject: {fileID: 6300403054020933199} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} m_Name: m_EditorClassIdentifier: - reference: Next - text: {fileID: 6307507995011346283} ---- !u!114 &3761363901502656265 + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!114 &235076464690463287 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6755977915133105375} + m_GameObject: {fileID: 6300403054020933199} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} m_Name: m_EditorClassIdentifier: - reference: Other - text: {fileID: 6307507994773390389} + reference: InputValidEmail + text: {fileID: 5156809301071843908} + translatedLanguageFontPairingOverrides: {fileID: 0} --- !u!1001 &2391549339333023764 PrefabInstance: m_ObjectHideFlags: 0 @@ -4823,7 +4980,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_AnchorMax.y - value: 0 + value: 1 objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_AnchorMin.x @@ -4831,7 +4988,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_AnchorMin.y - value: 0 + value: 1 objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_SizeDelta.x @@ -4839,7 +4996,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_SizeDelta.y - value: 0 + value: 40 objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_LocalPosition.x @@ -5057,6 +5214,21 @@ GameObject: type: 3} m_PrefabInstance: {fileID: 2391549339333023764} m_PrefabAsset: {fileID: 0} +--- !u!114 &3761363901502656265 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6755977915133105375} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} + m_Name: + m_EditorClassIdentifier: + reference: Other + text: {fileID: 6307507994773390389} + translatedLanguageFontPairingOverrides: {fileID: 0} --- !u!1001 &2391549339625468746 PrefabInstance: m_ObjectHideFlags: 0 @@ -5191,7 +5363,12 @@ PrefabInstance: - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName - value: OpenDetails + value: CheckValidEmailAndOpenDetails + objectReference: {fileID: 0} + - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_TargetAssemblyTypeName + value: ModIOBrowser.Implementation.Reporting, modio.UI objectReference: {fileID: 0} - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} @@ -5235,16 +5412,16 @@ PrefabInstance: objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} ---- !u!114 &6307507995011346283 stripped +--- !u!114 &4953877138741667721 stripped MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 8554790275978124321, guid: 9bde00a16f32d6d42a1280198365e78b, + m_CorrespondingSourceObject: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} m_PrefabInstance: {fileID: 2391549339625468746} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6755977914884652929} + m_GameObject: {fileID: 0} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Script: {fileID: 11500000, guid: d5ce6686d7065cf4986b2ed3e2773c96, type: 3} m_Name: m_EditorClassIdentifier: --- !u!224 &2393947266920543004 stripped @@ -5253,24 +5430,39 @@ RectTransform: type: 3} m_PrefabInstance: {fileID: 2391549339625468746} m_PrefabAsset: {fileID: 0} ---- !u!114 &4953877138741667721 stripped +--- !u!1 &6755977914884652929 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 9003385506253720779, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + m_PrefabInstance: {fileID: 2391549339625468746} + m_PrefabAsset: {fileID: 0} +--- !u!114 &6307507995011346283 stripped MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + m_CorrespondingSourceObject: {fileID: 8554790275978124321, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} m_PrefabInstance: {fileID: 2391549339625468746} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} + m_GameObject: {fileID: 6755977914884652929} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d5ce6686d7065cf4986b2ed3e2773c96, type: 3} + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!1 &6755977914884652929 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 9003385506253720779, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - m_PrefabInstance: {fileID: 2391549339625468746} +--- !u!114 &6165152757606876946 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6755977914884652929} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} + m_Name: + m_EditorClassIdentifier: + reference: Next + text: {fileID: 6307507995011346283} + translatedLanguageFontPairingOverrides: {fileID: 0} --- !u!1001 &2391549339625819701 PrefabInstance: m_ObjectHideFlags: 0 @@ -5296,7 +5488,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_AnchorMax.y - value: 0 + value: 1 objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_AnchorMin.x @@ -5304,7 +5496,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_AnchorMin.y - value: 0 + value: 1 objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_SizeDelta.x @@ -5312,7 +5504,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_SizeDelta.y - value: 0 + value: 40 objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_LocalPosition.x @@ -5520,6 +5712,21 @@ RectTransform: type: 3} m_PrefabInstance: {fileID: 2391549339625819701} m_PrefabAsset: {fileID: 0} +--- !u!114 &7516485437026707547 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6755977914884342526} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} + m_Name: + m_EditorClassIdentifier: + reference: Generic + text: {fileID: 6307507995011174932} + translatedLanguageFontPairingOverrides: {fileID: 0} --- !u!1001 &2391549339816356311 PrefabInstance: m_ObjectHideFlags: 0 @@ -5545,7 +5752,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_AnchorMax.y - value: 0 + value: 1 objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_AnchorMin.x @@ -5553,7 +5760,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_AnchorMin.y - value: 0 + value: 1 objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_SizeDelta.x @@ -5561,7 +5768,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_SizeDelta.y - value: 0 + value: 40 objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_LocalPosition.x @@ -5784,6 +5991,21 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d5ce6686d7065cf4986b2ed3e2773c96, type: 3} m_Name: m_EditorClassIdentifier: +--- !u!114 &3221010879056571816 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6755977914677044508} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} + m_Name: + m_EditorClassIdentifier: + reference: Stolen content + text: {fileID: 6307507995088958966} + translatedLanguageFontPairingOverrides: {fileID: 0} --- !u!1001 &2391549339819031172 PrefabInstance: m_ObjectHideFlags: 0 @@ -5809,7 +6031,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_AnchorMax.y - value: 0 + value: 1 objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_AnchorMin.x @@ -5817,7 +6039,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_AnchorMin.y - value: 0 + value: 1 objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_SizeDelta.x @@ -5825,7 +6047,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_SizeDelta.y - value: 0 + value: 40 objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_LocalPosition.x @@ -6012,6 +6234,12 @@ PrefabInstance: objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} +--- !u!224 &2393947266963045074 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + m_PrefabInstance: {fileID: 2391549339819031172} + m_PrefabAsset: {fileID: 0} --- !u!114 &4953877138650017351 stripped MonoBehaviour: m_CorrespondingSourceObject: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, @@ -6024,9 +6252,9 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d5ce6686d7065cf4986b2ed3e2773c96, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!224 &2393947266963045074 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, +--- !u!1 &6755977914675426895 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 9003385506253720779, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} m_PrefabInstance: {fileID: 2391549339819031172} m_PrefabAsset: {fileID: 0} @@ -6042,12 +6270,21 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!1 &6755977914675426895 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 9003385506253720779, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - m_PrefabInstance: {fileID: 2391549339819031172} +--- !u!114 &2120518103897270648 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6755977914675426895} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} + m_Name: + m_EditorClassIdentifier: + reference: False information + text: {fileID: 6307507995087464101} + translatedLanguageFontPairingOverrides: {fileID: 0} --- !u!1001 &2391549340053048992 PrefabInstance: m_ObjectHideFlags: 0 @@ -6073,7 +6310,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_AnchorMax.y - value: 0 + value: 1 objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_AnchorMin.x @@ -6081,7 +6318,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_AnchorMin.y - value: 0 + value: 1 objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_SizeDelta.x @@ -6089,7 +6326,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_SizeDelta.y - value: 0 + value: 40 objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_LocalPosition.x @@ -6276,18 +6513,6 @@ PrefabInstance: objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} ---- !u!224 &2393947267733933814 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - m_PrefabInstance: {fileID: 2391549340053048992} - m_PrefabAsset: {fileID: 0} ---- !u!1 &6755977914372178539 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 9003385506253720779, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - m_PrefabInstance: {fileID: 2391549340053048992} - m_PrefabAsset: {fileID: 0} --- !u!114 &6307507995388072577 stripped MonoBehaviour: m_CorrespondingSourceObject: {fileID: 8554790275978124321, guid: 9bde00a16f32d6d42a1280198365e78b, @@ -6300,6 +6525,12 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} m_Name: m_EditorClassIdentifier: +--- !u!224 &2393947267733933814 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + m_PrefabInstance: {fileID: 2391549340053048992} + m_PrefabAsset: {fileID: 0} --- !u!114 &4953877139423009379 stripped MonoBehaviour: m_CorrespondingSourceObject: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, @@ -6312,6 +6543,27 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d5ce6686d7065cf4986b2ed3e2773c96, type: 3} m_Name: m_EditorClassIdentifier: +--- !u!1 &6755977914372178539 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 9003385506253720779, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + m_PrefabInstance: {fileID: 2391549340053048992} + m_PrefabAsset: {fileID: 0} +--- !u!114 &1631593738859914021 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6755977914372178539} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} + m_Name: + m_EditorClassIdentifier: + reference: Illegal content + text: {fileID: 6307507995388072577} + translatedLanguageFontPairingOverrides: {fileID: 0} --- !u!1001 &2391549340315211657 PrefabInstance: m_ObjectHideFlags: 0 @@ -6337,7 +6589,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_AnchorMax.y - value: 0 + value: 1 objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_AnchorMin.x @@ -6345,7 +6597,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_AnchorMin.y - value: 0 + value: 1 objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_SizeDelta.x @@ -6353,7 +6605,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_SizeDelta.y - value: 0 + value: 40 objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_LocalPosition.x @@ -6529,10 +6781,22 @@ PrefabInstance: value: 4 objectReference: {fileID: 0} m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} ---- !u!224 &2393947267471775711 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, + m_SourcePrefab: {fileID: 100100000, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} +--- !u!114 &6307507995671169960 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 8554790275978124321, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + m_PrefabInstance: {fileID: 2391549340315211657} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6755977914101635906} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &6755977914101635906 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 9003385506253720779, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} m_PrefabInstance: {fileID: 2391549340315211657} m_PrefabAsset: {fileID: 0} @@ -6548,24 +6812,27 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d5ce6686d7065cf4986b2ed3e2773c96, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!1 &6755977914101635906 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 9003385506253720779, guid: 9bde00a16f32d6d42a1280198365e78b, +--- !u!224 &2393947267471775711 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} m_PrefabInstance: {fileID: 2391549340315211657} m_PrefabAsset: {fileID: 0} ---- !u!114 &6307507995671169960 stripped +--- !u!114 &3790818238735214924 MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 8554790275978124321, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - m_PrefabInstance: {fileID: 2391549340315211657} + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 6755977914101635906} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} m_Name: m_EditorClassIdentifier: + reference: DMCA + text: {fileID: 6307507995671169960} + translatedLanguageFontPairingOverrides: {fileID: 0} --- !u!1001 &2391549340329570125 PrefabInstance: m_ObjectHideFlags: 0 @@ -6591,7 +6858,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_AnchorMax.y - value: 0 + value: 1 objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_AnchorMin.x @@ -6599,7 +6866,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_AnchorMin.y - value: 0 + value: 1 objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_SizeDelta.x @@ -6607,7 +6874,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_SizeDelta.y - value: 0 + value: 40 objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_LocalPosition.x @@ -6806,6 +7073,12 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} m_Name: m_EditorClassIdentifier: +--- !u!1 &6755977914112451462 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 9003385506253720779, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + m_PrefabInstance: {fileID: 2391549340329570125} + m_PrefabAsset: {fileID: 0} --- !u!114 &4953877139179699086 stripped MonoBehaviour: m_CorrespondingSourceObject: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, @@ -6824,12 +7097,21 @@ RectTransform: type: 3} m_PrefabInstance: {fileID: 2391549340329570125} m_PrefabAsset: {fileID: 0} ---- !u!1 &6755977914112451462 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 9003385506253720779, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - m_PrefabInstance: {fileID: 2391549340329570125} +--- !u!114 &3291257504723911091 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6755977914112451462} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} + m_Name: + m_EditorClassIdentifier: + reference: Rude content + text: {fileID: 6307507995648308076} + translatedLanguageFontPairingOverrides: {fileID: 0} --- !u!1001 &2391549340552509681 PrefabInstance: m_ObjectHideFlags: 0 @@ -7054,6 +7336,21 @@ RectTransform: type: 3} m_PrefabInstance: {fileID: 2391549340552509681} m_PrefabAsset: {fileID: 0} +--- !u!114 &1408320839518170705 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6755977913932510266} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} + m_Name: + m_EditorClassIdentifier: + reference: Done + text: {fileID: 6307507993824453840} + translatedLanguageFontPairingOverrides: {fileID: 0} --- !u!1001 &2391549340703292948 PrefabInstance: m_ObjectHideFlags: 0 @@ -7188,7 +7485,12 @@ PrefabInstance: - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName - value: OpenSummary + value: CheckValidDescriptionsAndOpenSummary + objectReference: {fileID: 0} + - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_TargetAssemblyTypeName + value: ModIOBrowser.Implementation.Reporting, modio.UI objectReference: {fileID: 0} - target: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} @@ -7237,6 +7539,24 @@ PrefabInstance: objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} +--- !u!1 &6755977913815216863 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 9003385506253720779, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + m_PrefabInstance: {fileID: 2391549340703292948} + m_PrefabAsset: {fileID: 0} +--- !u!114 &6307507993941647925 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 8554790275978124321, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + m_PrefabInstance: {fileID: 2391549340703292948} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6755977913815216863} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!224 &2393947267990208066 stripped RectTransform: m_CorrespondingSourceObject: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, @@ -7255,24 +7575,21 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d5ce6686d7065cf4986b2ed3e2773c96, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!114 &6307507993941647925 stripped +--- !u!114 &5488055146320904415 MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 8554790275978124321, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - m_PrefabInstance: {fileID: 2391549340703292948} + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 6755977913815216863} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!1 &6755977913815216863 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 9003385506253720779, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - m_PrefabInstance: {fileID: 2391549340703292948} - m_PrefabAsset: {fileID: 0} + reference: Submit + text: {fileID: 6307507993941647925} + translatedLanguageFontPairingOverrides: {fileID: 0} --- !u!1001 &2391549341255579948 PrefabInstance: m_ObjectHideFlags: 0 @@ -7298,7 +7615,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_AnchorMax.y - value: 0 + value: 1 objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_AnchorMin.x @@ -7306,7 +7623,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_AnchorMin.y - value: 0 + value: 1 objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_SizeDelta.x @@ -7314,7 +7631,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_SizeDelta.y - value: 0 + value: 40 objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_LocalPosition.x @@ -7501,12 +7818,6 @@ PrefabInstance: objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} ---- !u!1 &6755977913163380199 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 9003385506253720779, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - m_PrefabInstance: {fileID: 2391549341255579948} - m_PrefabAsset: {fileID: 0} --- !u!114 &4953877138224295407 stripped MonoBehaviour: m_CorrespondingSourceObject: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, @@ -7519,6 +7830,12 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d5ce6686d7065cf4986b2ed3e2773c96, type: 3} m_Name: m_EditorClassIdentifier: +--- !u!1 &6755977913163380199 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 9003385506253720779, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + m_PrefabInstance: {fileID: 2391549341255579948} + m_PrefabAsset: {fileID: 0} --- !u!224 &2393947268412176762 stripped RectTransform: m_CorrespondingSourceObject: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, @@ -7537,6 +7854,21 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} m_Name: m_EditorClassIdentifier: +--- !u!114 &7523245058210308002 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6755977913163380199} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} + m_Name: + m_EditorClassIdentifier: + reference: Not working + text: {fileID: 6307507994464609549} + translatedLanguageFontPairingOverrides: {fileID: 0} --- !u!1001 &5172607164694050406 PrefabInstance: m_ObjectHideFlags: 0 @@ -7562,7 +7894,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_AnchorMax.y - value: 0 + value: 1 objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_AnchorMin.x @@ -7570,7 +7902,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_AnchorMin.y - value: 0 + value: 1 objectReference: {fileID: 0} - target: {fileID: 2673114980991062, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} propertyPath: m_SizeDelta.x @@ -7715,16 +8047,16 @@ PrefabInstance: objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} ---- !u!114 &3562473344313780807 stripped +--- !u!114 &2469945915816321701 stripped MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 8554790275978124321, guid: 9bde00a16f32d6d42a1280198365e78b, + m_CorrespondingSourceObject: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} m_PrefabInstance: {fileID: 5172607164694050406} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4267927719403977389} + m_GameObject: {fileID: 0} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Script: {fileID: 11500000, guid: d5ce6686d7065cf4986b2ed3e2773c96, type: 3} m_Name: m_EditorClassIdentifier: --- !u!1 &4267927719403977389 stripped @@ -7733,16 +8065,16 @@ GameObject: type: 3} m_PrefabInstance: {fileID: 5172607164694050406} m_PrefabAsset: {fileID: 0} ---- !u!114 &2469945915816321701 stripped +--- !u!114 &3562473344313780807 stripped MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, + m_CorrespondingSourceObject: {fileID: 8554790275978124321, guid: 9bde00a16f32d6d42a1280198365e78b, type: 3} m_PrefabInstance: {fileID: 5172607164694050406} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} + m_GameObject: {fileID: 4267927719403977389} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d5ce6686d7065cf4986b2ed3e2773c96, type: 3} + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} m_Name: m_EditorClassIdentifier: --- !u!224 &5170613823339001392 stripped @@ -7751,6 +8083,21 @@ RectTransform: type: 3} m_PrefabInstance: {fileID: 5172607164694050406} m_PrefabAsset: {fileID: 0} +--- !u!114 &2395556085609599812 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4267927719403977389} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} + m_Name: + m_EditorClassIdentifier: + reference: Cancel + text: {fileID: 3562473344313780807} + translatedLanguageFontPairingOverrides: {fileID: 0} --- !u!1001 &5172607164889188194 PrefabInstance: m_ObjectHideFlags: 0 @@ -7926,12 +8273,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!1 &4267927719200361385 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 9003385506253720779, guid: 9bde00a16f32d6d42a1280198365e78b, - type: 3} - m_PrefabInstance: {fileID: 5172607164889188194} - m_PrefabAsset: {fileID: 0} --- !u!114 &2469945915458081697 stripped MonoBehaviour: m_CorrespondingSourceObject: {fileID: 7318288332265493699, guid: 9bde00a16f32d6d42a1280198365e78b, @@ -7950,6 +8291,27 @@ RectTransform: type: 3} m_PrefabInstance: {fileID: 5172607164889188194} m_PrefabAsset: {fileID: 0} +--- !u!1 &4267927719200361385 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 9003385506253720779, guid: 9bde00a16f32d6d42a1280198365e78b, + type: 3} + m_PrefabInstance: {fileID: 5172607164889188194} + m_PrefabAsset: {fileID: 0} +--- !u!114 &4983395974720420552 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4267927719200361385} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9649349969635e94ab9545060496a7ee, type: 3} + m_Name: + m_EditorClassIdentifier: + reference: Back + text: {fileID: 3562473344663558979} + translatedLanguageFontPairingOverrides: {fileID: 0} --- !u!1001 &5172607165973715853 PrefabInstance: m_ObjectHideFlags: 0 @@ -8149,9 +8511,9 @@ PrefabInstance: objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: d5fdf02cff5c92349853772a91817fbc, type: 3} ---- !u!1 &3764400646674925740 stripped +--- !u!1 &5236656194357645908 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 8355616287565517601, guid: d5fdf02cff5c92349853772a91817fbc, + m_CorrespondingSourceObject: {fileID: 1109184991508138457, guid: d5fdf02cff5c92349853772a91817fbc, type: 3} m_PrefabInstance: {fileID: 5172607165973715853} m_PrefabAsset: {fileID: 0} @@ -8173,9 +8535,48 @@ GameObject: type: 3} m_PrefabInstance: {fileID: 5172607165973715853} m_PrefabAsset: {fileID: 0} ---- !u!1 &5236656194357645908 stripped +--- !u!1 &3764400646674925740 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 1109184991508138457, guid: d5fdf02cff5c92349853772a91817fbc, + m_CorrespondingSourceObject: {fileID: 8355616287565517601, guid: d5fdf02cff5c92349853772a91817fbc, type: 3} m_PrefabInstance: {fileID: 5172607165973715853} m_PrefabAsset: {fileID: 0} +--- !u!114 &5172607165973715851 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 622839552717027456} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} + m_Name: + m_EditorClassIdentifier: + type: 2 +--- !u!114 &5172607165973715850 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3764400646674925740} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} + m_Name: + m_EditorClassIdentifier: + type: 2 +--- !u!114 &5172607165973715848 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5236656194357645908} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0bb7d01b14ae58d489b1d0e368d78625, type: 3} + m_Name: + m_EditorClassIdentifier: + type: 2 diff --git a/UI/Scripts/Browser.cs b/UI/Scripts/Browser.cs index bbfa627..2c3d011 100644 --- a/UI/Scripts/Browser.cs +++ b/UI/Scripts/Browser.cs @@ -1,11 +1,13 @@ using System; using System.Reflection; -using JetBrains.Annotations; +using System.Threading.Tasks; using ModIO; +using ModIO.Implementation; using ModIO.Util; using ModIOBrowser.Implementation; using UnityEngine; using UnityEngine.UI; +using Result = ModIO.Result; namespace ModIOBrowser { @@ -23,9 +25,10 @@ public class Browser : MonoSingleton [SerializeField] bool autoInitialize = true; internal static bool allowEmailAuthentication = true; internal static bool allowExternalAuthentication = true; - + [SerializeField] public UiSettings uiConfig; [SerializeField] public Home homePanel; + [SerializeField] private SearchFilter[] browserRowSearchFilters; public SingletonAwakener SingletonAwakener; [Header("Main")] @@ -77,7 +80,7 @@ public enum VirtualKeyboardType public static bool IsOpen = false; public SearchFilter FeaturedSearchFilter { get; private set; } - public SearchFilter[] BrowserRowSearchFilters { get; private set; } + public SearchFilter[] BrowserRowSearchFilters => browserRowSearchFilters; // Use Awake() to setup the Singleton for Browser.cs and initialize the plugin protected override void Awake() @@ -289,6 +292,7 @@ public static void SetupGOGAuthenticationOption(RetrieveAuthenticationCodeDelega /// and the user's email address and the authentication flow for PlayStation will be available. ///
/// Delegate to get the PlayStation auth code + /// /// (Optional) provide the users email address public static void SetupPlayStationAuthenticationOption(RetrieveAuthenticationCodeDelegate getPlayStationAuthCodeDelegate, PlayStationEnvironment environment, string userEmail = null) { @@ -307,7 +311,7 @@ public void SetFeaturedFilter(SearchFilter searchFilter) public void SetBrowserRowSearchFilters(SearchFilter[] searchFilters) { - this.BrowserRowSearchFilters = searchFilters; + this.browserRowSearchFilters = searchFilters; } private void SetModRowFilterDefaults() @@ -315,50 +319,62 @@ private void SetModRowFilterDefaults() if(this.FeaturedSearchFilter == null) { this.FeaturedSearchFilter = new SearchFilter(); + FeaturedSearchFilter.RevenueType = RevenueType.Free; this.FeaturedSearchFilter.SetPageIndex(0); this.FeaturedSearchFilter.SetPageSize(10); - this.FeaturedSearchFilter.SortBy(SortModsBy.Downloads); + this.FeaturedSearchFilter.SetSortBy(SortModsBy.Downloads); // Note: this is a mistake on the backend api. Ascending is swapped with descending for this field this.FeaturedSearchFilter.SetToAscending(true); } - if(BrowserRowSearchFilters == null) + if(browserRowSearchFilters == null || browserRowSearchFilters.Length == 0) { - BrowserRowSearchFilters = new SearchFilter[4]; - // Edit filter for next row + browserRowSearchFilters = new SearchFilter[4]; + var filter = new SearchFilter(); + // Edit filter for next row + filter = new SearchFilter(); filter.SetPageIndex(0); filter.SetPageSize(20); - filter.SortBy(SortModsBy.DateSubmitted); - filter.SetToAscending(false); - BrowserRowSearchFilters[0] = filter; + filter.SetSortBy(SortModsBy.Rating); + filter.SetToAscending(true); + browserRowSearchFilters[0] = filter; filter = new SearchFilter(); // Edit filter for next row filter = new SearchFilter(); filter.SetPageIndex(0); filter.SetPageSize(20); - filter.SortBy(SortModsBy.Subscribers); + filter.SetSortBy(SortModsBy.Subscribers); filter.SetToAscending(true); - BrowserRowSearchFilters[1] = filter; + browserRowSearchFilters[1] = filter; filter = new SearchFilter(); // Edit filter for next row filter = new SearchFilter(); filter.SetPageIndex(0); filter.SetPageSize(20); - filter.SortBy(SortModsBy.Popular); + filter.SetSortBy(SortModsBy.Popular); filter.SetToAscending(false); - BrowserRowSearchFilters[2] = filter; + browserRowSearchFilters[2] = filter; - filter = new SearchFilter(); // Edit filter for next row filter = new SearchFilter(); filter.SetPageIndex(0); filter.SetPageSize(20); - filter.SortBy(SortModsBy.Rating); - filter.SetToAscending(true); - BrowserRowSearchFilters[3] = filter; + filter.SetSortBy(SortModsBy.DateSubmitted); + filter.SetToAscending(false); + browserRowSearchFilters[3] = filter; + } + else + { + foreach(var filter in this.browserRowSearchFilters) + { + if(filter.RevenueType == RevenueType.FreeAndPaid || filter.RevenueType == RevenueType.Paid) + filter.RevenueType = RevenueType.Free; + filter.SetPageIndex(0); + filter.SetPageSize(20); + } } } @@ -384,12 +400,7 @@ static void OnInitialize(Result result) else { Close(); - Debug.LogWarning("[mod.io Browser] Failed to Initialize ModIO Plugin. " - + "Make sure your config file is setup, located in " - + "Assets/Resources/mod.io\nAlso check you are using the correct " - + "server address ('https://api.mod.io/v1' for production or " - + "'https://api.test.mod.io/v1' for the test server) and that " - + "you've supplied the API Key and game Id for your game."); + Debug.LogWarning("[mod.io Browser] Failed to Initialize ModIO Plugin. Make sure your config file (Tools -> mod.io -> Edit Settings) contains the correct server address (test or production) and that you've supplied the game id and API Key for your game."); } } @@ -416,7 +427,6 @@ static async void IsInitialized() } Collection.Instance.CacheLocalSubscribedModStatuses(); - Implementation.Avatar.Instance.SetupUser(); // open the browser panel (This will show loading icons etc, but wont load yet) Home.Instance.Open(); @@ -427,12 +437,21 @@ static async void IsInitialized() { Authentication.Instance.IsAuthenticated = true; ModIOUnity.FetchUpdates(delegate { }); + + // We may require the new access token before getting mods + await Authentication.GetNewAccessToken(); } else { Authentication.Instance.IsAuthenticated = false; + + // Attempt to open an authentication option if one exists + AuthenticationPanels.Instance.SkippedIntoTheOnlyExistingAuthenticationOption(); } + Authentication.Instance.currentAuthenticationPortal = Settings.build.userPortal; + Implementation.Avatar.Instance.SetupUser(); + // refresh the home panel now that we know if our access token will work Home.Instance.RefreshHomePanel(); ModIOUnity.EnableModManagement(Mods.ModManagementEvent); @@ -445,7 +464,6 @@ static async void IsInitialized() #endregion #region Editor helpers - [ExposeMethodInEditor] public void CheckForMissingReferencesInScene() { Debug.LogWarning("This function may give false positives, mostly in the case of text input fields and dropdowns"); diff --git a/UI/Scripts/FindMissingScripts.cs b/UI/Scripts/FindMissingScripts.cs new file mode 100644 index 0000000..2ca7263 --- /dev/null +++ b/UI/Scripts/FindMissingScripts.cs @@ -0,0 +1,46 @@ +#if UNITY_EDITOR +using System; +using System.Linq; +using UnityEditor; +using UnityEngine; + +public class FindMissingScripts : MonoBehaviour +{ + [MenuItem("Tools/Find Missing Scripts In Project Menu")] + static void FindMissingScriptsInProjectMenu() + { + string[] prefabPaths = AssetDatabase.GetAllAssetPaths().Where(path => path.EndsWith(".prefab", StringComparison.OrdinalIgnoreCase)).ToArray(); + + foreach(var path in prefabPaths) + { + GameObject prefab = AssetDatabase.LoadAssetAtPath(path); + foreach(var component in prefab.GetComponentsInChildren()) + { + if(component == null) + { + Debug.Log("Prefab found with missing script " + path, prefab); + break; + } + } + } + Debug.Log("Completed Search"); + } + + [MenuItem("Tools/Find Missing Scripts In Scene Menu")] + static void FindMissingScriptsInSceneMenuItem() + { + foreach(var go in GameObject.FindObjectsOfType(true)) + { + foreach(var component in go.GetComponentsInChildren()) + { + if(component == null) + { + Debug.Log("Prefab found with missing script " + go.name, go); + break; + } + } + } + Debug.Log("Completed Search"); + } +} +#endif diff --git a/UI/Scripts/FindMissingScripts.cs.meta b/UI/Scripts/FindMissingScripts.cs.meta new file mode 100644 index 0000000..ac9fb27 --- /dev/null +++ b/UI/Scripts/FindMissingScripts.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5c5eac4001dd8fa4ea157dc3d9f35767 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UI/Scripts/Mods.cs b/UI/Scripts/Mods.cs index 9a92917..c70fd45 100644 --- a/UI/Scripts/Mods.cs +++ b/UI/Scripts/Mods.cs @@ -1,5 +1,6 @@ using System; using ModIO; +using ModIO.Implementation.API.Objects; using ModIOBrowser.Implementation; namespace ModIOBrowser @@ -10,7 +11,7 @@ static class Mods static ModId lastRatedMod; static ModRating lastRatingType; - // globally cached and used to keep track of the current mod management operation progress + // globally cached and used to keep track of the current mod management operation progress public static ProgressHandle CurrentModManagementOperationHandle; public static ModManagementEventDelegate OnModManagementEvent; @@ -70,6 +71,7 @@ internal static void SubscribeToEvent(ModProfile profile, Action callback = null }); } + /// /// This works the same as SubscribeToModEvent() but it unsubscribes instead. /// Always use this method to unsubscribe from mods so that we can globally track the result and @@ -231,7 +233,7 @@ public static void ModManagementEvent(ModManagementEventType type, ModId id, Res /// /// this can be null and will be handled appropriately internal static void UpdateProgressState() => UpdateProgressStateInternal(CurrentModManagementOperationHandle); - + private static void UpdateProgressStateInternal(ProgressHandle handle) { if(handle == null) diff --git a/UI/Scripts/Panels/Authentication.cs b/UI/Scripts/Panels/Authentication.cs index 3267770..b05a5ff 100644 --- a/UI/Scripts/Panels/Authentication.cs +++ b/UI/Scripts/Panels/Authentication.cs @@ -1,4 +1,5 @@ -using ModIO; +using System.Threading.Tasks; +using ModIO; using ModIO.Util; using UnityEngine; @@ -18,7 +19,7 @@ public partial class Authentication : SelfInstancingMonoSingleton response) { if(response.result.Succeeded()) @@ -62,13 +63,13 @@ public void HyperLinkToExternalLogin() { WebBrowser.OpenWebPage($"{currentAuthToken.url}?code={currentAuthToken.code}"); } - + public void CancelExternalAuthenticationRequest() { AuthenticationPanels.Instance.Close(); currentAuthToken.Cancel(); } - + public void CopyExternalAuthenticationCodeToClipboard() { GUIUtility.systemCopyBuffer = currentAuthToken.code; @@ -259,19 +260,6 @@ internal void SubmitPlayStationAuthenticationRequest() public void HyperLinkToPrivacyPolicy() => AuthenticationPanels.Instance.HyperLinkToPrivacyPolicy(); - void Logout() - { - if(ModIOUnity.LogOutCurrentUser().Succeeded()) - { - Avatar.Instance.Avatar_Main.gameObject.SetActive(false); - IsAuthenticated = false; - Close(); - } - else - { - // TODO inform the user if this failed (Which really shouldn't ever fail) - } - } #endregion #region Recieve Response @@ -322,18 +310,6 @@ public void CodeSubmitted(Result result) if(result.Succeeded()) { AuthenticationPanels.Instance.OpenPanel_Complete(); - ModIOUnity.EnableModManagement(Mods.ModManagementEvent); - ModIOUnity.FetchUpdates(delegate - { - if(Details.IsOn()) - { - Details.Instance.UpdateSubscribeButtonText(); - } - if(Collection.IsOn()) - { - Collection.Instance.RefreshList(); - } - }); } else { @@ -350,6 +326,119 @@ public void CodeSubmitted(Result result) } } } + + public static async Task GetNewAccessToken() + { + //Re-cache the TOS because we need the hash + var response = await ModIOUnityAsync.GetTermsOfUse(); + TermsHash hash = default; + if(response.result.Succeeded()) + { + hash = response.value.hash; + } + + // Use TCS to wait for the callbacks inside the following blocks to complete so we can + // inform the original invocation point when the access token has been renewed (or attempted to) + TaskCompletionSource callbackTcs = new TaskCompletionSource(); + + if(getSteamAppTicket != null) + { + getSteamAppTicket(appTicket => + { + ModIOUnity.AuthenticateUserViaSteam(appTicket, + optionalThirdPartyEmailAddressUsedForAuthentication, + hash, + delegate + { + Instance.currentAuthenticationPortal = UserPortal.Steam; + ModIOUnity.EnableModManagement(Mods.ModManagementEvent); + callbackTcs.SetResult(true); + }); + }); + await callbackTcs.Task; + } + else if(getXboxToken != null) + { + getXboxToken(token => + { + ModIOUnity.AuthenticateUserViaXbox(token, + optionalThirdPartyEmailAddressUsedForAuthentication, + hash, + delegate + { + Instance.currentAuthenticationPortal = UserPortal.XboxLive; + ModIOUnity.EnableModManagement(Mods.ModManagementEvent); + callbackTcs.SetResult(true); + }); + }); + await callbackTcs.Task; + } + else if(getSwitchToken != null) + { + getSwitchToken(token => + { + ModIOUnity.AuthenticateUserViaSwitch(token, + optionalThirdPartyEmailAddressUsedForAuthentication, + hash, + delegate + { + Instance.currentAuthenticationPortal = UserPortal.Nintendo; + ModIOUnity.EnableModManagement(Mods.ModManagementEvent); + callbackTcs.SetResult(true); + }); + }); + await callbackTcs.Task; + } + else if(getPlayStationAuthCode != null) + { + getPlayStationAuthCode(authCode => + { + ModIOUnity.AuthenticateUserViaPlayStation(authCode, + optionalThirdPartyEmailAddressUsedForAuthentication, + hash, + PSEnvironment, + delegate + { + Instance.currentAuthenticationPortal = UserPortal.PlayStationNetwork; + ModIOUnity.EnableModManagement(Mods.ModManagementEvent); + callbackTcs.SetResult(true); + }); + }); + await callbackTcs.Task; + } + else if(getGogAuthCode != null) + { + getGogAuthCode(authCode => + { + ModIOUnity.AuthenticateUserViaGOG(authCode, + optionalThirdPartyEmailAddressUsedForAuthentication, + hash, + delegate + { + Instance.currentAuthenticationPortal = UserPortal.GOG; + ModIOUnity.EnableModManagement(Mods.ModManagementEvent); + callbackTcs.SetResult(true); + }); + }); + await callbackTcs.Task; + } + else if(getEpicAuthCode != null) + { + getEpicAuthCode(authCode => + { + ModIOUnity.AuthenticateUserViaEpic(authCode, + optionalThirdPartyEmailAddressUsedForAuthentication, + hash, + delegate + { + Instance.currentAuthenticationPortal = UserPortal.EpicGamesStore; + ModIOUnity.EnableModManagement(Mods.ModManagementEvent); + callbackTcs.SetResult(true); + }); + }); + await callbackTcs.Task; + } + } void CacheTermsOfUseAndLinks(TermsOfUse TOS) { @@ -371,20 +460,10 @@ void ThirdPartyAuthenticationSubmitted(Result result, UserPortal authenticationP { if(result.Succeeded()) { + Home.Instance.RefreshHomePanel(); + currentAuthenticationPortal = authenticationPortal; AuthenticationPanels.Instance.OpenPanel_Complete(); - ModIOUnity.EnableModManagement(Mods.ModManagementEvent); - ModIOUnity.FetchUpdates(delegate - { - if(Details.IsOn()) - { - Details.Instance.UpdateSubscribeButtonText(); - } - if(Collection.IsOn()) - { - Collection.Instance.RefreshList(); - } - }); } else { diff --git a/UI/Scripts/Panels/Authentication/AuthenticationPanels.cs b/UI/Scripts/Panels/Authentication/AuthenticationPanels.cs index 8bcfc29..f41347c 100644 --- a/UI/Scripts/Panels/Authentication/AuthenticationPanels.cs +++ b/UI/Scripts/Panels/Authentication/AuthenticationPanels.cs @@ -72,6 +72,7 @@ void Logout() { Avatar.Instance.Avatar_Main.gameObject.SetActive(false); Authentication.Instance.IsAuthenticated = false; + SubscribedProgressTab.HideAllTabs(); Close(); } else @@ -99,7 +100,7 @@ public void Open() /// option it will skip the panel to choose one and instead begin the auth flow immediately ///
/// true if it found one single option and it has triggered it - bool SkippedIntoTheOnlyExistingAuthenticationOption() + public bool SkippedIntoTheOnlyExistingAuthenticationOption() { int numAuthOptions = 0; // Add 1 for every enabled auth method @@ -118,27 +119,27 @@ bool SkippedIntoTheOnlyExistingAuthenticationOption() } Authentication.Instance.GetTermsOfUse(); - if(Authentication.getSteamAppTicket == null) + if(Authentication.getSteamAppTicket != null) { authenticationMethodAfterAgreeingToTheTOS = Authentication.Instance.SubmitSteamAuthenticationRequest; } - else if(Authentication.getXboxToken == null) + else if(Authentication.getXboxToken != null) { authenticationMethodAfterAgreeingToTheTOS = Authentication.Instance.SubmitXboxAuthenticationRequest; } - else if(Authentication.getSwitchToken == null) + else if(Authentication.getSwitchToken != null) { authenticationMethodAfterAgreeingToTheTOS = Authentication.Instance.SubmitSwitchAuthenticationRequest; } - else if(Authentication.getPlayStationAuthCode == null) + else if(Authentication.getPlayStationAuthCode != null) { authenticationMethodAfterAgreeingToTheTOS = Authentication.Instance.SubmitPlayStationAuthenticationRequest; } - else if(Authentication.getGogAuthCode == null) + else if(Authentication.getGogAuthCode != null) { authenticationMethodAfterAgreeingToTheTOS = Authentication.Instance.SubmitGogAuthenticationRequest; } - else if(Authentication.getEpicAuthCode == null) + else if(Authentication.getEpicAuthCode != null) { authenticationMethodAfterAgreeingToTheTOS = Authentication.Instance.SubmitEpicAuthenticationRequest; } @@ -172,7 +173,7 @@ void OpenConnectionTypePanel() Selectable platformButton = null; Selectable secondLoginButton = null; Selectable loginButton = null; - + //-----------------------------------------------------------------------------------// // EMAIL AUTHENTICATION // //-----------------------------------------------------------------------------------// @@ -204,10 +205,10 @@ void OpenConnectionTypePanel() Authentication.Instance.GetTermsOfUse(); authenticationMethodAfterAgreeingToTheTOS = Authentication.Instance.SendRequestExternalAuthentication; }); - + // Selection - Default to this if enabled InputNavigation.Instance.Select(AuthenticationPanelConnectViaExternalButton); - + if (loginButton == null) { loginButton = AuthenticationPanelConnectViaExternalButton; @@ -559,10 +560,10 @@ public void OpenPanel_ExternalAuthentication(ExternalAuthenticationToken token) HideAllPanels(); AuthenticationPanel.SetActive(true); AuthenticationPanelExternalLogin.SetActive(true); - + AuthenticationPanelExternalCode.text = token.code; AuthenticationPanelExternalUrl.text = token.url.Replace("https://",""); - + InputNavigation.Instance.Select(AuthenticationPanelExternalCancelButton); GenerateQRCodeForLogin(token); @@ -572,14 +573,14 @@ public void OpenPanel_ExternalAuthentication(ExternalAuthenticationToken token) void GenerateQRCodeForLogin(ExternalAuthenticationToken token) { // Generate the payload for the QR code - string url = $"{token.url}?code={token.code}"; + string url = token.autoUrl; PayloadGenerator.Url payloadGenerator = new PayloadGenerator.Url(url); - + // Generate the QR code data QRCodeGenerator generator = new QRCodeGenerator(); QRCodeData data = generator.CreateQrCode(payloadGenerator.ToString(), QRCodeGenerator.ECCLevel.Q); PngByteQRCode png = new PngByteQRCode(data); - + // Convert to Sprite Texture2D texture = new Texture2D(0, 0); texture.LoadImage(png.GetGraphic(10), false); @@ -590,6 +591,7 @@ void GenerateQRCodeForLogin(ExternalAuthenticationToken token) IEnumerator DisplayTimeRemainingForValidCodeAndGetNewCodeWhenExpiredAndCheckIfAuthenticationSucceeded() { + double remainingSeconds = 250; while(AuthenticationPanelExternalLogin.activeSelf) { if(Authentication.Instance.currentAuthToken.task.IsCompleted) @@ -597,7 +599,6 @@ IEnumerator DisplayTimeRemainingForValidCodeAndGetNewCodeWhenExpiredAndCheckIfAu if(Authentication.Instance.currentAuthToken.task.Result.Succeeded()) { OpenPanel_Complete(); - ModIOUnity.EnableModManagement(Mods.ModManagementEvent); } else { @@ -605,27 +606,25 @@ IEnumerator DisplayTimeRemainingForValidCodeAndGetNewCodeWhenExpiredAndCheckIfAu } yield break; } - - // calculate time remaining - TimeSpan duration = Authentication.Instance.currentAuthToken.expiryTime - DateTime.UtcNow; - double remainingSeconds = duration.TotalSeconds; - + if(remainingSeconds < 1) { // display 0 AuthenticationPanelExternalCodeTimer.text = "0 secs"; - + // get new code ModIOUnity.RequestExternalAuthentication(Authentication.Instance.ReceivedExternalAuthenticationToken); - + // end this coroutine (it will restart on the callback for the new code) yield break; } - + + remainingSeconds--; + // set timer to remaining seconds AuthenticationPanelExternalCodeTimer.text = $"{remainingSeconds:0} secs"; - - yield return null; + + yield return new WaitForSeconds(1f); } } @@ -866,6 +865,22 @@ IEnumerator NextFrameSelectionChange(Selectable selectable) public void OpenPanel_Complete() { + // Successful Authentication means we need to turn on mod management and fetch updates + //----------------------------------------------------------------------------------- + ModIOUnity.EnableModManagement(Mods.ModManagementEvent); + ModIOUnity.FetchUpdates(delegate + { + if(Details.IsOn()) + { + Details.Instance.UpdateSubscribeButtonText(); + } + if(Collection.IsOn()) + { + Collection.Instance.RefreshList(); + } + }); + //----------------------------------------------------------------------------------- + Authentication.Instance.IsAuthenticated = true; HideAllPanels(); diff --git a/UI/Scripts/Panels/Authentication/Avatar.cs b/UI/Scripts/Panels/Authentication/Avatar.cs index 23042eb..1adb5fe 100644 --- a/UI/Scripts/Panels/Authentication/Avatar.cs +++ b/UI/Scripts/Panels/Authentication/Avatar.cs @@ -50,7 +50,7 @@ private async void SetupUser(UserPortal currentAuthenticationPortal, UserProfile { var sprite = await GetSprite(currentAuthenticationPortal, currentUserProfile); - if (sprite == null) + if (sprite == null || !Authentication.Instance.IsAuthenticated) { ShowDefaultAvatar(); return; diff --git a/UI/Scripts/Panels/Collection.cs b/UI/Scripts/Panels/Collection.cs index 3d13fa7..0bc8ca6 100644 --- a/UI/Scripts/Panels/Collection.cs +++ b/UI/Scripts/Panels/Collection.cs @@ -2,6 +2,7 @@ using System.Collections; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; using TMPro; using UnityEngine; using UnityEngine.UI; @@ -28,6 +29,7 @@ public class Collection : SelfInstancingMonoSingleton [SerializeField] Image CollectionPanelHeaderBackground; [SerializeField] Selectable defaultCollectionSelection; internal CollectionModListItem currentSelectedCollectionListItem; + public ModProfile[] purchasedMods = Array.Empty(); public SubscribedMod[] subscribedMods = Array.Empty(); public InstalledMod[] installedMods = Array.Empty(); @@ -51,7 +53,7 @@ public class Collection : SelfInstancingMonoSingleton internal Translation CollectionPanelTitleTranslation = null; public static bool IsOn() => Instance != null && Instance.CollectionPanel != null && Instance.CollectionPanel.activeSelf; - + // TODO This region is for the Uninstall confirmation dialog, and needs to be merged to the reusable dialog instead #region Confirm Unsubscibe / Uninstall public void CloseUninstallConfirmation() @@ -65,7 +67,7 @@ public void OpenUninstallConfirmation(ModProfile profile) uninstallConfirmationPanelModName.text = profile.name; uninstallConfirmationPanelFileSize.text = ""; // TODO need to add file size currentSelectedModForUninstall = profile; - uninstallConfirmationPanel.SetActive(true); + uninstallConfirmationPanel.SetActive(true); SelectionManager.Instance.SelectView(UiViews.ConfirmUninstall); } @@ -82,9 +84,9 @@ public void ConfirmUninstall() } RefreshList(); } - + #endregion - + public void Open() { Navigating.GoToPanel(CollectionPanel); @@ -98,9 +100,20 @@ void Refresh() Collection.Instance.CacheLocalSubscribedModStatuses(); modStatus.Clear(); + foreach(var modProfile in this.purchasedMods) + { + modStatus.Add(modProfile.id, "Purchased"); + } foreach(SubscribedMod mod in subscribedMods) { - modStatus.Add(mod.modProfile.id, Utility.GetModStatusAsString(mod)); + if(!modStatus.ContainsKey(mod.modProfile.id)) + { + modStatus.Add(mod.modProfile.id, Utility.GetModStatusAsString(mod)); + } + else + { + modStatus[mod.modProfile.id] = Utility.GetModStatusAsString(mod); + } } foreach(InstalledMod mod in installedMods) { @@ -118,7 +131,7 @@ void Refresh() if(!modStatus.ContainsKey(mod.id)) { modStatus.Add(mod.id, "Pending..."); - } + } else { modStatus[mod.id] = "Pending..."; @@ -143,29 +156,37 @@ public void RefreshList() } Refresh(); - + //--------------------------------------------------------------------------------// // GET FILTER SETTINGS // //--------------------------------------------------------------------------------// // check the first dropdown filter to decide if we show/hide subs/unsubs - bool showSubscribed = true; + bool showSubscribed = false; bool showUnsubscribed = false; + bool showPurchased = false; switch(CollectionPanelFirstDropDownFilter.value) { - case 1: - showUnsubscribed = true; - showSubscribed = false; + case 0://All Mods + showUnsubscribed = true; + showSubscribed = true; + showPurchased = true; + break; + case 1://Subscribed + showSubscribed = true; break; - case 2: + case 2://Unsubscribed showUnsubscribed = true; break; + case 3://Purchased + showPurchased = true; + break; } - + //--------------------------------------------------------------------------------// // GET MODS TO DISPLAY // //--------------------------------------------------------------------------------// List allMods = new List(); - + if (showSubscribed) { foreach(SubscribedMod mod in subscribedMods) @@ -185,7 +206,7 @@ public void RefreshList() { // cache the pending subs in ModIds for an easier comparison List pendingSubs = pendingSubscriptions.Select(mod => mod.id).ToList(); - + foreach(InstalledMod mod in installedMods) { // If we have subscribed to this, dont display it as an 'Unsubscribed' mod @@ -196,6 +217,19 @@ public void RefreshList() allMods.Add(new CollectionProfile(mod.modProfile, false, false, mod.subscribedUsers.Count, modStatus[mod.modProfile.id])); } } + if (showPurchased) + { + foreach(ModProfile modProfile in this.purchasedMods) + { + var collectionProfile = new CollectionProfile(modProfile, true, true, 1, modStatus[modProfile.id]); + int index = allMods.FindIndex(item => item.modProfile.id == modProfile.id); + if(index != -1) + allMods[index] = collectionProfile; + else + allMods.Add(collectionProfile); + } + } + string accentHashColor = ColorUtility.ToHtmlStringRGBA(SharedUi.colorScheme.GetSchemeColor(ColorSetterType.Highlight)); @@ -209,12 +243,12 @@ public void RefreshList() "Collection ({subscribedAndPending.Count})", CollectionPanelTitle, $"{accentHashColor}", $"{allMods.Count}"); } - - + + //--------------------------------------------------------------------------------// // SORT AND FILTER // //--------------------------------------------------------------------------------// - + // Sort the lists of mods according to dropdown filters switch(CollectionPanelSecondDropDownFilter.value) { @@ -230,14 +264,14 @@ public void RefreshList() //--------------------------------------------------------------------------------// // DISPLAY MODS // //--------------------------------------------------------------------------------// - + // Hide the existing collection items ListItem.HideListItems(); bool hasSelection = false; string searchPhrase = CollectionPanelSearchField.text; CollectionModListItem lastItem = null; - + // GET LIST ITEMS TO SETUP foreach(var mod in allMods) { @@ -248,7 +282,7 @@ public void RefreshList() } ListItem li = ListItem.GetListItem(CollectionPanelModListItem, CollectionPanelModListItemParent, SharedUi.colorScheme); - + if(li is CollectionModListItem item) { li.Setup(mod); @@ -285,12 +319,12 @@ void SetExplicitDownNavigationForTopRowButtons(Selectable selectable) Navigation updatesButton = CollectionPanelCheckForUpdatesButton.navigation; updatesButton.selectOnDown = selectable; CollectionPanelCheckForUpdatesButton.navigation = updatesButton; - + // first dropdown Navigation firstDropdown = CollectionPanelFirstDropDownFilter.navigation; firstDropdown.selectOnDown = selectable; CollectionPanelFirstDropDownFilter.navigation = firstDropdown; - + // second dropdown Navigation secondDropdown = CollectionPanelSecondDropDownFilter.navigation; secondDropdown.selectOnDown = selectable; @@ -300,7 +334,7 @@ void SetExplicitDownNavigationForTopRowButtons(Selectable selectable) public void OnScrollValueChange() { float targetAlpha = -1f; - + // Get the target alpha based on what the scrollbar value is if(CollectionPanelContentScrollBar.value < 1f) { @@ -334,7 +368,7 @@ public void CheckForUpdates() ModIOUnity.FetchUpdates(FinishedCheckingForUpdates); checkingForUpdates = true; } - + void FinishedCheckingForUpdates(Result result) { checkingForUpdates = false; @@ -368,7 +402,7 @@ public string GetModNameFromId(ModId id) } /// - /// This is used to get the installed and subscribed mods and cache them for use across the UI + /// This is used to get the purchased, installed and subscribed mods and cache them for use across the UI /// internal void CacheLocalSubscribedModStatuses() { @@ -386,11 +420,36 @@ internal void CacheLocalSubscribedModStatuses() { installedMods = installs; } + + // Get purchased Mods + ModProfile[] purchased = ModIOUnity.GetPurchasedMods(out result); + if(result.Succeeded()) + { + purchasedMods = purchased; + } + } + + internal bool IsPurchased(ModProfile modProfile) + { + if(modProfile.price <= 0) + return true; + + foreach(var m in purchasedMods) + { + if(m.id == modProfile.id) + { + return true; + } + } + + return false; } internal bool IsSubscribed(ModId id) { - return IsSubscribed(id, out SubscribedModStatus status); + if(!Authentication.Instance.IsAuthenticated) + return false; + return IsSubscribed(id, out SubscribedModStatus _); } /// @@ -480,7 +539,7 @@ internal bool GetSubscribedProfile(ModId id, out ModProfile profile) profile = default; return false; } - + #region Comparer delegates for sorting a List via List.Sort() static int CompareModProfilesAlphabetically(SubscribedMod A, SubscribedMod B) { diff --git a/UI/Scripts/Panels/Details.cs b/UI/Scripts/Panels/Details.cs index 58801d8..6e429c7 100644 --- a/UI/Scripts/Panels/Details.cs +++ b/UI/Scripts/Panels/Details.cs @@ -131,17 +131,17 @@ void Refresh(ModProfile profile) int position = 0; galleryPosition = 0; - ModDetailsGalleryImages = new Sprite[profile.galleryImages_640x360.Length + 1]; + ModDetailsGalleryImages = new Sprite[profile.galleryImages640x360.Length + 1]; ModDetailsGalleryImagesFailedToLoad = new bool[ModDetailsGalleryImages.Length]; - + RefreshTags(profile); ListItem.HideListItems(); List images = new List(); - images.Add(profile.logoImage_640x360); - images.AddRange(profile.galleryImages_640x360); + images.Add(profile.logoImage640x360); + images.AddRange(profile.galleryImages640x360); ModDetailsGalleryNavBar.SetActive(images.Count > 1); @@ -224,7 +224,7 @@ public async void RefreshTags(ModProfile profile) { ModDetailsTagsGroup.EmptyLayoutGroup(); ListItem.HideListItems(); - + // get the tag categories so we know which ones to hide or not if(SearchPanel.Instance.tags == null) { @@ -236,7 +236,7 @@ public async void RefreshTags(ModProfile profile) } } List hiddenTags = SearchPanel.Instance.GetHiddenTags(); - + foreach(var tag in profile.tags) { if(hiddenTags.Contains(tag)) @@ -253,18 +253,14 @@ public void SubscribeButtonPress() { if(!Authentication.Instance.IsAuthenticated) { - Translation.Get(ModDetailsSubscribeButtonTextTranslation, "Log in to Subscribe", ModDetailsSubscribeButtonText); Mods.SubscribeToEvent(currentModProfileBeingViewed, UpdateSubscribeButtonText); } else if(Collection.Instance.IsSubscribed(currentModProfileBeingViewed.id)) { - // This isnt actually subscribed to 'yet' but we make the UI toggle straight away - Translation.Get(ModDetailsSubscribeButtonTextTranslation, "Subscribe", ModDetailsSubscribeButtonText); Mods.UnsubscribeFromEvent(currentModProfileBeingViewed, UpdateSubscribeButtonText); } else { - Translation.Get(ModDetailsSubscribeButtonTextTranslation, "Unsubscribe", ModDetailsSubscribeButtonText); Mods.SubscribeToEvent(currentModProfileBeingViewed, UpdateSubscribeButtonText); } @@ -370,6 +366,10 @@ public void UpdateSubscribeButtonText() { Translation.Get(ModDetailsSubscribeButtonTextTranslation, "Log in to Subscribe", ModDetailsSubscribeButtonText); } + else if(!Collection.Instance.IsPurchased(currentModProfileBeingViewed)) + { + Translation.Get(ModDetailsSubscribeButtonTextTranslation, "Buy Now", ModDetailsSubscribeButtonText); + } else if(Collection.Instance.IsSubscribed(currentModProfileBeingViewed.id)) { Translation.Get(ModDetailsSubscribeButtonTextTranslation, "Unsubscribe", ModDetailsSubscribeButtonText); @@ -433,7 +433,7 @@ public void UpdateDownloadProgress(ProgressHandle handle) ModDetailsDownloadProgressRemaining.text = TranslationManager.Instance.Get("{seconds} remaining", $"{ Utility.GenerateHumanReadableTimeStringFromSeconds((int)timeRemainingInSeconds)}"); ModDetailsDownloadProgressSpeed.text = TranslationManager.Instance.Get("{BytesPerSecond)}/s", Utility.GenerateHumanReadableStringForBytes(handle.BytesPerSecond)); - + if(Collection.Instance.GetSubscribedProfile(handle.modId, out ModProfile profile)) { ModDetailsDownloadProgressCompleted.text = TranslationManager.Instance.Get("{A} of {B}", @@ -447,7 +447,7 @@ public void UpdateDownloadProgress(ProgressHandle handle) detailsProgressTimePassed_onLastTextUpdate = detailsProgressTimePassed; } - detailsProgressTimePassed += Time.deltaTime; + detailsProgressTimePassed += Time.unscaledDeltaTime; } public void GalleryImageTransition(bool showNext) @@ -540,7 +540,7 @@ IEnumerator TransitionGalleryImage(int index) current.color = colOut; yield return null; - timePassed += Time.deltaTime; + timePassed += Time.unscaledDeltaTime; } } diff --git a/UI/Scripts/Panels/Home.cs b/UI/Scripts/Panels/Home.cs index b8aba6b..d36ddb9 100644 --- a/UI/Scripts/Panels/Home.cs +++ b/UI/Scripts/Panels/Home.cs @@ -1,4 +1,5 @@ -using System.Collections; +using System; +using System.Collections; using System.Collections.Generic; using System.Linq; using TMPro; @@ -14,7 +15,6 @@ public class Home : SelfInstancingMonoSingleton [Header("Browse Panel")] public GameObject BrowserPanel; [SerializeField] Transform BrowserPanelContent; - [SerializeField] ModListRow[] BrowserPanelModListRows; [SerializeField] Image BrowserPanelHeaderBackground; [SerializeField] Scrollbar BrowserPanelContentScrollBar; IEnumerator browserHeaderTransition; @@ -24,16 +24,17 @@ public class Home : SelfInstancingMonoSingleton [Header("Browse Panel Featured Set")] [SerializeField] FeaturedModListItem[] featuredSlotListItems; [SerializeField] RectTransform[] featuredSlotPositions; - [SerializeField] TMP_Text featuredSelectedName; [SerializeField] TMP_Text featuredSelectedSubscribeButtonText; [SerializeField] Transform featuredSelectedMoreOptionsButtonPosition; [SerializeField] GameObject browserFeaturedSlotSelectionHighlightBorder; - [SerializeField] Image browserFeaturedSlotBackplate; [SerializeField] GameObject browserFeaturedSlotInfo; + [SerializeField] Image browserFeaturedSlotBackplate; [SerializeField] GameObject featuredOptionsButtons; [SerializeField] ScrollRect scrollRect; + [SerializeField] ModListRow modListRowPrefab; internal bool isFeaturedItemSelected = false; ModProfile[] featuredProfiles; + ModListRow[] modListRows; int featuredIndex; [Header("Settings")] @@ -67,6 +68,15 @@ public void SelectFeaturedMod() Details.Instance.Open(featuredProfiles[featuredIndex], Open); } + public static void RateMod(ModId modId, ModRating rating) + { + if(!Authentication.Instance.IsAuthenticated) + { + AuthenticationPanels.Instance.Open(); + return; + } + ModIOUnity.RateMod(modId, rating, delegate { }); + } /// /// This will open the context menu for the current highlighted featured mod 'more options' @@ -90,7 +100,7 @@ public void OpenMoreOptionsForFeaturedSlot() { return; } - ModIOUnity.RateMod(Instance.featuredProfiles[Instance.featuredIndex].id, ModRating.Positive, delegate { }); + RateMod(Instance.featuredProfiles[Instance.featuredIndex].id, ModRating.Positive); ModioContextMenu.Instance.Close(); } }); @@ -105,7 +115,7 @@ public void OpenMoreOptionsForFeaturedSlot() { return; } - ModIOUnity.RateMod(Instance.featuredProfiles[Instance.featuredIndex].id, ModRating.Negative, delegate { }); + RateMod(Instance.featuredProfiles[Instance.featuredIndex].id, ModRating.Positive); ModioContextMenu.Instance.Close(); } }); @@ -135,25 +145,35 @@ public void SubscribeToFeaturedMod() { return; } + if(!Authentication.Instance.IsAuthenticated) + { + AuthenticationPanels.Instance?.Open(); + return; + } + + if(Collection.Instance.IsSubscribed(featuredProfiles[featuredIndex].id)) { // We are pre-emptively changing the text here to make the UI feel more responsive //TranslationUpdateable.Get("Subscribe", s => featuredSelectedSubscribeButtonText.text = s); - Translation.Get(featuredSubscribeTranslation, "Subscribe", featuredSelectedSubscribeButtonText); - Mods.UnsubscribeFromEvent(featuredProfiles[featuredIndex], - delegate { UpdateFeaturedSubscribeButtonText(featuredProfiles[featuredIndex].id); }); + Translation.Get(featuredSubscribeTranslation, "Unsubscribe", featuredSelectedSubscribeButtonText); + Mods.UnsubscribeFromEvent(featuredProfiles[featuredIndex], ()=>UpdateSubscribeButton(featuredProfiles[featuredIndex].id)); } else { // We are pre-emptively changing the text here to make the UI feel more responsive - Translation.Get(featuredSubscribeTranslation, "Unsubscribe", featuredSelectedSubscribeButtonText); - Mods.SubscribeToEvent(featuredProfiles[featuredIndex], - delegate { UpdateFeaturedSubscribeButtonText(featuredProfiles[featuredIndex].id); }); + Translation.Get(featuredSubscribeTranslation, "Subscribe", featuredSelectedSubscribeButtonText); + Mods.SubscribeToEvent(featuredProfiles[featuredIndex], ()=>UpdateSubscribeButton(featuredProfiles[featuredIndex].id)); } RefreshSelectedFeaturedModDetails(); } + private void UpdateSubscribeButton(ModId modId) + { + UpdateFeaturedSubscribeButtonText(modId); + } + /// /// This is used specifically for the main featured carousel at the top of the home view. /// This will swipe the current featured selection left and select the next one in the carousel @@ -219,8 +239,8 @@ internal void HideFeaturedHighlight() { browserFeaturedSlotSelectionHighlightBorder.SetActive(false); StartCoroutine(ImageTransitions.AlphaFast(browserFeaturedSlotBackplate, 0f)); - // browserFeaturedSlotBackplate.gameObject.SetActive(false); browserFeaturedSlotInfo.SetActive(false); + // browserFeaturedSlotBackplate.gameObject.SetActive(false); } /// @@ -231,9 +251,8 @@ internal void ShowFeaturedHighlight() browserFeaturedSlotSelectionHighlightBorder.SetActive(true); StartCoroutine(ImageTransitions.AlphaFast(browserFeaturedSlotBackplate, 1f)); browserFeaturedSlotBackplate.gameObject.SetActive(true); - browserFeaturedSlotInfo.SetActive(true); RefreshSelectedFeaturedModDetails(); - + browserFeaturedSlotInfo.SetActive(true); InputNavigation.Instance.Select(browserFeaturedSlotSelection, true); } @@ -249,7 +268,6 @@ void RefreshSelectedFeaturedModDetails() return; } - featuredSelectedName.text = featuredProfiles[featuredIndex].name; UpdateFeaturedSubscribeButtonText(featuredProfiles[featuredIndex].id); // Some of the featured slots will represent a different mod after the carousel moves @@ -276,7 +294,11 @@ void RefreshFeaturedCarouselProgressTabs() /// the mod id of the mod to check for subscription status void UpdateFeaturedSubscribeButtonText(ModId id) { - if(Collection.Instance.IsSubscribed(id)) + if(!Collection.Instance.IsPurchased(featuredProfiles[featuredIndex])) + { + Translation.Get(featuredSubscribeTranslation, "Buy Now", featuredSelectedSubscribeButtonText); + } + else if(Collection.Instance.IsSubscribed(featuredProfiles[featuredIndex].id)) { Translation.Get(featuredSubscribeTranslation, "Unsubscribe", featuredSelectedSubscribeButtonText); } @@ -301,12 +323,61 @@ internal void RefreshHomePanel() ModIOUnity.GetMods(Browser.Instance.FeaturedSearchFilter, AddModProfilesToFeaturedCarousel); var filters = Browser.Instance.BrowserRowSearchFilters; - int i = 0; - foreach(var modListRow in BrowserPanelModListRows) + if(modListRows == null || modListRows.Length == 0) { - if(i >= filters.Length) - i = filters.Length - 1; - modListRow.AttemptToPopulateRowWithMods(filters[i++]); + modListRows = new ModListRow[filters.Length]; + for(var i = 0; i < filters.Length; i++) + { + ModListRow mlr = Instantiate(this.modListRowPrefab, this.BrowserPanelContent); + //move row above the footer in the hierarchy + mlr.transform.SetSiblingIndex(BrowserPanelContent.childCount >= 2 ? BrowserPanelContent.childCount-2 : 0); + modListRows[i] = mlr; + MultiTargetButton mtb = mlr.Selectable.GetComponent(); + ViewportRestraint vr = mlr.Selectable.GetComponent(); + vr.Viewport = this.GetComponent(); + vr.DefaultViewportContainer = this.BrowserPanelContent.GetComponent(); + + if(i > 0) + { + var currentRow = modListRows[i]; + var previousRow = modListRows[i-1]; + + currentRow.AboveSelection = previousRow.Selectable; + var n = mtb.navigation; + n.selectOnUp = previousRow.Selectable; + mtb.navigation = n; + + previousRow.BelowSelection = currentRow.Selectable; + var previousMtb = previousRow.Selectable.GetComponent(); + n = previousMtb.navigation; + n.selectOnDown = currentRow.Selectable; + previousMtb.navigation = n; + } + else + { + var n = mtb.navigation; + n.selectOnDown = modListRows[0].Selectable; + browserFeaturedSlotSelection.navigation = n; + + modListRows[0].AboveSelection = this.browserFeaturedSlotSelection; + + n = mtb.navigation; + n.selectOnUp = this.browserFeaturedSlotSelection; + mtb.navigation = n; + } + + } + } + + if(modListRows.Length != filters.Length) + { + Debug.LogError("ModList and filters size should always match"); + return; + } + + for(var i = 0; i < modListRows.Length; i++) + { + modListRows[i].AttemptToPopulateRowWithMods(filters[i]); } } @@ -463,16 +534,7 @@ public void FeaturedItemSelect(bool state) internal static void ModManagementEvent(ModManagementEventType type, ModId id, Result eventResult) { - if(Instance.featuredProfiles != null) - { - foreach(var mod in Instance.featuredSlotListItems) - { - if(Instance.featuredProfiles[mod.profileIndex].id == id) - { - mod.progressTab.UpdateStatus(type, id); - } - } - } + SubscribedProgressTab.UpdateProgressTab(type, id); } internal static void UpdateProgressState(ProgressHandle handle) @@ -497,7 +559,12 @@ internal static void UpdateProgressState(ProgressHandle handle) public void RefreshModListItems() { List subbedMods = ModIOUnity.GetSubscribedMods(out var result).ToList(); + if(!result.Succeeded()) + { + return; + } + List purchasedMods = ModIOUnity.GetPurchasedMods(out result).ToList(); if(!result.Succeeded()) { return; @@ -507,13 +574,30 @@ public void RefreshModListItems() .ToList() .ForEach(x => { - if(subbedMods.Any(mod => mod.modProfile.Equals(x.Value.profile))) + if(subbedMods.Any(mod => mod.modProfile.Equals(x.Value.profile)) || + purchasedMods.Any(modProfile => modProfile.Equals(x.Value.profile))) { x.Value.Setup(x.Value.profile); } }); } + public void RefreshAllListItems() + { + foreach(var listItem in featuredSlotListItems) + { + listItem.Refresh(); + } + + foreach(var listItems in cachedModListItemsByRow.Values) + { + foreach(var listItem in listItems) + { + listItem.Refresh(); + } + } + } + public void ResetScrollRect() { scrollRect.verticalNormalizedPosition = 1; diff --git a/UI/Scripts/Panels/NavBar.cs b/UI/Scripts/Panels/NavBar.cs index 39c04e7..96a8293 100644 --- a/UI/Scripts/Panels/NavBar.cs +++ b/UI/Scripts/Panels/NavBar.cs @@ -1,4 +1,5 @@ using System.Collections; +using ModIO; using TMPro; using UnityEngine; using UnityEngine.UI; @@ -15,7 +16,7 @@ public class NavBar : SelfInstancingMonoSingleton [SerializeField] TMP_Text CollectionPanelNavButton; [SerializeField] GameObject CollectionPanelNavButtonHighlights; IEnumerator browserHeaderTransition; - + /// /// This is simply an On/Off state of the collection/browser buttons at the top of the UI /// panel to go between the two corresponding menus. The display is based on which menu you @@ -29,7 +30,7 @@ internal void UpdateNavbarSelection() col.a = 1f; CollectionPanelNavButton.color = col; CollectionPanelNavButtonHighlights.SetActive(true); - + col = BrowserPanelNavButton.color; col.a = 0.5f; BrowserPanelNavButton.color = col; @@ -41,7 +42,7 @@ internal void UpdateNavbarSelection() col.a = 0.5f; CollectionPanelNavButton.color = col; CollectionPanelNavButtonHighlights.SetActive(false); - + col = BrowserPanelNavButton.color; col.a = 1f; BrowserPanelNavButton.color = col; diff --git a/UI/Scripts/Panels/Reporting.cs b/UI/Scripts/Panels/Reporting.cs index f046009..92bdc3b 100644 --- a/UI/Scripts/Panels/Reporting.cs +++ b/UI/Scripts/Panels/Reporting.cs @@ -1,5 +1,6 @@ using ModIO; using ModIO.Util; +using System.Text.RegularExpressions; using TMPro; using UnityEngine; using UnityEngine.UI; @@ -8,6 +9,8 @@ namespace ModIOBrowser.Implementation { public class Reporting : SelfInstancingMonoSingleton { + private const int REQUIRED_DESCRIPTION_LENGTH = 20; + [SerializeField] public GameObject Panel; [SerializeField] TMP_Text ReportPanelHeader; [SerializeField] TMP_Text ReportPanelSubHeader; @@ -31,6 +34,8 @@ public class Reporting : SelfInstancingMonoSingleton [SerializeField] Button ReportPanelDoneButton; [SerializeField] GameObject ReportPanelLoadingAnimation; + [SerializeField] TMP_Text ReportPanelInvalidEmail; + [SerializeField] TMP_Text ReportPanelInvalidDescription; internal Translation ReportPanelHeaderTranslation = null; internal Translation ReportPanelTextTranslation = null; @@ -84,7 +89,8 @@ public void OpenEmail() ReportPanelBackButton.gameObject.SetActive(true); ReportPanelBackButton.onClick.RemoveAllListeners(); - ReportPanelBackButton.onClick.AddListener(delegate { Open(modBeingReported, defaultSelectableOnReportClose); }); + ReportPanelBackButton.onClick.AddListener(delegate + { Open(modBeingReported, defaultSelectableOnReportClose); }); ReportPanelNextButton.gameObject.SetActive(true); ReportPanelCancelButton.gameObject.SetActive(true); @@ -92,6 +98,51 @@ public void OpenEmail() InputNavigation.Instance.Select(ReportPanelEmailField); } + static bool IsValidEmail(string email) + { + if (string.IsNullOrWhiteSpace(email)) + return false; + + // checks (something@something.), doesn't cover more extreme edge cases. + string pattern = @"^\S+@\S+\.\S+$"; + + return Regex.IsMatch(email, pattern); + } + + public void CheckValidEmailAndOpenDetails() + { + var isValid = IsValidEmail(ReportPanelEmailField.text); + + ReportPanelInvalidEmail.gameObject.SetActive(!isValid); + + if (isValid) + { + OpenDetails(); + } + } + + static bool IsValidDescription(string description) + { + if (string.IsNullOrWhiteSpace(description)) + { + return false; + } + + return description.TrimEnd().Length >= REQUIRED_DESCRIPTION_LENGTH; + } + + public void CheckValidDescriptionsAndOpenSummary() + { + var isValid = IsValidDescription(ReportPanelDetailsField.text); + + ReportPanelInvalidDescription.gameObject.SetActive(!isValid); + + if (isValid) + { + OpenSummary(); + } + } + public void OpenDetails() { HideReportPanelObjects(); @@ -115,7 +166,7 @@ public void OpenDetails() ReportPanelSubmitButton.gameObject.SetActive(true); ReportPanelSubmitButton.onClick.RemoveAllListeners(); - ReportPanelSubmitButton.onClick.AddListener(OpenSummary); + ReportPanelSubmitButton.onClick.AddListener(CheckValidDescriptionsAndOpenSummary); ReportPanelCancelButton.gameObject.SetActive(true); @@ -220,7 +271,7 @@ public void HideReportPanelObjects() } #endregion // Report Panel States - + public void Send() { OpenWaiting(); @@ -231,7 +282,7 @@ public void Send() private void Sent(Result result) { - if(result.Succeeded()) + if (result.Succeeded()) { OpenDone(); } @@ -239,6 +290,6 @@ private void Sent(Result result) { OpenProblem(); } - } + } } } diff --git a/UI/Scripts/Panels/SearchPanel.cs b/UI/Scripts/Panels/SearchPanel.cs index 6aec8db..594bfb4 100644 --- a/UI/Scripts/Panels/SearchPanel.cs +++ b/UI/Scripts/Panels/SearchPanel.cs @@ -22,6 +22,8 @@ class SearchPanel : SelfInstancingMonoSingleton [SerializeField] public Image SearchPanelRightBumperIcon; public static HashSet searchFilterTags = new HashSet(); + public static bool searchFilterFree = true; + public static bool searchFilterPremium = true; internal TagCategory[] tags; bool gettingTags; @@ -151,7 +153,7 @@ void CreateTagCategoryListItems(TagCategory[] tags) { continue; } - + ListItem categoryListItem = ListItem.GetListItem(SearchPanelTagCategoryPrefab, SearchPanelTagParent, SharedUi.colorScheme); categoryListItem.Setup(category.name); diff --git a/UI/Scripts/Panels/SearchResults.cs b/UI/Scripts/Panels/SearchResults.cs index 991ad75..683d7f9 100644 --- a/UI/Scripts/Panels/SearchResults.cs +++ b/UI/Scripts/Panels/SearchResults.cs @@ -46,7 +46,7 @@ public class SearchResults : SelfInstancingMonoSingleton internal Translation SearchResultsNumberOfOtherTagsTranslation = null; internal Translation SearchResultsEndOfResultsHeaderTranslation = null; internal Translation SearchResultsEndOfResultsTextTranslation = null; - + enum SearchResultsStatus { GettingFirstResults, @@ -87,16 +87,16 @@ internal SearchFilter GetFilter(int page = 0, string searchPhrase = null) switch(SearchResultsSortByDropdown.value) { case 0: - filter.SortBy(SortModsBy.Popular); + filter.SetSortBy(SortModsBy.Popular); break; case 1: - filter.SortBy(SortModsBy.Downloads); + filter.SetSortBy(SortModsBy.Downloads); break; case 2: - filter.SortBy(SortModsBy.Subscribers); + filter.SetSortBy(SortModsBy.Subscribers); break; case 3: - filter.SortBy(SortModsBy.Rating); + filter.SetSortBy(SortModsBy.Rating); break; } @@ -230,7 +230,7 @@ void Get(ResultAnd response) { if(response.result.Succeeded()) { - // set the status so we know how to control + // set the status so we know how to control if(searchResultsStatus == SearchResultsStatus.GettingFirstResults) { searchResultsStatus = SearchResultsStatus.RetrievedFirstResults; diff --git a/UI/SoundClick.prefab b/UI/SoundClick.prefab index 93d7b76..21cedd6 100644 --- a/UI/SoundClick.prefab +++ b/UI/SoundClick.prefab @@ -9,7 +9,6 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 3795605667935323192} - - component: {fileID: 3229280020641105771} - component: {fileID: 8029960759454986326} m_Layer: 0 m_Name: SoundClick @@ -32,19 +31,6 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &3229280020641105771 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8835443316407937473} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 330dee88cac6dfb4480530e3ba360e33, type: 3} - m_Name: - m_EditorClassIdentifier: - audioSource: {fileID: 8029960759454986326} --- !u!82 &8029960759454986326 AudioSource: m_ObjectHideFlags: 0 diff --git a/UI/SoundHover.prefab b/UI/SoundHover.prefab index 2f733aa..b9d819f 100644 --- a/UI/SoundHover.prefab +++ b/UI/SoundHover.prefab @@ -9,7 +9,6 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 3795605667935323192} - - component: {fileID: 3229280020641105771} - component: {fileID: 8029960759454986326} m_Layer: 0 m_Name: SoundHover @@ -32,19 +31,6 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &3229280020641105771 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8835443316407937473} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 330dee88cac6dfb4480530e3ba360e33, type: 3} - m_Name: - m_EditorClassIdentifier: - audioSource: {fileID: 8029960759454986326} --- !u!82 &8029960759454986326 AudioSource: m_ObjectHideFlags: 0 diff --git a/UI/Sprites/Icons/wallet_icon.png b/UI/Sprites/Icons/wallet_icon.png new file mode 100644 index 0000000..021b9cf Binary files /dev/null and b/UI/Sprites/Icons/wallet_icon.png differ diff --git a/UI/Sprites/Icons/wallet_icon.png.meta b/UI/Sprites/Icons/wallet_icon.png.meta new file mode 100644 index 0000000..c27ff47 --- /dev/null +++ b/UI/Sprites/Icons/wallet_icon.png.meta @@ -0,0 +1,193 @@ +fileFormatVersion: 2 +guid: 244b38b20d5ded1469bd8b7bea84ee33 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: GameCoreScarlett + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Nintendo Switch + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: PS5 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: PS4 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Windows Store Apps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/UI/Sprites/purchased-banner.png b/UI/Sprites/purchased-banner.png new file mode 100644 index 0000000..26ef438 Binary files /dev/null and b/UI/Sprites/purchased-banner.png differ diff --git a/UI/Sprites/purchased-banner.png.meta b/UI/Sprites/purchased-banner.png.meta new file mode 100644 index 0000000..f5e48a7 --- /dev/null +++ b/UI/Sprites/purchased-banner.png.meta @@ -0,0 +1,181 @@ +fileFormatVersion: 2 +guid: 256f232422885fb43b11fb53893d8842 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: GameCoreScarlett + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: PS5 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: PS4 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Windows Store Apps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/UI/Sprites/search_icon.png b/UI/Sprites/search_icon.png deleted file mode 100644 index 00257f1..0000000 Binary files a/UI/Sprites/search_icon.png and /dev/null differ diff --git a/UI/Translations/TranslationManager.cs b/UI/Translations/TranslationManager.cs index ba198fd..cb81bd8 100644 --- a/UI/Translations/TranslationManager.cs +++ b/UI/Translations/TranslationManager.cs @@ -292,7 +292,6 @@ public static string AppendTranslation(TranslatedLanguages language, string keyA /// /// For testing purposes, sometimes you need to swap languages on the fly inside the editor. /// - [ExposeMethodInEditor] public void TestChangeLanguageToSwedishRuntimeOnly() { Language = TranslatedLanguages.Swedish; @@ -302,14 +301,12 @@ public void TestChangeLanguageToSwedishRuntimeOnly() /// /// For testing purposes, sometimes you need to swap languages on the fly inside the editor. /// - [ExposeMethodInEditor] public void TestChangeLanguageToEnglishRuntimeOnly() { Language = TranslatedLanguages.English; ForceChangeLanguage(Language); } - [ExposeMethodInEditor] public void AttemptToTranslateInput() { Debug.Log("Attempting to translate input"); @@ -328,8 +325,7 @@ public class DebugUntranslatedStrings public override string ToString() => $"[{item.name}] {item.text}\n{item.transform.FullPath()}"; } - - [ExposeMethodInEditor] + public void TrackDownUntranslatedStringsRuntime() { untranslatedStringsRuntime = Utility.FindEverythingInScene().Select(x => diff --git a/UI/Translations/UiTranslatorTest.cs b/UI/Translations/UiTranslatorTest.cs index 7385ce9..1abcbac 100644 --- a/UI/Translations/UiTranslatorTest.cs +++ b/UI/Translations/UiTranslatorTest.cs @@ -24,7 +24,6 @@ private void Awake() }); } - [ExposeMethodInEditor] public void PokeTranslator() { SimpleMessageHub.Instance.Publish(new MessageUpdateTranslations()); diff --git a/UI/UiConfig.asset b/UI/UiConfig.asset index 799cf17..90d3932 100644 --- a/UI/UiConfig.asset +++ b/UI/UiConfig.asset @@ -16,6 +16,8 @@ MonoBehaviour: PlayStationUsesVKDelegate: 1 SwitchUsesVKDelegate: 0 StandaloneUsesVKDelegate: 1 + AndroidUsesVKDelegate: 0 + IOSUsesVKDelegate: 0 Language: 0 GlyphPlatform: 0 volume: 1 diff --git a/UI/Utility/Glyphs.cs b/UI/Utility/Glyphs.cs index 48d663f..730a5de 100644 --- a/UI/Utility/Glyphs.cs +++ b/UI/Utility/Glyphs.cs @@ -55,10 +55,10 @@ public void ChangeGlyphs(GlyphPlatforms platform) SimpleMessageHub.Instance.Publish(new MessageGlyphUpdate()); } - [ExposeMethodInEditor] public void ChangeToPc() => ChangeGlyphs(GlyphPlatforms.PC); - [ExposeMethodInEditor] public void ChangeToXbox() => ChangeGlyphs(GlyphPlatforms.XBOX); - [ExposeMethodInEditor] public void ChangeToNintendoSwitch() => ChangeGlyphs(GlyphPlatforms.NINTENDO_SWITCH); - [ExposeMethodInEditor] public void ChangeToPs4() => ChangeGlyphs(GlyphPlatforms.PLAYSTATION_4); - [ExposeMethodInEditor] public void ChangeToPs5() => ChangeGlyphs(GlyphPlatforms.PLAYSTATION_5); + public void ChangeToPc() => ChangeGlyphs(GlyphPlatforms.PC); + public void ChangeToXbox() => ChangeGlyphs(GlyphPlatforms.XBOX); + public void ChangeToNintendoSwitch() => ChangeGlyphs(GlyphPlatforms.NINTENDO_SWITCH); + public void ChangeToPs4() => ChangeGlyphs(GlyphPlatforms.PLAYSTATION_4); + public void ChangeToPs5() => ChangeGlyphs(GlyphPlatforms.PLAYSTATION_5); } } diff --git a/UI/Utility/ModListRow.cs b/UI/Utility/ModListRow.cs index 174beca..e15eb9c 100644 --- a/UI/Utility/ModListRow.cs +++ b/UI/Utility/ModListRow.cs @@ -1,13 +1,15 @@ -using System.Collections; +using System; +using System.Collections; using System.Collections.Generic; using ModIO; +using TMPro; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; namespace ModIOBrowser.Implementation { - public class ModListRow : MonoBehaviour, ISelectHandler + public class ModListRow : MonoBehaviour { [Header("UI Elements")] [SerializeField] GameObject ErrorPanel; @@ -16,16 +18,20 @@ public class ModListRow : MonoBehaviour, ISelectHandler [SerializeField] GameObject MainSelectableHighlights; [SerializeField] GameObject ModListItemPrefab; [SerializeField] Transform ModListItemContainer; + [SerializeField] TMP_Text headerText; [Header("Selectables")] - [SerializeField] Selectable AboveSelection; - [SerializeField] Selectable BelowSelection; + public Selectable Selectable; + public Selectable AboveSelection; + public Selectable BelowSelection; internal static Vector2 currentSelectedPosition = Vector2.zero; List items = new List(); SearchFilter lastUsedFilter; - public void OnSelect(BaseEventData eventData) + Translation headerTextTranslation = null; + + public void OnRowSelected() { StartCoroutine(OnSelectFrameDelay()); } @@ -139,6 +145,7 @@ public void SwipeRow(bool right) /// public void AttemptToPopulateRowWithMods(SearchFilter filter) { + SetHeaderText(filter.SortBy); lastUsedFilter = filter; ErrorPanel.SetActive(false); RowPanel.SetActive(false); @@ -147,6 +154,40 @@ public void AttemptToPopulateRowWithMods(SearchFilter filter) ModIOUnity.GetMods(filter, GetModsResponse); } + private void SetHeaderText(SortModsBy sortModsBy) + { + string header = String.Empty; + switch(sortModsBy) + { + case SortModsBy.Name: + header = "Alphabetical"; + break; + case SortModsBy.Price: + header = "Price"; + break; + case SortModsBy.Rating: + header = "Highest rated"; + break; + case SortModsBy.Popular: + header = "Most popular"; + break; + case SortModsBy.Downloads: + header = "Trending"; + break; + case SortModsBy.Subscribers: + header = "Most Subscribed"; + break; + case SortModsBy.DateSubmitted: + header = "Recently added"; + break; + default: + header = "Unknown Sort Parameter"; + break; + } + headerText.text = header; + Translation.Get(headerTextTranslation, headerText.text, headerText); + } + public void RetryGetMods() { AttemptToPopulateRowWithMods(lastUsedFilter); @@ -158,9 +199,9 @@ void GetModsResponse(ResultAnd response) { return; } - + LoadingPanel.SetActive(false); - + if(response.result.Succeeded()) { PopulateRowFromModPage(response.value); diff --git a/UI/Utility/SelectableEventHandler.cs b/UI/Utility/SelectableEventHandler.cs new file mode 100644 index 0000000..4653bf6 --- /dev/null +++ b/UI/Utility/SelectableEventHandler.cs @@ -0,0 +1,16 @@ +using UnityEngine; +using UnityEngine.Events; +using UnityEngine.EventSystems; + +namespace Plugins.mod.io.UI.Utility +{ + public class SelectableEventHandler : MonoBehaviour, ISelectHandler + { + [SerializeField] private UnityEvent unityEvent; + + public void OnSelect(BaseEventData eventData) + { + unityEvent?.Invoke(); + } + } +} diff --git a/UI/Utility/SelectableEventHandler.cs.meta b/UI/Utility/SelectableEventHandler.cs.meta new file mode 100644 index 0000000..7eec05c --- /dev/null +++ b/UI/Utility/SelectableEventHandler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1687e18d88b77d5468f4a0aca33a36c3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UI/Utility/SubscribedProgressTab.cs b/UI/Utility/SubscribedProgressTab.cs index f172a5f..2677436 100644 --- a/UI/Utility/SubscribedProgressTab.cs +++ b/UI/Utility/SubscribedProgressTab.cs @@ -1,4 +1,6 @@ -using ModIO; +using System; +using System.Collections.Generic; +using ModIO; using UnityEngine; using UnityEngine.UI; using TMPro; @@ -19,7 +21,30 @@ public class SubscribedProgressTab : MonoBehaviour Translation progressBarTextTranslation; #pragma warning restore 0649 - public void Setup(ModProfile profile) + static List allProgressTabs = new List(); + + void Awake() + { + allProgressTabs.Add(this); + } + + public static void UpdateProgressTab(ModManagementEventType eventType, ModId id) + { + foreach(var tab in allProgressTabs) + { + if(tab.profile.id == id) + { + tab.UpdateStatus(eventType, id); + } + } + } + + public static void HideAllTabs() + { + allProgressTabs.ForEach(x=>x.Hide()); + } + + public void Setup(ModProfile profile) { this.profile = profile; @@ -67,15 +92,8 @@ public void UpdateProgress(ProgressHandle handle) } progressBarQueuedOutline.SetActive(false); - - if(Collection.Instance.IsSubscribed(handle.modId)) - { - progressBar.SetActive(true); - } - else - { - progressBar.SetActive(false); - } + + progressBar.SetActive(Collection.Instance.IsSubscribed(profile.id)); progressBarFill.fillAmount = handle.Progress; @@ -104,13 +122,20 @@ public void UpdateProgress(ProgressHandle handle) } } + internal void Hide() + { + progressBar.SetActive(false); + } + internal void UpdateStatus(ModManagementEventType updatedStatus, ModId id) { if(profile.id != id) { return; } - + + progressBar.SetActive(Collection.Instance.IsSubscribed(id)); + // Always turn this off when state changes. It will auto get turned back on if needed progressBar.SetActive(false); progressBarQueuedOutline.SetActive(false); diff --git a/UI/modio.UI.asmdef b/UI/modio.UI.asmdef index f341f07..ea1910a 100644 --- a/UI/modio.UI.asmdef +++ b/UI/modio.UI.asmdef @@ -1,5 +1,6 @@ { "name": "modio.UI", + "rootNamespace": "", "references": [ "modio.UnityPlugin", "Unity.TextMeshPro", diff --git a/modio.UnityPlugin.asmdef b/modio.UnityPlugin.asmdef index 90342c5..38c8aea 100644 --- a/modio.UnityPlugin.asmdef +++ b/modio.UnityPlugin.asmdef @@ -1,8 +1,10 @@ { "name": "modio.UnityPlugin", + "rootNamespace": "", "references": [ "NintendoSDK", - "Unity.PSN.PS5.Runtime" + "Unity.PSN.PS5.Runtime", + "Unity.GameCore" ], "includePlatforms": [], "excludePlatforms": [],