diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Common/Scripts.meta b/Packages/io.chainsafe.web3-unity.hyperplay/Runtime/Resources.meta similarity index 77% rename from Packages/io.chainsafe.web3-unity/Runtime/Common/Scripts.meta rename to Packages/io.chainsafe.web3-unity.hyperplay/Runtime/Resources.meta index ae4d8755e..fa5da854b 100644 --- a/Packages/io.chainsafe.web3-unity/Runtime/Common/Scripts.meta +++ b/Packages/io.chainsafe.web3-unity.hyperplay/Runtime/Resources.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: b3347b82b502e4f4fa3d94b8ae6c144a +guid: 0a26dcfb4051398409745656f6a3a2cc folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Packages/io.chainsafe.web3-unity.hyperplay/Runtime/Resources/HyperPlayConnectionProviderConfig.asset b/Packages/io.chainsafe.web3-unity.hyperplay/Runtime/Resources/HyperPlayConnectionProviderConfig.asset new file mode 100644 index 000000000..60b7897ce --- /dev/null +++ b/Packages/io.chainsafe.web3-unity.hyperplay/Runtime/Resources/HyperPlayConnectionProviderConfig.asset @@ -0,0 +1,16 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1272c3d1812e95e408d945d25da049bb, type: 3} + m_Name: HyperPlayConnectionProviderConfig + m_EditorClassIdentifier: + k__BackingField: HyperPlay + k__BackingField: {fileID: 1727169539746137890, guid: 71b112e16f898d140935553a4b33ae1f, type: 3} diff --git a/Packages/io.chainsafe.web3-unity.hyperplay/Runtime/Resources/HyperPlayConnectionProviderConfig.asset.meta b/Packages/io.chainsafe.web3-unity.hyperplay/Runtime/Resources/HyperPlayConnectionProviderConfig.asset.meta new file mode 100644 index 000000000..f65df09e0 --- /dev/null +++ b/Packages/io.chainsafe.web3-unity.hyperplay/Runtime/Resources/HyperPlayConnectionProviderConfig.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e58af3a1029796646a4a5bcc565ed4f0 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/io.chainsafe.web3-unity.hyperplay/Runtime/Scripts/HyperPlayConnectionProvider.cs b/Packages/io.chainsafe.web3-unity.hyperplay/Runtime/Scripts/HyperPlayConnectionProvider.cs new file mode 100644 index 000000000..112bad78f --- /dev/null +++ b/Packages/io.chainsafe.web3-unity.hyperplay/Runtime/Scripts/HyperPlayConnectionProvider.cs @@ -0,0 +1,38 @@ +using System.Threading.Tasks; +using ChainSafe.Gaming.UnityPackage.Connection; +using ChainSafe.Gaming.Web3.Build; +using ChainSafe.Gaming.Web3.Evm.Wallet; +using UnityEngine; + +namespace ChainSafe.Gaming.HyperPlay +{ + /// + /// Connection provider for connecting via HyperPlay Launcher. + /// + public class HyperPlayConnectionProvider : ConnectionProvider + { + public override bool IsAvailable => Application.isEditor || !Application.isMobilePlatform; + + public override Task Initialize() + { + return Task.CompletedTask; + } + + public override Web3Builder ConfigureServices(Web3Builder web3Builder) + { + return web3Builder.Configure(services => + { + var config = new HyperPlayConfig + { + // RememberSession = rememberMeToggle.isOn || _storedSessionAvailable, + }; +#if UNITY_WEBGL && !UNITY_EDITOR + services.UseHyperPlay(config); +#else + services.UseHyperPlay(config); +#endif + services.UseWalletSigner().UseWalletTransactionExecutor(); + }); + } + } +} diff --git a/Packages/io.chainsafe.web3-unity.hyperplay/Runtime/Scripts/HyperPlayConnectionProvider.cs.meta b/Packages/io.chainsafe.web3-unity.hyperplay/Runtime/Scripts/HyperPlayConnectionProvider.cs.meta new file mode 100644 index 000000000..a4995e31f --- /dev/null +++ b/Packages/io.chainsafe.web3-unity.hyperplay/Runtime/Scripts/HyperPlayConnectionProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 73b5e9380c5275043b3558f49f807100 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/io.chainsafe.web3-unity.ramp/Runtime/Scripts/RampServiceAdapter.cs b/Packages/io.chainsafe.web3-unity.ramp/Runtime/Scripts/RampServiceAdapter.cs index d92f2de7a..5a45fe99f 100644 --- a/Packages/io.chainsafe.web3-unity.ramp/Runtime/Scripts/RampServiceAdapter.cs +++ b/Packages/io.chainsafe.web3-unity.ramp/Runtime/Scripts/RampServiceAdapter.cs @@ -1,4 +1,4 @@ -using ChainSafe.Gaming.UnityPackage.Common; +using ChainSafe.Gaming.UnityPackage.Connection; using ChainSafe.Gaming.Web3.Build; using UnityEngine; diff --git a/Packages/io.chainsafe.web3-unity.web3auth/Runtime/Plugins/Web3AuthWebGLModal.jslib b/Packages/io.chainsafe.web3-unity.web3auth/Runtime/Plugins/Web3AuthWebGLModal.jslib index e9d1cfe8f..49d8eae6c 100644 --- a/Packages/io.chainsafe.web3-unity.web3auth/Runtime/Plugins/Web3AuthWebGLModal.jslib +++ b/Packages/io.chainsafe.web3-unity.web3auth/Runtime/Plugins/Web3AuthWebGLModal.jslib @@ -1,20 +1,10 @@ var Web3AuthWebGLNoModal = { $Web3AuthWebGLNoModal : {}, - SetLoginCallback: function (login) { - Web3AuthWebGLNoModal.loginCallback = function(sessionId){ - var returnStr = sessionId; - var bufferSize = lengthBytesUTF8(returnStr) + 1; - var buffer = _malloc(bufferSize); - stringToUTF8(returnStr, buffer, bufferSize); - Module.dynCall_vi(login, [buffer]); - }; - }, - InitWeb3Auth: function (clientId, chainId, rpcTarget, displayName, blockExplorerUrl, ticker, tickerName, network) { + InitWeb3Auth: function (clientId, chainId, rpcTarget, displayName, blockExplorerUrl, ticker, tickerName, network, callback, fallback) { + window.web3auth = null; window.walletServicesPlugin = null; - - (async function init() { try { @@ -53,15 +43,27 @@ var Web3AuthWebGLNoModal = { window.web3auth.configureAdapter(openloginAdapter); await window.web3auth.init(); - console.log("Web3Auth Initialized Successfully!"); + + Module.dynCall_v(callback); } catch (error) { - console.error("Error during Web3Auth initialization:", error); + var stringToReturn = error.message; + var bufferSize = lengthBytesUTF8(stringToReturn) + 1; + var buffer = _malloc(bufferSize); + stringToUTF8(stringToReturn, buffer, bufferSize); + Module.dynCall_vi(fallback, [buffer]); } })(); }, - - Web3AuthLogin: async function (provider, rememberMe) { + Web3AuthLogin: async function (provider, rememberMe, callback, fallback) { + try { + Web3AuthWebGLNoModal.loginCallback = function(sessionId){ + var bufferSize = lengthBytesUTF8(sessionId) + 1; + var buffer = _malloc(bufferSize); + stringToUTF8(sessionId, buffer, bufferSize); + Module.dynCall_vi(callback, [buffer]); + }; + await window.web3auth.connectTo("openlogin", { loginProvider: UTF8ToString(provider) }); @@ -69,7 +71,11 @@ var Web3AuthWebGLNoModal = { localStorage.removeItem("openlogin_store"); } } catch (error) { - console.log(error.message); + var stringToReturn = error.message; + var bufferSize = lengthBytesUTF8(error.message) + 1; + var buffer = _malloc(bufferSize); + stringToUTF8(stringToReturn, buffer, bufferSize); + Module.dynCall_vi(fallback, [buffer]); } }, }; diff --git a/Packages/io.chainsafe.web3-unity.web3auth/Runtime/Resources.meta b/Packages/io.chainsafe.web3-unity.web3auth/Runtime/Resources.meta new file mode 100644 index 000000000..eb97e2042 --- /dev/null +++ b/Packages/io.chainsafe.web3-unity.web3auth/Runtime/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3b7a427c677a5a7489abfb303571409b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/io.chainsafe.web3-unity.web3auth/Runtime/Resources/Web3AuthConnectionProviderConfig.asset b/Packages/io.chainsafe.web3-unity.web3auth/Runtime/Resources/Web3AuthConnectionProviderConfig.asset new file mode 100644 index 000000000..10cb0832f --- /dev/null +++ b/Packages/io.chainsafe.web3-unity.web3auth/Runtime/Resources/Web3AuthConnectionProviderConfig.asset @@ -0,0 +1,16 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1272c3d1812e95e408d945d25da049bb, type: 3} + m_Name: Web3AuthConnectionProviderConfig + m_EditorClassIdentifier: + k__BackingField: Web3Auth + k__BackingField: {fileID: 8841964981256285308, guid: 163bbaaeb51883442a20ea7532888a43, type: 3} diff --git a/Packages/io.chainsafe.web3-unity.web3auth/Runtime/Resources/Web3AuthConnectionProviderConfig.asset.meta b/Packages/io.chainsafe.web3-unity.web3auth/Runtime/Resources/Web3AuthConnectionProviderConfig.asset.meta new file mode 100644 index 000000000..c29aa1981 --- /dev/null +++ b/Packages/io.chainsafe.web3-unity.web3auth/Runtime/Resources/Web3AuthConnectionProviderConfig.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f07bd9ab13eb4ac4288f6b20dfc1d562 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/io.chainsafe.web3-unity.web3auth/Runtime/Web3AuthConnectionProvider.cs b/Packages/io.chainsafe.web3-unity.web3auth/Runtime/Web3AuthConnectionProvider.cs new file mode 100644 index 000000000..eb8b84ac1 --- /dev/null +++ b/Packages/io.chainsafe.web3-unity.web3auth/Runtime/Web3AuthConnectionProvider.cs @@ -0,0 +1,185 @@ +using System; +using System.Numerics; +using System.Runtime.InteropServices; +using System.Threading.Tasks; +using AOT; +using ChainSafe.Gaming; +using ChainSafe.Gaming.UnityPackage; +using ChainSafe.Gaming.UnityPackage.Connection; +using ChainSafe.Gaming.Web3; +using ChainSafe.Gaming.Web3.Build; +using ChainSafe.GamingSdk.Web3Auth; +using Nethereum.Hex.HexTypes; +using UnityEngine; +using Network = Web3Auth.Network; + +/// +/// ConnectionProvider for connecting wallet via Web3Auth. +/// +public class Web3AuthConnectionProvider : ConnectionProvider +{ + [SerializeField] private string clientId; + [SerializeField] private string redirectUri; + [SerializeField] private Network network; + + [Space] + + [SerializeField] public GameObject modalPrefab; + + private Web3AuthModal _modal; + + public override bool IsAvailable => true; + + #if UNITY_WEBGL && !UNITY_EDITOR + + private TaskCompletionSource _initializeTcs; + + private TaskCompletionSource _connectionTcs; + + [DllImport("__Internal")] + private static extern void InitWeb3Auth(string clientId, string chainId, string rpcTarget, string displayName, string blockExplorerUrl, string ticker, string tickerName, string network, Action callback, Action fallback); + + [DllImport("__Internal")] + private static extern void Web3AuthLogin(string provider, bool rememberMe, Action callback, Action fallback); + + private static Web3AuthConnectionProvider _instance; + + private void Awake() + { + _instance = this; + } + + public override async Task Initialize() + { + _initializeTcs = new TaskCompletionSource(); + + var projectConfig = ProjectConfigUtilities.Load(); + + //1155 is a decimal number, we need to convert it to an integer + InitWeb3Auth(clientId, new HexBigInteger(BigInteger.Parse(projectConfig.ChainId)).HexValue, + projectConfig.Rpc, projectConfig.Network, "", projectConfig.Symbol, "", network.ToString().ToLower(), Initialized, InitializeError); + + await _initializeTcs.Task; + + Debug.Log("Web3Auth Initialized Successfully."); + + // Don't allow connection before initialization. + ConnectButton.interactable = true; + } +#else + public override Task Initialize() + { + ConnectButton.interactable = true; + + return Task.CompletedTask; + } +#endif + + public override Web3Builder ConfigureServices(Web3Builder web3Builder) + { + DisplayModal(); + + return web3Builder.Configure(services => + { + var web3AuthConfig = new Web3AuthWalletConfig + { + Web3AuthOptions = new() + { + clientId = clientId, + redirectUrl = new Uri(redirectUri), + network = network, + whiteLabel = new() + { + mode = Web3Auth.ThemeModes.dark, + defaultLanguage = Web3Auth.Language.en, + appName = "ChainSafe Gaming SDK", + } + }, + // RememberMe = rememberMe + }; + + web3AuthConfig.CancellationToken = _modal.CancellationToken; + + web3AuthConfig.ProviderTask = _modal.SelectProvider(); + + #if UNITY_WEBGL && !UNITY_EDITOR + web3AuthConfig.CancellationToken.Register(delegate + { + if (_connectionTcs != null && !_connectionTcs.Task.IsCompleted) + { + _connectionTcs.SetCanceled(); + } + }); + + web3AuthConfig.SessionTask = Connect(); +#endif + + services.UseWeb3AuthWallet(web3AuthConfig); + }); + } + + public override void HandleException(Exception exception) + { + _modal.Close(); + + base.HandleException(exception); + } + + private void DisplayModal() + { + if (_modal != null) + { + _modal.gameObject.SetActive(true); + } + + else + { + var obj = Instantiate(modalPrefab); + + _modal = obj.GetComponentInChildren(); + } + } + + #if UNITY_WEBGL && !UNITY_EDITOR + + [MonoPInvokeCallback(typeof(Action))] + private static void Initialized() + { + _instance._initializeTcs.SetResult(string.Empty); + } + + [MonoPInvokeCallback(typeof(Action))] + private static void InitializeError(string message) + { + _instance._initializeTcs.SetException(new Web3Exception(message)); + } + + private async Task Connect() + { + if (_connectionTcs != null && !_connectionTcs.Task.IsCompleted) + { + _connectionTcs.SetCanceled(); + } + + _connectionTcs = new TaskCompletionSource(); + + var provider = await _modal.SelectProvider(); + + Web3AuthLogin(provider.ToString().ToLower(), false, Connected, ConnectError); + + return await _connectionTcs.Task; + } + + [MonoPInvokeCallback(typeof(Action))] + private static void Connected(string sessionId) + { + _instance._connectionTcs.SetResult(sessionId); + } + + [MonoPInvokeCallback(typeof(Action))] + private static void ConnectError(string message) + { + _instance._connectionTcs.SetException(new Web3Exception(message)); + } +#endif +} diff --git a/Packages/io.chainsafe.web3-unity.web3auth/Runtime/Web3AuthConnectionProvider.cs.meta b/Packages/io.chainsafe.web3-unity.web3auth/Runtime/Web3AuthConnectionProvider.cs.meta new file mode 100644 index 000000000..01efe97f4 --- /dev/null +++ b/Packages/io.chainsafe.web3-unity.web3auth/Runtime/Web3AuthConnectionProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6b435f36106e244449abb70cf6f41008 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/io.chainsafe.web3-unity.web3auth/Runtime/Web3AuthModal.cs b/Packages/io.chainsafe.web3-unity.web3auth/Runtime/Web3AuthModal.cs index 4a863b894..96f8b889b 100644 --- a/Packages/io.chainsafe.web3-unity.web3auth/Runtime/Web3AuthModal.cs +++ b/Packages/io.chainsafe.web3-unity.web3auth/Runtime/Web3AuthModal.cs @@ -1,13 +1,14 @@ using System; -using System.Collections; -using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; -using ChainSafe.Gaming; +using ChainSafe.Gaming.UnityPackage.UI; using ChainSafe.Gaming.Web3; using UnityEngine; using UnityEngine.UI; +/// +/// Web3Auth modal used for displaying and selecting a Web3Auth provider. +/// public class Web3AuthModal : MonoBehaviour { [Serializable] diff --git a/Packages/io.chainsafe.web3-unity.web3auth/Runtime/Web3AuthProvider.cs b/Packages/io.chainsafe.web3-unity.web3auth/Runtime/Web3AuthProvider.cs index 776477a55..bb5dc620c 100644 --- a/Packages/io.chainsafe.web3-unity.web3auth/Runtime/Web3AuthProvider.cs +++ b/Packages/io.chainsafe.web3-unity.web3auth/Runtime/Web3AuthProvider.cs @@ -48,27 +48,44 @@ public override async Task Connect() if (_connectTcs != null && !_connectTcs.Task.IsCompleted) { - _connectTcs.SetCanceled(); + Cancel(); } _connectTcs = new TaskCompletionSource(); _coreInstance.onLogin += OnLogin; - if (_config.LoginParams != null) + var providerTask = _config.ProviderTask; + + if (providerTask != null && !providerTask.IsCompleted) { - _coreInstance.login(_config.LoginParams); + var provider = await _config.ProviderTask; + + _coreInstance.login(new LoginParams + { + loginProvider = provider, + }); } - var response = await _connectTcs.Task; + await using(_config.CancellationToken.Register(Cancel)) + { + var response = await _connectTcs.Task; - Account = new Account(response.privKey); + Account = new Account(response.privKey); - Account.TransactionManager.Client = this; + Account.TransactionManager.Client = this; - return Account.Address; + return Account.Address; + } } + private void Cancel() + { + _connectTcs.SetCanceled(); + + _coreInstance.onLogin -= OnLogin; + } + private void OnLogin(Web3AuthResponse response) { _connectTcs.SetResult(response); diff --git a/Packages/io.chainsafe.web3-unity.web3auth/Runtime/Web3AuthWalletConfig.cs b/Packages/io.chainsafe.web3-unity.web3auth/Runtime/Web3AuthWalletConfig.cs index c210c9e2c..02228c398 100644 --- a/Packages/io.chainsafe.web3-unity.web3auth/Runtime/Web3AuthWalletConfig.cs +++ b/Packages/io.chainsafe.web3-unity.web3auth/Runtime/Web3AuthWalletConfig.cs @@ -1,3 +1,5 @@ +using System.Threading; +using System.Threading.Tasks; using TWeb3Auth = Web3Auth; namespace ChainSafe.GamingSdk.Web3Auth @@ -13,10 +15,16 @@ public class Web3AuthWalletConfig public Web3AuthOptions Web3AuthOptions { get; set; } /// - /// Gets or sets the login parameters for authenticating with the Web3Auth instance. These parameters - /// may include authentication credentials or other required data. + /// Login Provider to use when connecting the wallet, like Google, facebook etc... /// - public LoginParams LoginParams { get; set; } + public Task ProviderTask { get; set; } + + /// + /// Get the SessionId on connection from the provider. + /// + public Task SessionTask { get; set; } + + public CancellationToken CancellationToken { get; set; } public bool RememberMe { get; set; } } diff --git a/Packages/io.chainsafe.web3-unity.web3auth/Runtime/Web3AuthWalletExtensions.cs b/Packages/io.chainsafe.web3-unity.web3auth/Runtime/Web3AuthWalletExtensions.cs index abb119638..7f4d3e512 100644 --- a/Packages/io.chainsafe.web3-unity.web3auth/Runtime/Web3AuthWalletExtensions.cs +++ b/Packages/io.chainsafe.web3-unity.web3auth/Runtime/Web3AuthWalletExtensions.cs @@ -37,7 +37,11 @@ public static IWeb3ServiceCollection UseWeb3AuthWallet(this IWeb3ServiceCollecti collection.AssertServiceNotBound(); collection.AssertServiceNotBound(); +#if UNITY_WEBGL && !UNITY_EDITOR + collection.AddSingleton(); +#else collection.AddSingleton(); +#endif collection.AddSingleton(); diff --git a/Packages/io.chainsafe.web3-unity.web3auth/Runtime/Web3AuthWebGLProvider.cs b/Packages/io.chainsafe.web3-unity.web3auth/Runtime/Web3AuthWebGLProvider.cs new file mode 100644 index 000000000..1937f0aca --- /dev/null +++ b/Packages/io.chainsafe.web3-unity.web3auth/Runtime/Web3AuthWebGLProvider.cs @@ -0,0 +1,27 @@ +using System.Threading.Tasks; +using ChainSafe.Gaming.Evm; +using ChainSafe.Gaming.Web3; +using ChainSafe.Gaming.Web3.Environment; +using ChainSafe.GamingSdk.Web3Auth; + +/// +/// Connection provider for connecting via Web3Auth modal on WebGL. +/// +public class Web3AuthWebGLProvider : Web3AuthProvider +{ + private readonly Web3AuthWalletConfig _config; + + public Web3AuthWebGLProvider(Web3AuthWalletConfig config, Web3Environment environment, IChainConfig chainConfig, ChainRegistryProvider chainRegistryProvider) : base(config, environment, chainConfig, chainRegistryProvider) + { + _config = config; + } + + public override async Task Connect() + { + string sessionId = await _config.SessionTask; + + KeyStoreManagerUtils.savePreferenceData(KeyStoreManagerUtils.SESSION_ID, sessionId); + + return await base.Connect(); + } +} diff --git a/Packages/io.chainsafe.web3-unity.web3auth/Runtime/Web3AuthWebGLProvider.cs.meta b/Packages/io.chainsafe.web3-unity.web3auth/Runtime/Web3AuthWebGLProvider.cs.meta new file mode 100644 index 000000000..afc5bd514 --- /dev/null +++ b/Packages/io.chainsafe.web3-unity.web3auth/Runtime/Web3AuthWebGLProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 50c9dfe13a67bda44bb58dfae96b57c3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/io.chainsafe.web3-unity/Editor/ConnectionHandlerEditor.cs b/Packages/io.chainsafe.web3-unity/Editor/ConnectionHandlerEditor.cs new file mode 100644 index 000000000..c6d77fe42 --- /dev/null +++ b/Packages/io.chainsafe.web3-unity/Editor/ConnectionHandlerEditor.cs @@ -0,0 +1,92 @@ +using System.Collections.Generic; +using ChainSafe.Gaming.UnityPackage.Connection; +using Newtonsoft.Json; +using UnityEditor; +using UnityEngine; + +// Editor for adding and removing providers in an interactive way. +[CustomEditor(typeof(ConnectionHandler))] +public class ConnectionHandlerEditor : Editor +{ + public struct Provider + { + [JsonProperty("name")] + public string Name { get; private set; } + + [JsonProperty("path")] + public string Path { get; private set; } + } + + private bool _foldout; + + public override void OnInspectorGUI() + { + base.OnInspectorGUI(); + + var providers = Resources.LoadAll(string.Empty); + + _foldout = EditorGUILayout.Foldout(_foldout, "Connection Providers"); + + if (_foldout) + { + List availableProviders = new List(); + + var providersProperty = serializedObject.FindProperty("providers"); + + int arraySize = providersProperty.arraySize; + + for (int i = 0; i < arraySize; i++) + { + var providerProperty = providersProperty.GetArrayElementAtIndex(i); + + if (providerProperty.objectReferenceValue == null) + { + providersProperty.DeleteArrayElementAtIndex(i); + + serializedObject.ApplyModifiedProperties(); + + return; + } + + availableProviders.Add(providerProperty.objectReferenceValue as ConnectionProvider); + } + + foreach (var provider in providers) + { + var loadedProvider = provider.ProviderRow; + + if (loadedProvider == null) + { + Debug.LogWarning($"Error loading {provider.Name} Provider."); + + continue; + } + + EditorGUI.BeginChangeCheck(); + + bool isAvailable = availableProviders.Contains(loadedProvider); + + isAvailable = GUILayout.Toggle(isAvailable, provider.Name); + + if (EditorGUI.EndChangeCheck()) + { + if (isAvailable) + { + providersProperty.InsertArrayElementAtIndex(arraySize); + + providersProperty.GetArrayElementAtIndex(arraySize).objectReferenceValue = loadedProvider; + } + + else + { + providersProperty.DeleteArrayElementAtIndex(availableProviders.IndexOf(loadedProvider)); + } + + serializedObject.ApplyModifiedProperties(); + + return; + } + } + } + } +} diff --git a/Packages/io.chainsafe.web3-unity/Editor/ConnectionHandlerEditor.cs.meta b/Packages/io.chainsafe.web3-unity/Editor/ConnectionHandlerEditor.cs.meta new file mode 100644 index 000000000..dbe661541 --- /dev/null +++ b/Packages/io.chainsafe.web3-unity/Editor/ConnectionHandlerEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 64100dda31139dc419646b80718ad62b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Common/Scripts/LoginProvider.cs b/Packages/io.chainsafe.web3-unity/Runtime/Common/Scripts/LoginProvider.cs deleted file mode 100644 index da35c917d..000000000 --- a/Packages/io.chainsafe.web3-unity/Runtime/Common/Scripts/LoginProvider.cs +++ /dev/null @@ -1,53 +0,0 @@ -using System; -using System.Threading.Tasks; -using ChainSafe.Gaming.UnityPackage.Common; -using UnityEngine; - -namespace Scenes -{ - /// - /// A concrete implementation of . - /// - public abstract class LoginProvider : MonoBehaviour, ILoginProvider - { - [SerializeField] private string gelatoApiKey = ""; - - [SerializeField] private ErrorPopup errorPopup; - - public string GelatoApiKey => gelatoApiKey; - public IWeb3BuilderServiceAdapter[] Web3BuilderServiceAdapters { get; private set; } - public IWeb3InitializedHandler[] Web3InitializedHandlers { get; private set; } - - private void Start() - { - Initialize(); - } - - /// - /// Initializes Login providers. - /// - protected virtual void Initialize() - { - Web3BuilderServiceAdapters = GetComponents(); - - Web3InitializedHandlers = GetComponents(); - } - - /// - /// Try to Login and displays error and throws exception on a failed attempt. - /// - public virtual async Task TryLogin() - { - try - { - await (this as ILoginProvider).Login(); - } - catch (Exception e) - { - errorPopup.ShowError($"Login failed, please try again\n{e.Message} (see console for more details)"); - - throw; - } - } - } -} \ No newline at end of file diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Data/WalletConnectConfig.asset b/Packages/io.chainsafe.web3-unity/Runtime/Data/WalletConnectConfig.asset new file mode 100644 index 000000000..8fe41d12a --- /dev/null +++ b/Packages/io.chainsafe.web3-unity/Runtime/Data/WalletConnectConfig.asset @@ -0,0 +1,39 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 37e83d145d6648228945ef840b1b1562, type: 3} + m_Name: WalletConnectConfig + m_EditorClassIdentifier: + k__BackingField: 1 + k__BackingField: Web3.Unity + k__BackingField: f4bff60eb260841f46b1c77588cd8acb + k__BackingField: unity-game + k__BackingField: + Name: Web3.Unity + Description: web3.unity is an open-source gaming SDK written in C# and developed + by ChainSafe Gaming. It connects games built in the Unity game engine to the + blockchain. The library currently supports games built for web browsers (WebGL), + iOS/Android mobile, and desktop. web3.unity is compatible with most EVM-based + chains such as Ethereum, Polygon, Moonbeam, Cronos, Nervos, and Binance Smart + Chain, letting developers easily choose and switch between them to create the + best in-game experience. + Url: https://chainsafe.io/ + Icons: [] + Redirect: + Native: + Universal: + VerifyUrl: + k__BackingField: wallet-connect/ + k__BackingField: + enabledWallets: [] + disabledWallets: [] + connectionHandlerProvider: {fileID: 11400000, guid: cdc198015a446e54794e5921e5aa81ef, type: 2} + k__BackingField: 0 diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Data/WalletConnectConfig.asset.meta b/Packages/io.chainsafe.web3-unity/Runtime/Data/WalletConnectConfig.asset.meta new file mode 100644 index 000000000..0c8abf1ab --- /dev/null +++ b/Packages/io.chainsafe.web3-unity/Runtime/Data/WalletConnectConfig.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fde7db0e37b4a884da1149e9f1999093 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Resources.meta b/Packages/io.chainsafe.web3-unity/Runtime/Resources.meta new file mode 100644 index 000000000..7f428c9cc --- /dev/null +++ b/Packages/io.chainsafe.web3-unity/Runtime/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ecd1fc3f675dd9b4198cbcded35a3797 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Resources/MetamaskConnectionProviderConfig.asset b/Packages/io.chainsafe.web3-unity/Runtime/Resources/MetamaskConnectionProviderConfig.asset new file mode 100644 index 000000000..409856385 --- /dev/null +++ b/Packages/io.chainsafe.web3-unity/Runtime/Resources/MetamaskConnectionProviderConfig.asset @@ -0,0 +1,16 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1272c3d1812e95e408d945d25da049bb, type: 3} + m_Name: MetamaskConnectionProviderConfig + m_EditorClassIdentifier: + k__BackingField: MetaMask + k__BackingField: {fileID: 4276990323382053958, guid: 1200437cb83a29c4fb63faa44cf63f0d, type: 3} diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Resources/MetamaskConnectionProviderConfig.asset.meta b/Packages/io.chainsafe.web3-unity/Runtime/Resources/MetamaskConnectionProviderConfig.asset.meta new file mode 100644 index 000000000..c7de3f2e6 --- /dev/null +++ b/Packages/io.chainsafe.web3-unity/Runtime/Resources/MetamaskConnectionProviderConfig.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 15bca0e27aa9c9446b907f31a512906c +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Resources/WalletConnectConnectionProviderConfig.asset b/Packages/io.chainsafe.web3-unity/Runtime/Resources/WalletConnectConnectionProviderConfig.asset new file mode 100644 index 000000000..3bacd7db2 --- /dev/null +++ b/Packages/io.chainsafe.web3-unity/Runtime/Resources/WalletConnectConnectionProviderConfig.asset @@ -0,0 +1,16 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1272c3d1812e95e408d945d25da049bb, type: 3} + m_Name: WalletConnectConnectionProviderConfig + m_EditorClassIdentifier: + k__BackingField: Wallet Connect + k__BackingField: {fileID: 4800578877220411311, guid: 4591cfadb2bf9824da90ebf4005728a8, type: 3} diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Resources/WalletConnectConnectionProviderConfig.asset.meta b/Packages/io.chainsafe.web3-unity/Runtime/Resources/WalletConnectConnectionProviderConfig.asset.meta new file mode 100644 index 000000000..1a6bde699 --- /dev/null +++ b/Packages/io.chainsafe.web3-unity/Runtime/Resources/WalletConnectConnectionProviderConfig.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 723743175ed10c540ae2497bde52f150 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Common.meta b/Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection.meta similarity index 100% rename from Packages/io.chainsafe.web3-unity/Runtime/Common.meta rename to Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection.meta diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection/ConnectionHandler.cs b/Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection/ConnectionHandler.cs new file mode 100644 index 000000000..51d59ae07 --- /dev/null +++ b/Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection/ConnectionHandler.cs @@ -0,0 +1,88 @@ +using System; +using System.Threading.Tasks; +using ChainSafe.Gaming.UnityPackage.UI; +using UnityEngine; + +namespace ChainSafe.Gaming.UnityPackage.Connection +{ + /// + /// A concrete implementation of . + /// + public class ConnectionHandler : MonoBehaviour, IConnectionHandler + { + [SerializeField] private string gelatoApiKey = ""; + [Space] + [SerializeField] private ConnectModal connectModal; + // Handed in ConnectionHandlerEditor + [HideInInspector] [SerializeField] private ConnectionProvider[] providers; + + public string GelatoApiKey => gelatoApiKey; + public IWeb3BuilderServiceAdapter[] Web3BuilderServiceAdapters { get; private set; } + public IWeb3InitializedHandler[] Web3InitializedHandlers { get; private set; } + public ConnectionProvider ConnectionProvider { get; private set; } + + private void Start() + { + Initialize(); + } + + /// + /// Initializes Connection Handler. + /// + protected virtual async void Initialize() + { + Web3BuilderServiceAdapters = GetComponents(); + + Web3InitializedHandlers = GetComponents(); + + foreach (var provider in providers) + { + if (provider != null && provider.IsAvailable) + { + var instantiatedProvider = connectModal.AddProvider(provider); + + await instantiatedProvider.Initialize(); + + instantiatedProvider.ConnectButton.onClick.AddListener(delegate + { + ConnectionProvider = instantiatedProvider; + + ConnectClicked(); + }); + } + } + } + + private async void ConnectClicked() + { + await TryConnect(); + } + + /// + /// Try to Connect and displays error and throws exception on a failed attempt. + /// + public virtual async Task TryConnect() + { + try + { + connectModal.ShowLoading(); + + await (this as IConnectionHandler).Connect(); + } + catch (Exception e) + { + if (!(e is TaskCanceledException)) + { + connectModal.DisplayError( + $"Connection failed, please try again."); + + ConnectionProvider.HandleException(e); + } + } + finally + { + connectModal.HideLoading(); + } + } + } +} \ No newline at end of file diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Common/Scripts/LoginProvider.cs.meta b/Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection/ConnectionHandler.cs.meta similarity index 100% rename from Packages/io.chainsafe.web3-unity/Runtime/Common/Scripts/LoginProvider.cs.meta rename to Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection/ConnectionHandler.cs.meta diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection/ConnectionProvider.cs b/Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection/ConnectionProvider.cs new file mode 100644 index 000000000..0197afda3 --- /dev/null +++ b/Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection/ConnectionProvider.cs @@ -0,0 +1,50 @@ +using System; +using System.Threading.Tasks; +using ChainSafe.Gaming.Web3.Build; +using UnityEngine; +using UnityEngine.UI; + +namespace ChainSafe.Gaming.UnityPackage.Connection +{ + /// + /// Connection Provider used for connecting to a wallet. + /// + public abstract class ConnectionProvider : MonoBehaviour, IWeb3BuilderServiceAdapter + { + /// + /// Is provider available for connection. + /// Could be platform specific or other conditions. + /// + public abstract bool IsAvailable { get; } + + /// + /// Button to connect to the wallet. + /// + [field: SerializeField] public Button ConnectButton { get; private set; } + + /// + /// Initialize Connection provider. + /// + /// Awaitable Task. + public abstract Task Initialize(); + + /// + /// Configure services for the Web3 instance. + /// This is where you add wallet connection services to . + /// + /// + /// + public abstract Web3Builder ConfigureServices(Web3Builder web3Builder); + + /// + /// Handle exception thrown during connection. + /// Different providers might handler it differently. + /// + /// Exception thrown during connection. + /// Exception thrown during connection. + public virtual void HandleException(Exception exception) + { + throw exception; + } + } +} diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection/ConnectionProvider.cs.meta b/Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection/ConnectionProvider.cs.meta new file mode 100644 index 000000000..3439b8bb1 --- /dev/null +++ b/Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection/ConnectionProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4339c1b6fafbb934081de0b151b2de7b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection/ConnectionProviderConfig.cs b/Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection/ConnectionProviderConfig.cs new file mode 100644 index 000000000..437c94d72 --- /dev/null +++ b/Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection/ConnectionProviderConfig.cs @@ -0,0 +1,21 @@ +using UnityEngine; + +namespace ChainSafe.Gaming.UnityPackage.Connection +{ + /// + /// Connection Provider Config Scriptable Object. + /// + [CreateAssetMenu(menuName = "ChainSafe/Connection Provider Config", fileName = "ConnectionProviderConfig")] + public class ConnectionProviderConfig : ScriptableObject + { + /// + /// Name of connection provider. + /// + [field: SerializeField] public string Name { get; private set; } + + /// + /// Row Prefab of connection provider. + /// + [field: SerializeField] public ConnectionProvider ProviderRow { get; private set; } + } +} diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection/ConnectionProviderConfig.cs.meta b/Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection/ConnectionProviderConfig.cs.meta new file mode 100644 index 000000000..37d415ccb --- /dev/null +++ b/Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection/ConnectionProviderConfig.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1272c3d1812e95e408d945d25da049bb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Common/Scripts/ErrorPopup.cs b/Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection/ErrorPopup.cs similarity index 100% rename from Packages/io.chainsafe.web3-unity/Runtime/Common/Scripts/ErrorPopup.cs rename to Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection/ErrorPopup.cs diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Common/Scripts/ErrorPopup.cs.meta b/Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection/ErrorPopup.cs.meta similarity index 100% rename from Packages/io.chainsafe.web3-unity/Runtime/Common/Scripts/ErrorPopup.cs.meta rename to Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection/ErrorPopup.cs.meta diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Common/Scripts/ILoginProvider.cs b/Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection/IConnectionHandler.cs similarity index 86% rename from Packages/io.chainsafe.web3-unity/Runtime/Common/Scripts/ILoginProvider.cs rename to Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection/IConnectionHandler.cs index 24c9a4621..12188f790 100644 --- a/Packages/io.chainsafe.web3-unity/Runtime/Common/Scripts/ILoginProvider.cs +++ b/Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection/IConnectionHandler.cs @@ -1,27 +1,20 @@ -using System; -using System.Collections; -using System.Collections.Generic; using System.Threading.Tasks; using ChainSafe.Gaming.Evm.Contracts; using ChainSafe.Gaming.Evm.JsonRpc; using ChainSafe.Gaming.Marketplace.Extensions; using ChainSafe.Gaming.MultiCall; -using ChainSafe.Gaming.UnityPackage; using ChainSafe.Gaming.Web3; using ChainSafe.Gaming.Web3.Build; using ChainSafe.Gaming.Web3.Unity; using ChainSafe.GamingSdk.Gelato; using Scripts.EVM.Token; -using UnityEngine; -using UnityEngine.SceneManagement; -using Environment = ChainSafe.Gaming.SygmaClient.Types.Environment; -namespace ChainSafe.Gaming.UnityPackage.Common +namespace ChainSafe.Gaming.UnityPackage.Connection { /// /// Builds Instance and Login using a Wallet or a provider. /// - public interface ILoginProvider + public interface IConnectionHandler { /// /// Gelato API key from Gelato's Web Dashboard. @@ -37,19 +30,22 @@ public interface ILoginProvider /// All Web3 initialized handlers called when Web3 instance is initialized. /// public IWeb3InitializedHandler[] Web3InitializedHandlers { get; } + + /// + /// Connection Provider used to create connection. + /// + public ConnectionProvider ConnectionProvider { get; } /// /// Login by Building a Instance. /// - public async Task Login() + public async Task Connect() { - Web3.Web3 web3; - Web3Builder web3Builder = new Web3Builder(ProjectConfigUtilities.Load()).Configure(ConfigureCommonServices); web3Builder = ConfigureWeb3Services(web3Builder); - web3 = await web3Builder.LaunchAsync(); + var web3 = await web3Builder.LaunchAsync(); Web3Accessor.Set(web3); @@ -76,11 +72,12 @@ private Web3Builder ConfigureWeb3Services(Web3Builder web3Builder) web3Builder = adapter.ConfigureServices(web3Builder); } - return web3Builder; + return ConnectionProvider.ConfigureServices(web3Builder); } private void ConfigureCommonServices(IWeb3ServiceCollection services) { + // TODO: most of these can/should be service adapters services .UseUnityEnvironment() .UseGelato(GelatoApiKey) diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Common/Scripts/ILoginProvider.cs.meta b/Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection/IConnectionHandler.cs.meta similarity index 100% rename from Packages/io.chainsafe.web3-unity/Runtime/Common/Scripts/ILoginProvider.cs.meta rename to Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection/IConnectionHandler.cs.meta diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Common/Scripts/IWeb3BuilderServiceAdapter.cs b/Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection/IWeb3BuilderServiceAdapter.cs similarity index 91% rename from Packages/io.chainsafe.web3-unity/Runtime/Common/Scripts/IWeb3BuilderServiceAdapter.cs rename to Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection/IWeb3BuilderServiceAdapter.cs index a14bd1b30..2c9001d14 100644 --- a/Packages/io.chainsafe.web3-unity/Runtime/Common/Scripts/IWeb3BuilderServiceAdapter.cs +++ b/Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection/IWeb3BuilderServiceAdapter.cs @@ -1,6 +1,6 @@ using ChainSafe.Gaming.Web3.Build; -namespace ChainSafe.Gaming.UnityPackage.Common +namespace ChainSafe.Gaming.UnityPackage.Connection { /// /// Provides services for building a instance. diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Common/Scripts/IWeb3BuilderServiceAdapter.cs.meta b/Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection/IWeb3BuilderServiceAdapter.cs.meta similarity index 100% rename from Packages/io.chainsafe.web3-unity/Runtime/Common/Scripts/IWeb3BuilderServiceAdapter.cs.meta rename to Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection/IWeb3BuilderServiceAdapter.cs.meta diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Common/Scripts/IWeb3InitializedHandler.cs b/Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection/IWeb3InitializedHandler.cs similarity index 66% rename from Packages/io.chainsafe.web3-unity/Runtime/Common/Scripts/IWeb3InitializedHandler.cs rename to Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection/IWeb3InitializedHandler.cs index 177493e43..9121b8903 100644 --- a/Packages/io.chainsafe.web3-unity/Runtime/Common/Scripts/IWeb3InitializedHandler.cs +++ b/Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection/IWeb3InitializedHandler.cs @@ -1,4 +1,4 @@ -namespace ChainSafe.Gaming.UnityPackage.Common +namespace ChainSafe.Gaming.UnityPackage.Connection { /// /// Initialized handler used for executing logic when a web3 instance is initialized. @@ -6,7 +6,7 @@ namespace ChainSafe.Gaming.UnityPackage.Common public interface IWeb3InitializedHandler { /// - /// Called when Web3 Instance in is initialized. + /// Called when Web3 Instance in is initialized. /// public void OnWeb3Initialized(); } diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Common/Scripts/IWeb3InitializedHandler.cs.meta b/Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection/IWeb3InitializedHandler.cs.meta similarity index 100% rename from Packages/io.chainsafe.web3-unity/Runtime/Common/Scripts/IWeb3InitializedHandler.cs.meta rename to Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection/IWeb3InitializedHandler.cs.meta diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Common/Scripts/LoadSceneOnLogin.cs b/Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection/LoadSceneOnLogin.cs similarity index 88% rename from Packages/io.chainsafe.web3-unity/Runtime/Common/Scripts/LoadSceneOnLogin.cs rename to Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection/LoadSceneOnLogin.cs index 06d3f827e..b9c377079 100644 --- a/Packages/io.chainsafe.web3-unity/Runtime/Common/Scripts/LoadSceneOnLogin.cs +++ b/Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection/LoadSceneOnLogin.cs @@ -1,8 +1,7 @@ -using ChainSafe.Gaming.UnityPackage.Common; using UnityEngine; using UnityEngine.SceneManagement; -namespace ChainSafe.Gaming.UnityPackage.Common +namespace ChainSafe.Gaming.UnityPackage.Connection { /// /// Loads scene when Web3 Instance is initialized. diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Common/Scripts/LoadSceneOnLogin.cs.meta b/Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection/LoadSceneOnLogin.cs.meta similarity index 100% rename from Packages/io.chainsafe.web3-unity/Runtime/Common/Scripts/LoadSceneOnLogin.cs.meta rename to Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection/LoadSceneOnLogin.cs.meta diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection/MetamaskConnectionProvider.cs b/Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection/MetamaskConnectionProvider.cs new file mode 100644 index 000000000..1b58e3256 --- /dev/null +++ b/Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection/MetamaskConnectionProvider.cs @@ -0,0 +1,33 @@ +using System.Threading.Tasks; +#if UNITY_WEBGL && !UNITY_EDITOR +using ChainSafe.Gaming.Unity.MetaMask; +using ChainSafe.Gaming.Web3.Evm.Wallet; +#endif +using ChainSafe.Gaming.Web3.Build; +using UnityEngine; + +namespace ChainSafe.Gaming.UnityPackage.Connection +{ + /// + /// Metamask connection provider used for connecting to a Metamask wallet. + /// + public class MetamaskConnectionProvider : ConnectionProvider + { + public override bool IsAvailable => Application.platform == RuntimePlatform.WebGLPlayer && Application.isEditor == false; + + public override Task Initialize() + { + return Task.CompletedTask; + } + + public override Web3Builder ConfigureServices(Web3Builder web3Builder) + { + return web3Builder.Configure(services => + { +#if UNITY_WEBGL && !UNITY_EDITOR + services.UseMetaMask().UseWalletSigner().UseWalletTransactionExecutor(); +#endif + }); + } + } +} diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection/MetamaskConnectionProvider.cs.meta b/Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection/MetamaskConnectionProvider.cs.meta new file mode 100644 index 000000000..48f360a01 --- /dev/null +++ b/Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection/MetamaskConnectionProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1b64d00084d2c544aa644a8a6010964d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection/WalletConnectConnectionProvider.cs b/Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection/WalletConnectConnectionProvider.cs new file mode 100644 index 000000000..e25580af5 --- /dev/null +++ b/Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection/WalletConnectConnectionProvider.cs @@ -0,0 +1,33 @@ +using System.Threading.Tasks; +using ChainSafe.Gaming.WalletConnect; +using ChainSafe.Gaming.Web3.Build; +using ChainSafe.Gaming.Web3.Evm.Wallet; +using UnityEngine; + +namespace ChainSafe.Gaming.UnityPackage.Connection +{ + /// + /// WalletConnect connection provider used for connecting to a wallet using WalletConnect. + /// + public class WalletConnectConnectionProvider : ConnectionProvider + { + [SerializeField] private WalletConnectConfigSO walletConnectConfig; + + public override bool IsAvailable => Application.isEditor || Application.platform != RuntimePlatform.WebGLPlayer; + + public override Task Initialize() + { + return Task.CompletedTask; + } + + public override Web3Builder ConfigureServices(Web3Builder web3Builder) + { + return web3Builder.Configure(services => + { + // var rememberSession = rememberSessionToggle.isOn || storedSessionAvailable; + services.UseWalletConnect(walletConnectConfig.WithRememberSession(false)) + .UseWalletSigner().UseWalletTransactionExecutor(); + }); + } + } +} diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection/WalletConnectConnectionProvider.cs.meta b/Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection/WalletConnectConnectionProvider.cs.meta new file mode 100644 index 000000000..339cfb980 --- /dev/null +++ b/Packages/io.chainsafe.web3-unity/Runtime/Scripts/Connection/WalletConnectConnectionProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 582efc0fde77aab43a77ee4237ba305a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Scripts/UI/ConnectModal.cs b/Packages/io.chainsafe.web3-unity/Runtime/Scripts/UI/ConnectModal.cs index 6cece7c99..82eea833a 100644 --- a/Packages/io.chainsafe.web3-unity/Runtime/Scripts/UI/ConnectModal.cs +++ b/Packages/io.chainsafe.web3-unity/Runtime/Scripts/UI/ConnectModal.cs @@ -1,11 +1,12 @@ -using System; -using System.Collections; -using System.Collections.Generic; +using ChainSafe.Gaming.UnityPackage.Connection; using UnityEngine; using UnityEngine.UI; -namespace ChainSafe.Gaming +namespace ChainSafe.Gaming.UnityPackage.UI { + /// + /// Connection Modal prompted for connecting to a provider. + /// public class ConnectModal : MonoBehaviour { [SerializeField] private ErrorOverlay errorOverlay; @@ -24,21 +25,41 @@ private void Start() closeFromBackgroundButton.onClick.AddListener(Close); } + /// + /// Display Error. + /// + /// Error Message. public void DisplayError(string message) { errorOverlay.DisplayError(message); } + /// + /// Show Loading Overlay. + /// public void ShowLoading() { loadingOverlay.gameObject.SetActive(true); } + /// + /// Hide Loading overlay. + /// public void HideLoading() { loadingOverlay.gameObject.SetActive(false); } + /// + /// Add connection provider to the modal. + /// + /// ConnectionProvider prefab to be added. + /// Added connection provider. + public ConnectionProvider AddProvider(ConnectionProvider provider) + { + return Instantiate(provider, providerContainer); + } + private void Close() { gameObject.SetActive(false); diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Scripts/UI/ErrorOverlay.cs b/Packages/io.chainsafe.web3-unity/Runtime/Scripts/UI/ErrorOverlay.cs index eba3ee74a..0728725c3 100644 --- a/Packages/io.chainsafe.web3-unity/Runtime/Scripts/UI/ErrorOverlay.cs +++ b/Packages/io.chainsafe.web3-unity/Runtime/Scripts/UI/ErrorOverlay.cs @@ -5,8 +5,11 @@ using UnityEngine; using UnityEngine.UI; -namespace ChainSafe.Gaming +namespace ChainSafe.Gaming.UnityPackage.UI { + /// + /// Error overlay used for displaying error messages. + /// public class ErrorOverlay : MonoBehaviour { [SerializeField] private TextMeshProUGUI errorText; @@ -17,6 +20,10 @@ private void Start() closeButton.onClick.AddListener(Close); } + /// + /// Display error messages. + /// + /// Error message to display. public void DisplayError(string message) { gameObject.SetActive(true); @@ -24,7 +31,10 @@ public void DisplayError(string message) errorText.SetText(message); } - public void Close() + /// + /// Close error overlay. + /// + private void Close() { gameObject.SetActive(false); } diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Scripts/UI/LoadingOverlay.cs b/Packages/io.chainsafe.web3-unity/Runtime/Scripts/UI/LoadingOverlay.cs index b82c24158..cb1fb07cb 100644 --- a/Packages/io.chainsafe.web3-unity/Runtime/Scripts/UI/LoadingOverlay.cs +++ b/Packages/io.chainsafe.web3-unity/Runtime/Scripts/UI/LoadingOverlay.cs @@ -4,8 +4,11 @@ using UnityEngine; using UnityEngine.UI; -namespace ChainSafe.Gaming +namespace ChainSafe.Gaming.UnityPackage.UI { + /// + /// Loading overlay used for displaying a loading spinner. + /// public class LoadingOverlay : MonoBehaviour { [SerializeField] private RectTransform spinnerTransform; diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Scripts/UI/Resizer.cs b/Packages/io.chainsafe.web3-unity/Runtime/Scripts/UI/Resizer.cs index 380e62874..a6cbbdd5b 100644 --- a/Packages/io.chainsafe.web3-unity/Runtime/Scripts/UI/Resizer.cs +++ b/Packages/io.chainsafe.web3-unity/Runtime/Scripts/UI/Resizer.cs @@ -1,10 +1,10 @@ -using System; -using System.Collections; -using System.Collections.Generic; using UnityEngine; -namespace ChainSafe.Gaming +namespace ChainSafe.Gaming.UnityPackage.UI { + /// + /// Resizes a rect Transform responsively/based on percentage. + /// [RequireComponent(typeof(RectTransform))] public class Resizer : MonoBehaviour { diff --git a/src/UnitySampleProject/Assets/Samples/web3.unity SDK HyperPlay/1.0.0/HyperPlay Samples/Scripts/HyperPlayLoginProvider.cs b/src/UnitySampleProject/Assets/Samples/web3.unity SDK HyperPlay/1.0.0/HyperPlay Samples/Scripts/HyperPlayLoginProvider.cs index 2683e7a57..2485cd1ca 100644 --- a/src/UnitySampleProject/Assets/Samples/web3.unity SDK HyperPlay/1.0.0/HyperPlay Samples/Scripts/HyperPlayLoginProvider.cs +++ b/src/UnitySampleProject/Assets/Samples/web3.unity SDK HyperPlay/1.0.0/HyperPlay Samples/Scripts/HyperPlayLoginProvider.cs @@ -1,16 +1,15 @@ using ChainSafe.Gaming.HyperPlay; -using ChainSafe.Gaming.UnityPackage.Common; +using ChainSafe.Gaming.UnityPackage.Connection; using ChainSafe.Gaming.Web3.Build; using ChainSafe.Gaming.Web3.Evm.Wallet; using Microsoft.Extensions.DependencyInjection; -using Scenes; using UnityEngine; using UnityEngine.UI; /// /// Login using HyperPlay desktop client. /// -public class HyperPlayLoginProvider : LoginProvider, IWeb3BuilderServiceAdapter +public class HyperPlayLoginProvider : ConnectionHandler, IWeb3BuilderServiceAdapter { [SerializeField] private Button loginButton; [SerializeField] private Toggle rememberMeToggle; @@ -34,7 +33,7 @@ protected override async void Initialize() { Debug.Log("Proceeding with auto-login."); - await TryLogin(); + await TryConnect(); } loginButton.onClick.AddListener(OnLoginClicked); @@ -59,6 +58,6 @@ public Web3Builder ConfigureServices(Web3Builder web3Builder) private async void OnLoginClicked() { - await TryLogin(); + await TryConnect(); } } diff --git a/src/UnitySampleProject/Assets/Samples/web3.unity SDK Lootboxes/2.6.0/Lootboxes Samples/Scripts/LootboxesServicesAdapter.cs b/src/UnitySampleProject/Assets/Samples/web3.unity SDK Lootboxes/2.6.0/Lootboxes Samples/Scripts/LootboxesServicesAdapter.cs index 0d00d2887..b38bd1194 100644 --- a/src/UnitySampleProject/Assets/Samples/web3.unity SDK Lootboxes/2.6.0/Lootboxes Samples/Scripts/LootboxesServicesAdapter.cs +++ b/src/UnitySampleProject/Assets/Samples/web3.unity SDK Lootboxes/2.6.0/Lootboxes Samples/Scripts/LootboxesServicesAdapter.cs @@ -1,5 +1,5 @@ using ChainSafe.Gaming.Lootboxes.Chainlink; -using ChainSafe.Gaming.UnityPackage.Common; +using ChainSafe.Gaming.UnityPackage.Connection; using ChainSafe.Gaming.Web3.Build; using Microsoft.Extensions.DependencyInjection; using UnityEngine; diff --git a/src/UnitySampleProject/Assets/Samples/web3.unity SDK Web3Auth/2.6.0/Web3Auth Samples/Scripts/Web3AuthLoginProvider.cs b/src/UnitySampleProject/Assets/Samples/web3.unity SDK Web3Auth/2.6.0/Web3Auth Samples/Scripts/Web3AuthLoginProvider.cs index 034965dc0..c262a1d57 100644 --- a/src/UnitySampleProject/Assets/Samples/web3.unity SDK Web3Auth/2.6.0/Web3Auth Samples/Scripts/Web3AuthLoginProvider.cs +++ b/src/UnitySampleProject/Assets/Samples/web3.unity SDK Web3Auth/2.6.0/Web3Auth Samples/Scripts/Web3AuthLoginProvider.cs @@ -5,12 +5,11 @@ using AOT; using System.Threading.Tasks; using ChainSafe.Gaming.UnityPackage; -using ChainSafe.Gaming.UnityPackage.Common; +using ChainSafe.Gaming.UnityPackage.Connection; using ChainSafe.Gaming.Web3.Analytics; using ChainSafe.Gaming.Web3.Build; using ChainSafe.GamingSdk.Web3Auth; using Nethereum.Hex.HexTypes; -using Scenes; using TMPro; using UnityEngine; using UnityEngine.UI; @@ -19,7 +18,7 @@ /// /// Login using Web3Auth. /// -public class Web3AuthLoginProvider : LoginProvider, IWeb3BuilderServiceAdapter +public class Web3AuthLoginProvider : ConnectionHandler, IWeb3BuilderServiceAdapter { /// /// Struct used for pairing login buttons to Web3 auth providers. @@ -56,16 +55,16 @@ public struct ProviderAndButtonPair private Provider? selectedProvider; private bool rememberMe; -#if UNITY_WEBGL && !UNITY_EDITOR - [DllImport("__Internal")] - private static extern void InitWeb3Auth(string clientId, string chainId, string rpcTarget, string displayName, string blockExplorerUrl, string ticker, string tickerName, string network); - [DllImport("__Internal")] - private static extern void Web3AuthLogin(string provider, bool rememberMe); - [DllImport("__Internal")] - private static extern void SetLoginCallback(Action callback); - - public static event Action Web3AuthWebGLConnected; -#endif +// #if UNITY_WEBGL && !UNITY_EDITOR +// [DllImport("__Internal")] +// private static extern void InitWeb3Auth(string clientId, string chainId, string rpcTarget, string displayName, string blockExplorerUrl, string ticker, string tickerName, string network); +// [DllImport("__Internal")] +// private static extern void Web3AuthLogin(string provider, bool rememberMe); +// [DllImport("__Internal")] +// private static extern void SetLoginCallback(Action callback); +// +// public static event Action Web3AuthWebGLConnected; +// #endif public void SetRememberMe(bool rememberMe) @@ -78,61 +77,54 @@ protected override async void Initialize() base.Initialize(); providerAndButtonPairs.ForEach(p => p.Button.onClick.AddListener(delegate { LoginWithWeb3Auth(p.Provider); })); -#if !UNITY_EDITOR && UNITY_WEBGL - Web3AuthWebGLConnected += Web3AuthSet; - var projectSettings = ProjectConfigUtilities.Load(); - SetLoginCallback(Web3AuthConnected); - //1155 is a decimal number, we need to convert it to an integer - InitWeb3Auth(clientId, new HexBigInteger(BigInteger.Parse(projectSettings.ChainId)).HexValue, - projectSettings.Rpc, projectSettings.Network, "", projectSettings.Symbol, "", network.ToString().ToLower()); -#else +// #if !UNITY_EDITOR && UNITY_WEBGL +// Web3AuthWebGLConnected += Web3AuthSet; +// var projectSettings = ProjectConfigUtilities.Load(); +// SetLoginCallback(Web3AuthConnected); +// //1155 is a decimal number, we need to convert it to an integer +// InitWeb3Auth(clientId, new HexBigInteger(BigInteger.Parse(projectSettings.ChainId)).HexValue, +// projectSettings.Rpc, projectSettings.Network, "", projectSettings.Symbol, "", network.ToString().ToLower()); +// #else if (!string.IsNullOrEmpty(KeyStoreManagerUtils.getPreferencesData(KeyStoreManagerUtils.SESSION_ID))) { rememberMe = true; - await TryLogin(); + await TryConnect(); Debug.Log("Restoring existing Web3Auth session (Remember Me"); } -#endif +// #endif } -#if !UNITY_EDITOR && UNITY_WEBGL - private async void Web3AuthSet(string sessionId) - { - Web3AuthWebGLConnected -= Web3AuthSet; - KeyStoreManagerUtils.savePreferenceData(KeyStoreManagerUtils.SESSION_ID, sessionId); - await TryLogin(); - } -#endif - -#if !UNITY_EDITOR && UNITY_WEBGL - [MonoPInvokeCallback(typeof(Action))] - private static void Web3AuthConnected(string sessionId) - { - Web3AuthWebGLConnected?.Invoke(sessionId); - } -#endif +// #if !UNITY_EDITOR && UNITY_WEBGL +// private async void Web3AuthSet(string sessionId) +// { +// Web3AuthWebGLConnected -= Web3AuthSet; +// KeyStoreManagerUtils.savePreferenceData(KeyStoreManagerUtils.SESSION_ID, sessionId); +// await TryConnect(); +// } +// #endif +// +// #if !UNITY_EDITOR && UNITY_WEBGL +// [MonoPInvokeCallback(typeof(Action))] +// private static void Web3AuthConnected(string sessionId) +// { +// Web3AuthWebGLConnected?.Invoke(sessionId); +// } +// #endif private async void LoginWithWeb3Auth(Provider provider) { -#if UNITY_WEBGL && !UNITY_EDITOR - Web3AuthLogin(provider.ToString().ToLower(), rememberMe); -#else +// #if UNITY_WEBGL && !UNITY_EDITOR +// Web3AuthLogin(provider.ToString().ToLower(), rememberMe); +// #else selectedProvider = provider; - await TryLogin(); + await TryConnect(); LogAnalytics(provider); } - public override async Task TryLogin() + public override async Task TryConnect() { - try - { - await (this as ILoginProvider).Login(); - EnableWalletGUI(); - } - catch (Exception e) - { - Debug.LogError($"Login failed, please try again\n{e.Message} (see console for more details)"); - throw; - } + await base.TryConnect(); + + EnableWalletGUI(); } private void EnableWalletGUI() @@ -164,7 +156,7 @@ private void LogAnalytics(Provider provider) EventName = $"Login provider {provider}", PackageName = "io.chainsafe.web3-unity.web3auth", }); -#endif +// #endif } @@ -189,13 +181,13 @@ public Web3Builder ConfigureServices(Web3Builder web3Builder) RememberMe = rememberMe }; - if (selectedProvider.HasValue) - { - web3AuthConfig.LoginParams = new LoginParams() - { - loginProvider = selectedProvider.Value - }; - } + // if (selectedProvider.HasValue) + // { + // web3AuthConfig.LoginParams = new LoginParams() + // { + // loginProvider = selectedProvider.Value + // }; + // } services.UseWeb3AuthWallet(web3AuthConfig); }); diff --git a/src/UnitySampleProject/Assets/Samples/web3.unity SDK/2.6.0/Web3.Unity Samples/Scripts/Prefabs/Logout.cs b/src/UnitySampleProject/Assets/Samples/web3.unity SDK/2.6.0/Web3.Unity Samples/Scripts/Prefabs/Logout.cs index 9b378fa5b..da90760b5 100644 --- a/src/UnitySampleProject/Assets/Samples/web3.unity SDK/2.6.0/Web3.Unity Samples/Scripts/Prefabs/Logout.cs +++ b/src/UnitySampleProject/Assets/Samples/web3.unity SDK/2.6.0/Web3.Unity Samples/Scripts/Prefabs/Logout.cs @@ -1,8 +1,5 @@ -using System.Threading.Tasks; using ChainSafe.Gaming.UnityPackage; -using ChainSafe.Gaming.Wallets; -using ChainSafe.Gaming.UnityPackage.Common; -using Scenes; +using ChainSafe.Gaming.UnityPackage.Connection; using UnityEngine; using UnityEngine.SceneManagement; diff --git a/src/UnitySampleProject/Assets/Samples/web3.unity SDK/2.6.0/Web3.Unity Samples/Scripts/Scenes/ConnectToWallet.cs b/src/UnitySampleProject/Assets/Samples/web3.unity SDK/2.6.0/Web3.Unity Samples/Scripts/Scenes/ConnectToWallet.cs index ff182bdbd..4d520887d 100644 --- a/src/UnitySampleProject/Assets/Samples/web3.unity SDK/2.6.0/Web3.Unity Samples/Scripts/Scenes/ConnectToWallet.cs +++ b/src/UnitySampleProject/Assets/Samples/web3.unity SDK/2.6.0/Web3.Unity Samples/Scripts/Scenes/ConnectToWallet.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using ChainSafe.Gaming; +using ChainSafe.Gaming.UnityPackage.UI; using UnityEngine; using UnityEngine.UI; diff --git a/src/UnitySampleProject/Assets/Samples/web3.unity SDK/2.6.0/Web3.Unity Samples/Scripts/Scenes/MetaMaskLoginProvider.cs b/src/UnitySampleProject/Assets/Samples/web3.unity SDK/2.6.0/Web3.Unity Samples/Scripts/Scenes/MetaMaskLoginProvider.cs index 5d962094c..1adf8a1cc 100644 --- a/src/UnitySampleProject/Assets/Samples/web3.unity SDK/2.6.0/Web3.Unity Samples/Scripts/Scenes/MetaMaskLoginProvider.cs +++ b/src/UnitySampleProject/Assets/Samples/web3.unity SDK/2.6.0/Web3.Unity Samples/Scripts/Scenes/MetaMaskLoginProvider.cs @@ -1,10 +1,9 @@ -using ChainSafe.Gaming.UnityPackage.Common; +using ChainSafe.Gaming.UnityPackage.Connection; #if UNITY_WEBGL && !UNITY_EDITOR using ChainSafe.Gaming.Web3.Evm.Wallet; using ChainSafe.Gaming.Unity.MetaMask; #endif using ChainSafe.Gaming.Web3.Build; -using Scenes; using UnityEngine; using UnityEngine.UI; @@ -12,7 +11,7 @@ /// Login using MetaMask. /// Only works for UnityWebGL build (not in editor). /// -public class MetaMaskLoginProvider : LoginProvider, IWeb3BuilderServiceAdapter +public class MetaMaskLoginProvider : ConnectionHandler, IWeb3BuilderServiceAdapter { [SerializeField] private Button loginButton; @@ -25,7 +24,7 @@ protected override void Initialize() private async void LoginClicked() { - await TryLogin(); + await TryConnect(); } public Web3Builder ConfigureServices(Web3Builder web3Builder) diff --git a/src/UnitySampleProject/Assets/Samples/web3.unity SDK/2.6.0/Web3.Unity Samples/Scripts/Scenes/WalletConnectLoginProvider.cs b/src/UnitySampleProject/Assets/Samples/web3.unity SDK/2.6.0/Web3.Unity Samples/Scripts/Scenes/WalletConnectLoginProvider.cs index 8c7673cd3..f1d64c68b 100644 --- a/src/UnitySampleProject/Assets/Samples/web3.unity SDK/2.6.0/Web3.Unity Samples/Scripts/Scenes/WalletConnectLoginProvider.cs +++ b/src/UnitySampleProject/Assets/Samples/web3.unity SDK/2.6.0/Web3.Unity Samples/Scripts/Scenes/WalletConnectLoginProvider.cs @@ -1,15 +1,14 @@ -using ChainSafe.Gaming.UnityPackage.Common; +using ChainSafe.Gaming.UnityPackage.Connection; using ChainSafe.Gaming.WalletConnect; using ChainSafe.Gaming.Web3.Build; using ChainSafe.Gaming.Web3.Evm.Wallet; -using Scenes; using UnityEngine; using UnityEngine.UI; /// /// Login using an existing wallet with WalletConnect. /// -public class WalletConnectLoginProvider : LoginProvider, IWeb3BuilderServiceAdapter +public class WalletConnectLoginProvider : ConnectionHandler, IWeb3BuilderServiceAdapter { [SerializeField] private WalletConnectConfigSO walletConnectConfig; [SerializeField] private bool autoLoginPreviousSession = true; @@ -31,7 +30,7 @@ protected override async void Initialize() if (autoLoginPreviousSession && storedSessionAvailable) // auto-login { Debug.Log("Proceeding with auto-login."); - await TryLogin(); + await TryConnect(); } loginButton.onClick.AddListener(OnLoginClicked); @@ -50,6 +49,6 @@ public Web3Builder ConfigureServices(Web3Builder web3Builder) private async void OnLoginClicked() { - await TryLogin(); + await TryConnect(); } } \ No newline at end of file diff --git a/src/UnitySampleProject/ProjectSettings/EditorBuildSettings.asset b/src/UnitySampleProject/ProjectSettings/EditorBuildSettings.asset index e9233db45..1bab6bcd8 100644 --- a/src/UnitySampleProject/ProjectSettings/EditorBuildSettings.asset +++ b/src/UnitySampleProject/ProjectSettings/EditorBuildSettings.asset @@ -6,25 +6,29 @@ EditorBuildSettings: serializedVersion: 2 m_Scenes: - enabled: 1 - path: Assets/Samples/web3.unity SDK Web3Auth/2.5.1/Web3.Unity Web3Auth Samples/Scenes/SampleLogin + path: Assets/Samples/web3.unity SDK Web3Auth/2.6.0/Web3Auth Samples/Scenes/SampleLogin - Web3Auth.unity guid: a8a8b501e594874448546e904e2437c5 - enabled: 1 - path: Assets/Samples/web3.unity SDK/2.5.0/Web3.Unity Samples/Scenes/SampleLogin + path: Assets/Samples/web3.unity SDK/2.6.0/Web3.Unity Samples/Scenes/SampleLogin - WalletConnect.unity guid: 1c1af5c5662d105498b2412267dde0df - enabled: 1 - path: Assets/Samples/web3.unity SDK/2.5.0/Web3.Unity Samples/Scenes/SampleLogin + path: Assets/Samples/web3.unity SDK/2.6.0/Web3.Unity Samples/Scenes/SampleLogin - MetaMask.unity guid: 7e829b2033fc8554eb0048ce07704f77 - enabled: 1 - path: Assets/Samples/web3.unity SDK HyperPlay/1.0.0/Web3.Unity HyperPlay Samples/Scenes/SampleLogin + path: Assets/Samples/web3.unity SDK HyperPlay/1.0.0/HyperPlay Samples/Scenes/SampleLogin - HyperPlay.unity guid: a31aa87c0b8cd954bb4b14166cc257dd - enabled: 1 - path: Assets/Samples/web3.unity SDK Ramp/1.0.0/Web3.Unity Ramp Samples/SampleRampIntegration.unity + path: Assets/Samples/web3.unity SDK/2.6.0/Web3.Unity Samples/Scenes/SampleLogin + - Connect Modal.unity + guid: 9cc8718ed12082a4582ab037b41d4f98 + - enabled: 1 + path: Assets/Samples/web3.unity SDK Ramp/2.6.0/Ramp Samples/SampleRampIntegration.unity guid: 9583b7671e7df46028765b84323c9bf7 - enabled: 1 - path: Assets/Samples/web3.unity SDK/2.5.0/Web3.Unity Samples/Scenes/SampleMain.unity + path: Assets/Samples/web3.unity SDK/2.6.0/Web3.Unity Samples/Scenes/SampleMain.unity guid: 516f54f8261cf44459691b7adc25e055 m_configObjects: {}