forked from Shardstone/trail-into-darkness
58 lines
1.9 KiB
C#
58 lines
1.9 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
|
|
namespace Nox.Game {
|
|
public interface IModfiersFactory {
|
|
IReadOnlyCollection<ModifierDefinition> GetAll();
|
|
ModifierDefinition GetById(ModifierIds modifierId);
|
|
IReadOnlyCollection<ModifierDefinition> GetModifiersFor(CharacterDefinition character);
|
|
bool TryAddModifier(CharacterDefinition character, string modiferId);
|
|
}
|
|
|
|
public enum ModifierRole {
|
|
None,
|
|
Flat,
|
|
Addition,
|
|
Multiplication,
|
|
Percentage
|
|
}
|
|
|
|
[Serializable]
|
|
public sealed class ModifierDefinition {
|
|
[ReadOnlyField]
|
|
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<string, ModifierDefinition> modifierPool = new ();
|
|
|
|
public ModifiersFactory(ModifiersRegistry modifiersRegistry) {
|
|
this.modifiersRegistry = modifiersRegistry;
|
|
}
|
|
|
|
public IReadOnlyCollection<ModifierDefinition> GetAll() {
|
|
return modifiersRegistry.modifiersData.modifiers;
|
|
}
|
|
public ModifierDefinition GetById(ModifierIds 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();
|
|
}
|
|
}
|
|
}
|