using System; using System.Collections.Generic; using System.Linq; using Jovian.Utilities; namespace Nox.Game { public interface IModfiersFactory { IReadOnlyCollection GetAll(); ModifierDefinition GetById(Guid modifierId); IReadOnlyCollection GetModifiersFor(CharacterDefinition character); bool TryAddModifier(CharacterDefinition character, string modiferId); } public enum ModifierRole { None, Flat, Addition, Multiplication, Percentage } [Serializable] public sealed class ModifierDefinition { public System.Guid id = Guid.NewGuid(); public StatType statType; public AttributeType attributeType; public ModifierRole role; 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(Guid 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(); } } }