diff --git a/pflib-net/characters/PlayerCharacter.cs b/pflib-net/characters/PlayerCharacter.cs index 308c38c..b6ad0bb 100644 --- a/pflib-net/characters/PlayerCharacter.cs +++ b/pflib-net/characters/PlayerCharacter.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using pflib_net.characters.internals.proficiencies; using pflib_net.characters.internals.stats; +using pflib_net.conditions; using pflib_net.damage; namespace pflib_net.characters; @@ -14,6 +15,7 @@ public class PlayerCharacter : ICharacter private ISet Immunities { get; } private Dictionary Resistances { get; } private Dictionary Weaknesses { get; } + private IEnumerable? Conditions { get; set; } = null; public PlayerCharacter( int hp, diff --git a/pflib-net/conditions/ICondition.cs b/pflib-net/conditions/ICondition.cs new file mode 100644 index 0000000..87869c4 --- /dev/null +++ b/pflib-net/conditions/ICondition.cs @@ -0,0 +1,9 @@ +using pflib_net.characters; +using pflib_net.effects; + +namespace pflib_net.conditions; + +public interface ICondition +{ + public ISet GetEffects(ICharacter character); +} \ No newline at end of file diff --git a/pflib-net/dice/Dice.cs b/pflib-net/dice/Dice.cs index 723283a..404dafe 100644 --- a/pflib-net/dice/Dice.cs +++ b/pflib-net/dice/Dice.cs @@ -1,21 +1,43 @@ namespace pflib_net.dice; -public struct Dice +public class Dice { + private int _keepHighest; + private int _keepLowest; private int Count { get; set; } private int Size { get; set; } - private int KeepHighest { get; set; } - private int KeepLowest { get; set; } + + private int KeepHighest + { + get => _keepHighest; + set + { + if (value > 0 && KeepLowest > 0) + { + throw new InvalidOperationException("Cannot set keepHighest and keepLowest at the same time"); + } + _keepHighest = value; + } + } + + private int KeepLowest + { + get => _keepLowest; + set + { + if (value > 0 && KeepHighest > 0) + { + throw new InvalidOperationException("Cannot set keepHighest and keepLowest at the same time"); + } + + _keepLowest = value; + } + } private int Add { get; set; } private static readonly Random Random = new(); public Dice(int size, int count = 1, int keepHighest = 0, int keepLowest = 0, int add = 0) { - if (keepHighest > 0 && keepLowest > 0) - { - throw new InvalidOperationException("Cannot set keepHighest and keepLowest at the same time"); - } - Count = count; Size = size; KeepHighest = keepHighest; @@ -25,22 +47,12 @@ public struct Dice public Dice Kh(int keepHighest) { - if (KeepLowest > 0) - { - throw new InvalidOperationException("Cannot set keepHighest and keepLowest in the same roll"); - } - KeepHighest = keepHighest; return this; } public Dice Kl(int keepLowest) { - if (KeepHighest > 0) - { - throw new InvalidOperationException("Cannot set keepHighest and keepLowest in the same roll"); - } - KeepLowest = keepLowest; return this; } diff --git a/pflib-net/effects/IEffect.cs b/pflib-net/effects/IEffect.cs new file mode 100644 index 0000000..95e83f9 --- /dev/null +++ b/pflib-net/effects/IEffect.cs @@ -0,0 +1,6 @@ +namespace pflib_net.effects; + +public interface IEffect +{ + public string Reason { get; } +} \ No newline at end of file diff --git a/pflib-net/effects/implementation/ConditionEffect.cs b/pflib-net/effects/implementation/ConditionEffect.cs new file mode 100644 index 0000000..a7aecc3 --- /dev/null +++ b/pflib-net/effects/implementation/ConditionEffect.cs @@ -0,0 +1,24 @@ +using pflib_net.conditions; + +namespace pflib_net.effects.implementation; + +public readonly struct ConditionEffect: IEffect +{ + private readonly ICondition _condition; + private readonly string _reason; + public ICondition Condition + { + get => _condition; + } + public string Reason + { + get => _reason; + init => _reason = value; + } + + public ConditionEffect(ICondition condition, string reason) + { + _condition = condition; + _reason = reason; + } +} \ No newline at end of file diff --git a/pflib-net/effects/implementation/ImmunityEffect.cs b/pflib-net/effects/implementation/ImmunityEffect.cs new file mode 100644 index 0000000..a5474a6 --- /dev/null +++ b/pflib-net/effects/implementation/ImmunityEffect.cs @@ -0,0 +1,14 @@ +namespace pflib_net.effects.implementation; + +public readonly struct ImmunityEffect: IEffect +{ + public ImmunityEffect(string tag, string reason) + { + Tag = tag; + Reason = reason; + } + + public string Tag { get; } + + public string Reason { get; } +} \ No newline at end of file diff --git a/pflib-net/effects/implementation/ModifierEffect.cs b/pflib-net/effects/implementation/ModifierEffect.cs new file mode 100644 index 0000000..95dbd71 --- /dev/null +++ b/pflib-net/effects/implementation/ModifierEffect.cs @@ -0,0 +1,19 @@ +namespace pflib_net.effects.implementation; + +public readonly struct ModifierEffect: IEffect +{ + public ModifierEffect(string tag, string reason, int value, string? type) + { + Tag = tag; + Reason = reason; + Value = value; + Type = type; + } + + public string Tag { get; } + + public string Reason { get; } + + public string? Type { get; } + public int Value { get; } +} \ No newline at end of file diff --git a/pflib-net/effects/implementation/ResistanceEffect.cs b/pflib-net/effects/implementation/ResistanceEffect.cs new file mode 100644 index 0000000..7cee82e --- /dev/null +++ b/pflib-net/effects/implementation/ResistanceEffect.cs @@ -0,0 +1,17 @@ +namespace pflib_net.effects.implementation; + +public readonly struct ResistanceEffect: IEffect +{ + public ResistanceEffect(string tag, string reason, int amount) + { + Tag = tag; + Reason = reason; + Amount = amount; + } + + public string Tag { get; } + + public string Reason { get; } + + public int Amount { get; } +} \ No newline at end of file diff --git a/pflib-net/effects/implementation/TeamEffect.cs b/pflib-net/effects/implementation/TeamEffect.cs new file mode 100644 index 0000000..71bb1d9 --- /dev/null +++ b/pflib-net/effects/implementation/TeamEffect.cs @@ -0,0 +1,13 @@ +namespace pflib_net.effects.implementation; + +public readonly struct TeamEffect: IEffect +{ + public TeamEffect(int side, string reason) + { + Side = side; + Reason = reason; + } + + public int Side { get; } + public string Reason { get; } +} \ No newline at end of file diff --git a/pflib-net/effects/implementation/WeaknessEffect.cs b/pflib-net/effects/implementation/WeaknessEffect.cs new file mode 100644 index 0000000..2dd6756 --- /dev/null +++ b/pflib-net/effects/implementation/WeaknessEffect.cs @@ -0,0 +1,16 @@ +namespace pflib_net.effects.implementation; + +public readonly struct WeaknessEffect: IEffect +{ + public WeaknessEffect(string tag, string reason, int amount) + { + Tag = tag; + Reason = reason; + Amount = amount; + } + + public string Tag { get; } + public string Reason { get; } + public int Amount { get; } + +} \ No newline at end of file