diff --git a/Assets/AddressableAssetsData/AssetGroups/Common_Assets.asset b/Assets/AddressableAssetsData/AssetGroups/Common_Assets.asset index fde7b5f..2dea918 100644 --- a/Assets/AddressableAssetsData/AssetGroups/Common_Assets.asset +++ b/Assets/AddressableAssetsData/AssetGroups/Common_Assets.asset @@ -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 diff --git a/Assets/Code/Core/EntryPoint.cs b/Assets/Code/Core/EntryPoint.cs index 7d6da2b..616e913 100644 --- a/Assets/Code/Core/EntryPoint.cs +++ b/Assets/Code/Core/EntryPoint.cs @@ -104,8 +104,9 @@ namespace Nox.Core { var perKRegistry = Addressables.LoadAssetAsync("PerksRegistry ").WaitForCompletion(); var characterRegistry = Addressables.LoadAssetAsync("CharacterRegistry").WaitForCompletion(); var defaultPartySettings = Addressables.LoadAssetAsync("DefaultPartySettings").WaitForCompletion(); + var modifiersRegistry = Addressables.LoadAssetAsync("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 { diff --git a/Assets/Code/GameState/Entities/CharacterSystems.cs b/Assets/Code/GameState/Entities/CharacterSystems.cs index 5643fb3..c87c775 100644 --- a/Assets/Code/GameState/Entities/CharacterSystems.cs +++ b/Assets/Code/GameState/Entities/CharacterSystems.cs @@ -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; } } diff --git a/Assets/Code/GameState/Entities/DefaultCharacterSystemsFactory.cs b/Assets/Code/GameState/Entities/DefaultCharacterSystemsFactory.cs index cb2d7c9..05c44ee 100644 --- a/Assets/Code/GameState/Entities/DefaultCharacterSystemsFactory.cs +++ b/Assets/Code/GameState/Entities/DefaultCharacterSystemsFactory.cs @@ -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); } } } diff --git a/Assets/Code/GameState/Entities/EntitiesDefinitions.cs b/Assets/Code/GameState/Entities/EntitiesDefinitions.cs index 8e467bd..7d2543d 100644 --- a/Assets/Code/GameState/Entities/EntitiesDefinitions.cs +++ b/Assets/Code/GameState/Entities/EntitiesDefinitions.cs @@ -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 perks = new (); - } - [Serializable] public sealed class CharacterDefinition : IEntityDefinition { [SerializeField] private string id; diff --git a/Assets/Code/GameState/Entities/ModifiersFactory.cs b/Assets/Code/GameState/Entities/ModifiersFactory.cs new file mode 100644 index 0000000..f35dbf6 --- /dev/null +++ b/Assets/Code/GameState/Entities/ModifiersFactory.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace Nox.Game { + public interface IModfiersFactory { + IReadOnlyCollection GetAll(); + ModifierDefinition GetById(string modifierId); + IReadOnlyCollection 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 modifierPool = new (); + + public ModifiersFactory(ModifiersRegistry modifiersRegistry) { + this.modifiersRegistry = modifiersRegistry; + } + + public IReadOnlyCollection GetAll() { + return modifiersRegistry.modifiersData.modifiers; + } + public ModifierDefinition GetById(string modifierId) { + return modifiersRegistry.modifiersData.modifiers.FirstOrDefault(m => m.id == modifierId); + } + public IReadOnlyCollection GetModifiersFor(CharacterDefinition character) { + throw new NotImplementedException(); + } + public bool TryAddModifier(CharacterDefinition character, string modiferId) { + throw new NotImplementedException(); + } + } +} diff --git a/Assets/Code/GameState/Entities/ModifiersFactory.cs.meta b/Assets/Code/GameState/Entities/ModifiersFactory.cs.meta new file mode 100644 index 0000000..1ed6055 --- /dev/null +++ b/Assets/Code/GameState/Entities/ModifiersFactory.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 882798d3e5a24150b1f11f486afdbc3e +timeCreated: 1774199617 \ No newline at end of file diff --git a/Assets/Code/GameState/Entities/ModifiersHandler.cs b/Assets/Code/GameState/Entities/ModifiersHandler.cs index a10c664..8f96853 100644 --- a/Assets/Code/GameState/Entities/ModifiersHandler.cs +++ b/Assets/Code/GameState/Entities/ModifiersHandler.cs @@ -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) { diff --git a/Assets/Code/GameState/Entities/ModifiersRegistry.cs b/Assets/Code/GameState/Entities/ModifiersRegistry.cs new file mode 100644 index 0000000..c760d0b --- /dev/null +++ b/Assets/Code/GameState/Entities/ModifiersRegistry.cs @@ -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; + } +} diff --git a/Assets/Code/GameState/Entities/ModifiersRegistry.cs.meta b/Assets/Code/GameState/Entities/ModifiersRegistry.cs.meta new file mode 100644 index 0000000..f79cd58 --- /dev/null +++ b/Assets/Code/GameState/Entities/ModifiersRegistry.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: e6ae0d7bf0164ff793609e7f161fd7e3 +timeCreated: 1774200023 \ No newline at end of file diff --git a/Assets/Code/GameState/Entities/PerkFactory.cs b/Assets/Code/GameState/Entities/PerkFactory.cs index a6fa46a..b0df34b 100644 --- a/Assets/Code/GameState/Entities/PerkFactory.cs +++ b/Assets/Code/GameState/Entities/PerkFactory.cs @@ -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 perks = new (); + } + public sealed class PerkFactory : IPerkFactory { private readonly Dictionary perkPool = new (); public PerkFactory(PerksRegistry perksRegistry) { - if(perksRegistry == null) { + if(!perksRegistry) { throw new ArgumentNullException(nameof(perksRegistry)); } var allAvailablePerks = perksRegistry.perksData; diff --git a/Assets/Database/Entities/ModifiersRegistry.asset b/Assets/Database/Entities/ModifiersRegistry.asset new file mode 100644 index 0000000..89c41fe --- /dev/null +++ b/Assets/Database/Entities/ModifiersRegistry.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: e6ae0d7bf0164ff793609e7f161fd7e3, type: 3} + m_Name: ModifiersRegistry + m_EditorClassIdentifier: Assembly-CSharp::Nox.Game.ModifiersRegistry + modifiersData: + modifiers: [] diff --git a/Assets/Database/Entities/ModifiersRegistry.asset.meta b/Assets/Database/Entities/ModifiersRegistry.asset.meta new file mode 100644 index 0000000..2e5baa7 --- /dev/null +++ b/Assets/Database/Entities/ModifiersRegistry.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 56d06fe56df3cd047bdea7504e81c463 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: