using Jovian.Logger; using Jovian.SaveSystem; using Nox.Core; using Nox.Game; using Nox.Game.UI; using System; using System.Collections.Generic; namespace Nox.UI { public class CharacterCreationView : IGameLifecycle, IMenuView { public ISaveSystem SaveSystem { get; } private readonly CharacterCreationReference characterCreationReference; private readonly MenuGameStateData menuGameStateData; private readonly GameDataState gameDataState; private readonly PartySettings partySettings; private readonly ICharacterSystems characterSystems; private List characterCreationRequests; public CharacterCreationView( CharacterCreationReference characterCreationReference, MenuGameStateData menuGameStateData, ISaveSystem saveSystem, GameDataState gameDataState, PartySettings partySettings, ICharacterSystems characterSystems) { SaveSystem = saveSystem; this.characterCreationReference = characterCreationReference; this.menuGameStateData = menuGameStateData; this.gameDataState = gameDataState; this.partySettings = partySettings; this.characterSystems = characterSystems; } public void Initialize() { characterCreationReference.startGameButton.onClick.AddListener(() => { if(characterCreationRequests == null || characterCreationRequests.Count == 0) { GlobalLogger.LogException("No character creation requests available, cannot start game, starting with a semi-random default", LogCategory.GameLogic); var randomIndex = UnityEngine.Random.Range(0, partySettings.testStarterCharacterSettings.Length-1); characterCreationRequests = new List { new () { Id = Guid.NewGuid(), Name = partySettings.testStarterCharacterSettings[randomIndex].name, Race = partySettings.testStarterCharacterSettings[randomIndex].race, Class = partySettings.testStarterCharacterSettings[randomIndex].@class, Role = CharacterRole.Protagonist, Attributes = partySettings.testStarterCharacterSettings[randomIndex].defaultEntityAttributes, Stats = partySettings.testStarterCharacterSettings[randomIndex].defaultEntityStats, Perks = partySettings.testStarterCharacterSettings[randomIndex].defaultPerksData, Modifiers = partySettings.testStarterCharacterSettings[randomIndex].defaultModifiersData } }; return; } Hide(); menuGameStateData.startGameRequests?.Invoke(PlayMode.Adventure); }); characterCreationReference.backButton.onClick.AddListener(Hide); characterCreationReference.backButtonCenter.onClick.AddListener(Hide); characterCreationReference.acceptButton.onClick.AddListener(CreateParty); } public void CreateParty() { var partyCreatorModel = new PartyCreatorModel(characterSystems.CharacterFactory, characterSystems.PartyFactory, characterCreationRequests, partySettings); var party = partyCreatorModel.CreatePartyForNewRun(); gameDataState.ActiveParty = party; } public void Tick() { return; } public void Show() { characterCreationReference.gameObject.SetActive(true); } public void Hide() { characterCreationReference.gameObject.SetActive(false); } public void Dispose() { } } }