Add basic effects and condition interface
Some checks failed
MANDATORY: Build project (Pflib Net) TeamCity build failed

This commit is contained in:
Malachy Byrne 2024-06-28 20:08:14 +01:00
parent 02740cfdf4
commit 327feab7d8
Signed by: malmal200
GPG Key ID: EC21443030A655D9
8 changed files with 139 additions and 18 deletions

View File

@ -1,21 +1,43 @@
namespace pflib_net.dice; namespace pflib_net.dice;
public struct Dice public class Dice
{ {
private int _keepHighest;
private int _keepLowest;
private int Count { get; set; } private int Count { get; set; }
private int Size { 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 int Add { get; set; }
private static readonly Random Random = new(); private static readonly Random Random = new();
public Dice(int size, int count = 1, int keepHighest = 0, int keepLowest = 0, int add = 0) 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; Count = count;
Size = size; Size = size;
KeepHighest = keepHighest; KeepHighest = keepHighest;
@ -25,22 +47,12 @@ public struct Dice
public Dice Kh(int keepHighest) public Dice Kh(int keepHighest)
{ {
if (KeepLowest > 0)
{
throw new InvalidOperationException("Cannot set keepHighest and keepLowest in the same roll");
}
KeepHighest = keepHighest; KeepHighest = keepHighest;
return this; return this;
} }
public Dice Kl(int keepLowest) public Dice Kl(int keepLowest)
{ {
if (KeepHighest > 0)
{
throw new InvalidOperationException("Cannot set keepHighest and keepLowest in the same roll");
}
KeepLowest = keepLowest; KeepLowest = keepLowest;
return this; return this;
} }

View File

@ -0,0 +1,6 @@
namespace pflib_net.effects;
public interface IEffect
{
public string Reason { get; }
}

View File

@ -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;
}
}

View File

@ -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; }
}

View File

@ -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; }
}

View File

@ -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; }
}

View File

@ -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; }
}

View File

@ -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; }
}