forked from Shardstone/trail-into-darkness
55 lines
1.8 KiB
C#
55 lines
1.8 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|