Files
trail-into-darkness/Assets/Code/GameState/UI/CharacterCreationView.cs
2026-04-05 17:42:29 +02:00

79 lines
3.7 KiB
C#

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<CharacterCreationRequest> 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<CharacterCreationRequest> { 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() { }
}
}