forked from Shardstone/trail-into-darkness
added modfiers factory
This commit is contained in:
@@ -70,6 +70,11 @@ MonoBehaviour:
|
|||||||
m_ReadOnly: 0
|
m_ReadOnly: 0
|
||||||
m_SerializedLabels: []
|
m_SerializedLabels: []
|
||||||
FlaggedDuringContentUpdateRestriction: 0
|
FlaggedDuringContentUpdateRestriction: 0
|
||||||
|
- m_GUID: 56d06fe56df3cd047bdea7504e81c463
|
||||||
|
m_Address: ModifiersRegistry
|
||||||
|
m_ReadOnly: 0
|
||||||
|
m_SerializedLabels: []
|
||||||
|
FlaggedDuringContentUpdateRestriction: 0
|
||||||
- m_GUID: 60a7c1e10ed7ff94cbe191d9d3e305ed
|
- m_GUID: 60a7c1e10ed7ff94cbe191d9d3e305ed
|
||||||
m_Address: Assets/Art/UI/menu_corner.png
|
m_Address: Assets/Art/UI/menu_corner.png
|
||||||
m_ReadOnly: 0
|
m_ReadOnly: 0
|
||||||
|
|||||||
@@ -104,8 +104,9 @@ namespace Nox.Core {
|
|||||||
var perKRegistry = Addressables.LoadAssetAsync<PerksRegistry>("PerksRegistry ").WaitForCompletion();
|
var perKRegistry = Addressables.LoadAssetAsync<PerksRegistry>("PerksRegistry ").WaitForCompletion();
|
||||||
var characterRegistry = Addressables.LoadAssetAsync<CharacterRegistry>("CharacterRegistry").WaitForCompletion();
|
var characterRegistry = Addressables.LoadAssetAsync<CharacterRegistry>("CharacterRegistry").WaitForCompletion();
|
||||||
var defaultPartySettings = Addressables.LoadAssetAsync<DefaultPartySettings>("DefaultPartySettings").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);
|
var partyCreatorModel = new PartyCreatorModel(characterSystems.CharacterFactory, characterSystems.PartyFactory, defaultPartySettings);
|
||||||
|
|
||||||
applicationStates = new Dictionary<GameState, IGameState> {
|
applicationStates = new Dictionary<GameState, IGameState> {
|
||||||
|
|||||||
@@ -2,18 +2,21 @@ namespace Nox.Game {
|
|||||||
|
|
||||||
public interface ICharacterSystems {
|
public interface ICharacterSystems {
|
||||||
IPerkFactory PerkFactory { get; }
|
IPerkFactory PerkFactory { get; }
|
||||||
|
IModfiersFactory ModifiersFactory { get; }
|
||||||
ICharacterFactory CharacterFactory { get; }
|
ICharacterFactory CharacterFactory { get; }
|
||||||
IPartyFactory PartyFactory { get; }
|
IPartyFactory PartyFactory { get; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public sealed class CharacterSystems : ICharacterSystems {
|
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;
|
PerkFactory = perkFactory;
|
||||||
CharacterFactory = characterFactory;
|
CharacterFactory = characterFactory;
|
||||||
PartyFactory = partyFactory;
|
PartyFactory = partyFactory;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IPerkFactory PerkFactory { get; }
|
public IPerkFactory PerkFactory { get; }
|
||||||
|
public IModfiersFactory ModifiersFactory { get; }
|
||||||
public ICharacterFactory CharacterFactory { get; }
|
public ICharacterFactory CharacterFactory { get; }
|
||||||
public IPartyFactory PartyFactory { get; }
|
public IPartyFactory PartyFactory { get; }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,14 +2,19 @@ using System;
|
|||||||
|
|
||||||
namespace Nox.Game {
|
namespace Nox.Game {
|
||||||
public static class DefaultCharacterSystemsFactory {
|
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);
|
IPerkFactory perkFactory = new PerkFactory(perksRegistry);
|
||||||
|
IModfiersFactory modifiersFactory = new ModifiersFactory(modifiersRegistry);
|
||||||
ICharacterAttributesFactory attributesFactory = new CharacterAttributesFactory(characterRegistry);
|
ICharacterAttributesFactory attributesFactory = new CharacterAttributesFactory(characterRegistry);
|
||||||
ICharacterStatsFactory statsFactory = new CharacterStatsFactory();
|
ICharacterStatsFactory statsFactory = new CharacterStatsFactory();
|
||||||
ICharacterFactory characterFactory = new CharacterFactory(attributesFactory, statsFactory, perkFactory);
|
ICharacterFactory characterFactory = new CharacterFactory(attributesFactory, statsFactory, perkFactory);
|
||||||
IPartyFactory partyFactory = new PartyFactory(characterBaseSettings);
|
IPartyFactory partyFactory = new PartyFactory(characterBaseSettings);
|
||||||
|
|
||||||
return new CharacterSystems(perkFactory, characterFactory, partyFactory);
|
return new CharacterSystems(perkFactory, modifiersFactory, characterFactory, partyFactory);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -58,18 +58,6 @@ namespace Nox.Game {
|
|||||||
public int experience;
|
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]
|
[Serializable]
|
||||||
public sealed class CharacterDefinition : IEntityDefinition {
|
public sealed class CharacterDefinition : IEntityDefinition {
|
||||||
[SerializeField] private string id;
|
[SerializeField] private string id;
|
||||||
|
|||||||
54
Assets/Code/GameState/Entities/ModifiersFactory.cs
Normal file
54
Assets/Code/GameState/Entities/ModifiersFactory.cs
Normal 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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
3
Assets/Code/GameState/Entities/ModifiersFactory.cs.meta
Normal file
3
Assets/Code/GameState/Entities/ModifiersFactory.cs.meta
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 882798d3e5a24150b1f11f486afdbc3e
|
||||||
|
timeCreated: 1774199617
|
||||||
@@ -2,26 +2,6 @@ using System;
|
|||||||
|
|
||||||
namespace Nox.Game {
|
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 {
|
public class ModifiersHandler {
|
||||||
private readonly ModifiersData modifiersData;
|
private readonly ModifiersData modifiersData;
|
||||||
public ModifiersHandler(ModifiersData modifiersData) {
|
public ModifiersHandler(ModifiersData modifiersData) {
|
||||||
|
|||||||
8
Assets/Code/GameState/Entities/ModifiersRegistry.cs
Normal file
8
Assets/Code/GameState/Entities/ModifiersRegistry.cs
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
3
Assets/Code/GameState/Entities/ModifiersRegistry.cs.meta
Normal file
3
Assets/Code/GameState/Entities/ModifiersRegistry.cs.meta
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: e6ae0d7bf0164ff793609e7f161fd7e3
|
||||||
|
timeCreated: 1774200023
|
||||||
@@ -11,11 +11,23 @@ namespace Nox.Game {
|
|||||||
bool TryAddPerk(CharacterDefinition character, string perkId);
|
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 {
|
public sealed class PerkFactory : IPerkFactory {
|
||||||
private readonly Dictionary<string, PerkDefinition> perkPool = new ();
|
private readonly Dictionary<string, PerkDefinition> perkPool = new ();
|
||||||
|
|
||||||
public PerkFactory(PerksRegistry perksRegistry) {
|
public PerkFactory(PerksRegistry perksRegistry) {
|
||||||
if(perksRegistry == null) {
|
if(!perksRegistry) {
|
||||||
throw new ArgumentNullException(nameof(perksRegistry));
|
throw new ArgumentNullException(nameof(perksRegistry));
|
||||||
}
|
}
|
||||||
var allAvailablePerks = perksRegistry.perksData;
|
var allAvailablePerks = perksRegistry.perksData;
|
||||||
|
|||||||
16
Assets/Database/Entities/ModifiersRegistry.asset
Normal file
16
Assets/Database/Entities/ModifiersRegistry.asset
Normal 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: []
|
||||||
8
Assets/Database/Entities/ModifiersRegistry.asset.meta
Normal file
8
Assets/Database/Entities/ModifiersRegistry.asset.meta
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 56d06fe56df3cd047bdea7504e81c463
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
Reference in New Issue
Block a user