added modfiers factory

This commit is contained in:
Sebastian Bularca
2026-03-22 18:28:33 +01:00
parent 47d30c0c49
commit 96baba24b4
13 changed files with 123 additions and 37 deletions

View File

@@ -70,6 +70,11 @@ MonoBehaviour:
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: 56d06fe56df3cd047bdea7504e81c463
m_Address: ModifiersRegistry
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: 60a7c1e10ed7ff94cbe191d9d3e305ed
m_Address: Assets/Art/UI/menu_corner.png
m_ReadOnly: 0

View File

@@ -104,8 +104,9 @@ namespace Nox.Core {
var perKRegistry = Addressables.LoadAssetAsync<PerksRegistry>("PerksRegistry ").WaitForCompletion();
var characterRegistry = Addressables.LoadAssetAsync<CharacterRegistry>("CharacterRegistry").WaitForCompletion();
var defaultPartySettings = Addressables.LoadAssetAsync<DefaultPartySettings>("DefaultPartySettings").WaitForCompletion();
var modifiersRegistry = Addressables.LoadAssetAsync<ModifiersRegistry>("ModifiersRegistry").WaitForCompletion();
var characterSystems = DefaultCharacterSystemsFactory.Create(characterBaseSettings, perKRegistry, characterRegistry);
var characterSystems = DefaultCharacterSystemsFactory.Create(characterBaseSettings, perKRegistry, characterRegistry, modifiersRegistry);
var partyCreatorModel = new PartyCreatorModel(characterSystems.CharacterFactory, characterSystems.PartyFactory, defaultPartySettings);
applicationStates = new Dictionary<GameState, IGameState> {

View File

@@ -2,18 +2,21 @@ namespace Nox.Game {
public interface ICharacterSystems {
IPerkFactory PerkFactory { get; }
IModfiersFactory ModifiersFactory { get; }
ICharacterFactory CharacterFactory { get; }
IPartyFactory PartyFactory { get; }
}
public sealed class CharacterSystems : ICharacterSystems {
public CharacterSystems(IPerkFactory perkFactory, ICharacterFactory characterFactory, IPartyFactory partyFactory) {
public CharacterSystems(IPerkFactory perkFactory, IModfiersFactory modifiersFactory, ICharacterFactory characterFactory, IPartyFactory partyFactory) {
ModifiersFactory = modifiersFactory;
PerkFactory = perkFactory;
CharacterFactory = characterFactory;
PartyFactory = partyFactory;
}
public IPerkFactory PerkFactory { get; }
public IModfiersFactory ModifiersFactory { get; }
public ICharacterFactory CharacterFactory { get; }
public IPartyFactory PartyFactory { get; }
}

View File

@@ -2,14 +2,19 @@ using System;
namespace Nox.Game {
public static class DefaultCharacterSystemsFactory {
public static ICharacterSystems Create(CharacterBaseSettings characterBaseSettings, PerksRegistry perksRegistry, CharacterRegistry characterRegistry) {
public static ICharacterSystems Create(
CharacterBaseSettings characterBaseSettings,
PerksRegistry perksRegistry,
CharacterRegistry characterRegistry,
ModifiersRegistry modifiersRegistry) {
IPerkFactory perkFactory = new PerkFactory(perksRegistry);
IModfiersFactory modifiersFactory = new ModifiersFactory(modifiersRegistry);
ICharacterAttributesFactory attributesFactory = new CharacterAttributesFactory(characterRegistry);
ICharacterStatsFactory statsFactory = new CharacterStatsFactory();
ICharacterFactory characterFactory = new CharacterFactory(attributesFactory, statsFactory, perkFactory);
IPartyFactory partyFactory = new PartyFactory(characterBaseSettings);
return new CharacterSystems(perkFactory, characterFactory, partyFactory);
return new CharacterSystems(perkFactory, modifiersFactory, characterFactory, partyFactory);
}
}
}

View File

@@ -58,18 +58,6 @@ namespace Nox.Game {
public int experience;
}
[Serializable]
public sealed class PerkDefinition {
public string id;
public string name;
public ModifiersData modifiers = new ();
}
[Serializable]
public sealed class PerksData {
public List<PerkDefinition> perks = new ();
}
[Serializable]
public sealed class CharacterDefinition : IEntityDefinition {
[SerializeField] private string id;

View File

@@ -0,0 +1,54 @@
using System;
using System.Collections.Generic;
using System.Linq;
namespace Nox.Game {
public interface IModfiersFactory {
IReadOnlyCollection<ModifierDefinition> GetAll();
ModifierDefinition GetById(string modifierId);
IReadOnlyCollection<ModifierDefinition> GetModifiersFor(CharacterDefinition character);
bool TryAddModifier(CharacterDefinition character, string modiferId);
}
public enum ModifierType {
None,
Flat,
Addition,
Multiplication,
Percentage
}
[Serializable]
public sealed class ModifierDefinition {
public string id;
public ModifierType type;
public float value;
}
[Serializable]
public sealed class ModifiersData {
public ModifierDefinition[] modifiers;
}
public class ModifiersFactory : IModfiersFactory {
private readonly ModifiersRegistry modifiersRegistry;
private readonly Dictionary<string, ModifierDefinition> modifierPool = new ();
public ModifiersFactory(ModifiersRegistry modifiersRegistry) {
this.modifiersRegistry = modifiersRegistry;
}
public IReadOnlyCollection<ModifierDefinition> GetAll() {
return modifiersRegistry.modifiersData.modifiers;
}
public ModifierDefinition GetById(string modifierId) {
return modifiersRegistry.modifiersData.modifiers.FirstOrDefault(m => m.id == modifierId);
}
public IReadOnlyCollection<ModifierDefinition> GetModifiersFor(CharacterDefinition character) {
throw new NotImplementedException();
}
public bool TryAddModifier(CharacterDefinition character, string modiferId) {
throw new NotImplementedException();
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 882798d3e5a24150b1f11f486afdbc3e
timeCreated: 1774199617

View File

@@ -2,26 +2,6 @@ using System;
namespace Nox.Game {
public enum ModifierType {
None,
Flat,
Addition,
Multiplication,
Percentage
}
[Serializable]
public sealed class Modifier {
public string id;
public ModifierType type;
public float value;
}
[Serializable]
public sealed class ModifiersData {
public Modifier[] modifiers;
}
public class ModifiersHandler {
private readonly ModifiersData modifiersData;
public ModifiersHandler(ModifiersData modifiersData) {

View File

@@ -0,0 +1,8 @@
using UnityEngine;
namespace Nox.Game {
[CreateAssetMenu(fileName = "ModifiersRegistry", menuName = "Nox/Database/Entities/Modifiers Registry")]
public class ModifiersRegistry : ScriptableObject {
public ModifiersData modifiersData;
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: e6ae0d7bf0164ff793609e7f161fd7e3
timeCreated: 1774200023

View File

@@ -11,11 +11,23 @@ namespace Nox.Game {
bool TryAddPerk(CharacterDefinition character, string perkId);
}
[Serializable]
public sealed class PerkDefinition {
public string id;
public string name;
public ModifiersData modifiers = new ();
}
[Serializable]
public sealed class PerksData {
public List<PerkDefinition> perks = new ();
}
public sealed class PerkFactory : IPerkFactory {
private readonly Dictionary<string, PerkDefinition> perkPool = new ();
public PerkFactory(PerksRegistry perksRegistry) {
if(perksRegistry == null) {
if(!perksRegistry) {
throw new ArgumentNullException(nameof(perksRegistry));
}
var allAvailablePerks = perksRegistry.perksData;

View File

@@ -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: e6ae0d7bf0164ff793609e7f161fd7e3, type: 3}
m_Name: ModifiersRegistry
m_EditorClassIdentifier: Assembly-CSharp::Nox.Game.ModifiersRegistry
modifiersData:
modifiers: []

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 56d06fe56df3cd047bdea7504e81c463
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant: