From 1ec734d0330e801725938dd9f806b0f533a6e253 Mon Sep 17 00:00:00 2001 From: Sebastian Bularca Date: Sun, 5 Apr 2026 12:00:01 +0200 Subject: [PATCH] added the charater creation view base functionality --- .../GameState/Entities/ModifiersFactory.cs | 1 - .../UI/CharacterCreationReference.cs | 43 ++++++++++--------- .../GameState/UI/CharacterCreationView.cs | 29 +++++++++++++ .../UI/CharacterCreationView.cs.meta | 3 ++ Assets/Code/SplashMainMenuUI/MainMenuView.cs | 28 +++++++++++- .../SplashMainMenuUI/MenuPrefabsContainer.cs | 2 + ...efab => CharacterCreationReference.prefab} | 2 +- ...=> CharacterCreationReference.prefab.meta} | 0 8 files changed, 84 insertions(+), 24 deletions(-) create mode 100644 Assets/Code/GameState/UI/CharacterCreationView.cs create mode 100644 Assets/Code/GameState/UI/CharacterCreationView.cs.meta rename Assets/Prefabs/UI/{CharacterCreationView.prefab => CharacterCreationReference.prefab} (99%) rename Assets/Prefabs/UI/{CharacterCreationView.prefab.meta => CharacterCreationReference.prefab.meta} (100%) diff --git a/Assets/Code/GameState/Entities/ModifiersFactory.cs b/Assets/Code/GameState/Entities/ModifiersFactory.cs index 5d6055b..474c853 100644 --- a/Assets/Code/GameState/Entities/ModifiersFactory.cs +++ b/Assets/Code/GameState/Entities/ModifiersFactory.cs @@ -1,4 +1,3 @@ -using Jovian.InspectorTools; using Jovian.Logger; using System; using System.Collections.Generic; diff --git a/Assets/Code/GameState/UI/CharacterCreationReference.cs b/Assets/Code/GameState/UI/CharacterCreationReference.cs index 6ae7cd7..2faf5c5 100644 --- a/Assets/Code/GameState/UI/CharacterCreationReference.cs +++ b/Assets/Code/GameState/UI/CharacterCreationReference.cs @@ -2,27 +2,30 @@ using TMPro; using UnityEngine; using UnityEngine.UI; -public class CharacterCreationReference : MonoBehaviour { - public Canvas canvas; - //top - public Button backButton; - public Button settingsButton; +namespace Nox.UI { + public class CharacterCreationReference : MonoBehaviour { + public Canvas canvas; - //left - public TMP_Dropdown raceDropdown; - public TMP_Dropdown classDropdown; - public TMP_Dropdown perksDropdown; - public AttributeReference[] attributeReference; - public StatReference[] statReference; + //top + public Button backButton; + public Button settingsButton; - //center - public Button backButtonCenter; - public Button acceptButton; + //left + public TMP_Dropdown raceDropdown; + public TMP_Dropdown classDropdown; + public TMP_Dropdown perksDropdown; + public AttributeReference[] attributeReference; + public StatReference[] statReference; - //right - public Image portraitImage; - public Button portraitSelectionLeftButton; - public Button portraitSelectionRightButton; - public TMP_InputField nameInputField; - public Button startGameButton; + //center + public Button backButtonCenter; + public Button acceptButton; + + //right + public Image portraitImage; + public Button portraitSelectionLeftButton; + public Button portraitSelectionRightButton; + public TMP_InputField nameInputField; + public Button startGameButton; + } } diff --git a/Assets/Code/GameState/UI/CharacterCreationView.cs b/Assets/Code/GameState/UI/CharacterCreationView.cs new file mode 100644 index 0000000..9f40e85 --- /dev/null +++ b/Assets/Code/GameState/UI/CharacterCreationView.cs @@ -0,0 +1,29 @@ +using Nox.Core; +using Nox.Game.UI; + +namespace Nox.UI { + public class CharacterCreationView : IMenuView { + // we need prefab reference from the menu view, character creation data, save system, modifier calculation, gamemode state to start the game + // party creation data/system, + public CharacterCreationView(CharacterCreationReference characterCreationReference, MenuGameStateData menuGameStateData) { + characterCreationReference.startGameButton.onClick.AddListener(() => menuGameStateData.startGameRequests?.Invoke(PlayMode.Adventure)); + } + + public void Initialize() { + throw new System.NotImplementedException(); + } + + public void Tick() { + throw new System.NotImplementedException(); + } + public void Show() { + throw new System.NotImplementedException(); + } + public void Hide() { + throw new System.NotImplementedException(); + } + public void Dispose() { + throw new System.NotImplementedException(); + } + } +} diff --git a/Assets/Code/GameState/UI/CharacterCreationView.cs.meta b/Assets/Code/GameState/UI/CharacterCreationView.cs.meta new file mode 100644 index 0000000..a0db4e8 --- /dev/null +++ b/Assets/Code/GameState/UI/CharacterCreationView.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 555173dcbeb04c44b6f02f04fb1cb762 +timeCreated: 1775381234 \ No newline at end of file diff --git a/Assets/Code/SplashMainMenuUI/MainMenuView.cs b/Assets/Code/SplashMainMenuUI/MainMenuView.cs index 18d8372..e028657 100644 --- a/Assets/Code/SplashMainMenuUI/MainMenuView.cs +++ b/Assets/Code/SplashMainMenuUI/MainMenuView.cs @@ -3,6 +3,7 @@ using Nox.Game; using Jovian.SaveSystem; using UnityEngine; using UnityEngine.AddressableAssets; +using UnityEngine.ResourceManagement.AsyncOperations; using PlayMode = Nox.Core.PlayMode; namespace Nox.UI { @@ -14,6 +15,10 @@ namespace Nox.UI { private readonly MenuGameStateData menuGameStateData; private readonly ISaveSystem saveSystem; private MainMenuReference mainMenuReference; + private CharacterCreationReference characterCreationReference; + private CharacterCreationView characterCreationView; + private AsyncOperationHandle charCreationHandle; + public MainMenuView(MenuPrefabsContainer menuPrefabsContainer, MenuGameStateData menuGameStateData, ISaveSystem saveSystem) { this.menuPrefabsContainer = menuPrefabsContainer; this.menuGameStateData = menuGameStateData; @@ -25,7 +30,7 @@ namespace Nox.UI { } mainMenuReference.exitButton.onClick.AddListener(Application.Quit); mainMenuReference.optionsButton.onClick.AddListener(() => {/* options logic here */}); - mainMenuReference.newGameButton.onClick.AddListener(() => menuGameStateData.startGameRequests?.Invoke(PlayMode.Adventure)); + mainMenuReference.newGameButton.onClick.AddListener(InitializeCharacterCreation); bool hasSave = saveSystem.HasAnySaves(); mainMenuReference.continueButton.gameObject.SetActive(hasSave); @@ -33,8 +38,27 @@ namespace Nox.UI { mainMenuReference.continueButton.onClick.AddListener(() => menuGameStateData.continueGameRequest.Invoke()); } } - public void Tick() { } + + public void InitializeCharacterCreation() { + charCreationHandle = Addressables.InstantiateAsync(menuPrefabsContainer.characterCreationReference); + charCreationHandle.Task.ContinueWith(t => { + if(t.IsFaulted) { + Debug.LogError(t.Exception); + } + characterCreationReference =t.Result.GetComponent(); + characterCreationView = new CharacterCreationView(characterCreationReference, menuGameStateData); + characterCreationView.Show(); + }); + } + + public void Tick() { + characterCreationView?.Tick(); + } + public void Dispose() { + characterCreationView?.Dispose(); + Object.Destroy(characterCreationReference.gameObject); + charCreationHandle.Release(); } } } diff --git a/Assets/Code/SplashMainMenuUI/MenuPrefabsContainer.cs b/Assets/Code/SplashMainMenuUI/MenuPrefabsContainer.cs index 77d24ef..36a79c7 100644 --- a/Assets/Code/SplashMainMenuUI/MenuPrefabsContainer.cs +++ b/Assets/Code/SplashMainMenuUI/MenuPrefabsContainer.cs @@ -1,9 +1,11 @@ using UnityEngine; using UnityEngine.AddressableAssets; +using UnityEngine.ResourceManagement.ResourceLocations; namespace Nox.UI { [CreateAssetMenu(fileName = "MenuPrefabsContainer", menuName = "Nox/Database/UI/MenuPrefabContainer")] public class MenuPrefabsContainer : ScriptableObject { public AssetReference mainMenuReference; + public CharacterCreationReference characterCreationReference; } } diff --git a/Assets/Prefabs/UI/CharacterCreationView.prefab b/Assets/Prefabs/UI/CharacterCreationReference.prefab similarity index 99% rename from Assets/Prefabs/UI/CharacterCreationView.prefab rename to Assets/Prefabs/UI/CharacterCreationReference.prefab index 6ba2def..935a1a7 100644 --- a/Assets/Prefabs/UI/CharacterCreationView.prefab +++ b/Assets/Prefabs/UI/CharacterCreationReference.prefab @@ -342,7 +342,7 @@ GameObject: - component: {fileID: 3618468963710046005} - component: {fileID: 8834560166594506199} m_Layer: 5 - m_Name: CharacterCreationView + m_Name: CharacterCreationReference m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 diff --git a/Assets/Prefabs/UI/CharacterCreationView.prefab.meta b/Assets/Prefabs/UI/CharacterCreationReference.prefab.meta similarity index 100% rename from Assets/Prefabs/UI/CharacterCreationView.prefab.meta rename to Assets/Prefabs/UI/CharacterCreationReference.prefab.meta