diff --git a/Assets/Code/GameState/Entities/CharacterBaseSettings.cs b/Assets/Code/GameState/Entities/CharacterBaseSettings.cs index a946b06..20e33a6 100644 --- a/Assets/Code/GameState/Entities/CharacterBaseSettings.cs +++ b/Assets/Code/GameState/Entities/CharacterBaseSettings.cs @@ -5,7 +5,7 @@ namespace Nox.Game { [CreateAssetMenu(fileName = "CharacterBaseSettings", menuName = "Nox/Database/Entities/CharacterBaseSettings")] public class CharacterBaseSettings: ScriptableObject { [Header("Character Creation Defaults")] - public DistributionPointsPerClass distributionPointsPerClass; + public DistributionPointsPerClass[] distributionPointsPerClass; public EntityAttributes defaultEntityAttributes; public EntityStats defaultEntityStats; public PerksData defaultPerksData; diff --git a/Assets/Code/GameState/Entities/ModifiersFactory.cs b/Assets/Code/GameState/Entities/ModifiersFactory.cs index f35dbf6..5c5d888 100644 --- a/Assets/Code/GameState/Entities/ModifiersFactory.cs +++ b/Assets/Code/GameState/Entities/ModifiersFactory.cs @@ -5,7 +5,7 @@ using System.Linq; namespace Nox.Game { public interface IModfiersFactory { IReadOnlyCollection GetAll(); - ModifierDefinition GetById(string modifierId); + ModifierDefinition GetById(ModifierIds modifierId); IReadOnlyCollection GetModifiersFor(CharacterDefinition character); bool TryAddModifier(CharacterDefinition character, string modiferId); } @@ -20,7 +20,7 @@ namespace Nox.Game { [Serializable] public sealed class ModifierDefinition { - public string id; + public ModifierIds id; public ModifierType type; public float value; } @@ -41,7 +41,7 @@ namespace Nox.Game { public IReadOnlyCollection GetAll() { return modifiersRegistry.modifiersData.modifiers; } - public ModifierDefinition GetById(string modifierId) { + public ModifierDefinition GetById(ModifierIds modifierId) { return modifiersRegistry.modifiersData.modifiers.FirstOrDefault(m => m.id == modifierId); } public IReadOnlyCollection GetModifiersFor(CharacterDefinition character) { diff --git a/Assets/Code/GameState/Entities/ModifiersPerksList.cs b/Assets/Code/GameState/Entities/ModifiersPerksList.cs new file mode 100644 index 0000000..4fef5d1 --- /dev/null +++ b/Assets/Code/GameState/Entities/ModifiersPerksList.cs @@ -0,0 +1,11 @@ +namespace Nox.Game { + public enum ModifierIds { + generic_mgt_health_multiplier, + warrior_mgt_health_multiplier, + generic_mgt_mana_multiplier, + generic_kno_mana_multiplier + } + + public enum PerksIds{ + } +} diff --git a/Assets/Code/GameState/Entities/ModifiersPerksList.cs.meta b/Assets/Code/GameState/Entities/ModifiersPerksList.cs.meta new file mode 100644 index 0000000..1a61d4a --- /dev/null +++ b/Assets/Code/GameState/Entities/ModifiersPerksList.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: fc2631d096794cea9ae7c9cd82a38c53 +timeCreated: 1774366047 \ No newline at end of file diff --git a/Assets/Code/GameState/Entities/PerkFactory.cs b/Assets/Code/GameState/Entities/PerkFactory.cs index b0df34b..b77e5bb 100644 --- a/Assets/Code/GameState/Entities/PerkFactory.cs +++ b/Assets/Code/GameState/Entities/PerkFactory.cs @@ -6,14 +6,14 @@ namespace Nox.Game { public interface IPerkFactory { IReadOnlyCollection GetAll(); - PerkDefinition GetById(string perkId); + PerkDefinition GetById(PerksIds perkId); IReadOnlyCollection GetPerksFor(CharacterDefinition character); - bool TryAddPerk(CharacterDefinition character, string perkId); + bool TryAddPerk(CharacterDefinition character, PerksIds perkId); } [Serializable] public sealed class PerkDefinition { - public string id; + public PerksIds id; public string name; public ModifiersData modifiers = new (); } @@ -24,7 +24,7 @@ namespace Nox.Game { } public sealed class PerkFactory : IPerkFactory { - private readonly Dictionary perkPool = new (); + private readonly Dictionary perkPool = new (); public PerkFactory(PerksRegistry perksRegistry) { if(!perksRegistry) { @@ -40,11 +40,7 @@ namespace Nox.Game { return perkPool.Values.ToList(); } - public PerkDefinition GetById(string perkId) { - if(string.IsNullOrWhiteSpace(perkId)) { - return null; - } - + public PerkDefinition GetById(PerksIds perkId) { perkPool.TryGetValue(perkId, out var perk); return perk; } @@ -55,15 +51,14 @@ namespace Nox.Game { } var ownedPerkIds = character.perksData.perks - .Where(p => p != null && !string.IsNullOrWhiteSpace(p.id)) .Select(p => p.id) .ToHashSet(); return perkPool.Values.Where(p => !ownedPerkIds.Contains(p.id)).ToList(); } - public bool TryAddPerk(CharacterDefinition character, string perkId) { - if(character == null || string.IsNullOrWhiteSpace(perkId)) { + public bool TryAddPerk(CharacterDefinition character, PerksIds perkId) { + if(character == null) { return false; } @@ -71,7 +66,7 @@ namespace Nox.Game { return false; } - if(!perkPool.TryGetValue(perkId, out PerkDefinition perk)) { + if(!perkPool.TryGetValue(perkId, out var perk)) { return false; } diff --git a/Assets/Database/Entities/CharacterBaseSettings.asset b/Assets/Database/Entities/CharacterBaseSettings.asset index 2ffc96b..309f64e 100644 --- a/Assets/Database/Entities/CharacterBaseSettings.asset +++ b/Assets/Database/Entities/CharacterBaseSettings.asset @@ -12,12 +12,20 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 1bbecc15c7cd4a7ca90ce17b3d3d75f0, type: 3} m_Name: CharacterBaseSettings m_EditorClassIdentifier: Assembly-CSharp::Nox.Game.CharacterBaseSettings - startAttributesPool: 12 + distributionPointsPerClass: + - class: 1 + points: 10 + - class: 2 + points: 10 + - class: 3 + points: 10 + - class: 4 + points: 10 defaultEntityAttributes: - might: 0 - reflex: 0 - knowledge: 0 - perception: 0 + might: 1 + reflex: 1 + knowledge: 1 + perception: 1 defaultEntityStats: health: 0 stamina: 0 @@ -26,7 +34,79 @@ MonoBehaviour: defaultPerksData: perks: [] defaultModifiersData: - modifiers: [] - racialBonuses: [] - classBonuses: [] + modifiers: + - id: 0 + type: 3 + value: 3 + - id: 1 + type: 3 + value: 4 + - id: 2 + type: 3 + value: 1 + - id: 3 + type: 3 + value: 2 + racialBonuses: + - race: 1 + bonusAttributes: + might: 0 + reflex: 0 + knowledge: 1 + perception: 0 + bonusStats: + health: 0 + stamina: 0 + level: 0 + experience: 0 + startingPerks: + perks: [] + permanentModifiers: + modifiers: [] + - race: 2 + bonusAttributes: + might: 0 + reflex: 1 + knowledge: 0 + perception: 0 + bonusStats: + health: 0 + stamina: 0 + level: 0 + experience: 0 + startingPerks: + perks: [] + permanentModifiers: + modifiers: [] + - race: 2 + bonusAttributes: + might: 1 + reflex: 0 + knowledge: 0 + perception: 0 + bonusStats: + health: 0 + stamina: 0 + level: 0 + experience: 0 + startingPerks: + perks: [] + permanentModifiers: + modifiers: [] + classBonuses: + - class: 1 + bonusAttributes: + might: 0 + reflex: 0 + knowledge: 0 + perception: 0 + bonusStats: + health: 0 + stamina: 0 + level: 0 + experience: 0 + startingPerks: + perks: [] + permanentModifiers: + modifiers: [] maxPartySize: 4