using JetBrains.Annotations;
using Robust.Shared.Utility;
namespace Content.Shared.Disease
{
[ImplicitDataDefinitionForInheritors]
[MeansImplicitUse]
public abstract class DiseaseEffect
{
///
/// What's the chance, from 0 to 1, that this effect will occur?
///
[DataField("probability")]
public float Probability = 1.0f;
///
/// What effect the disease will have.
///
public abstract void Effect(DiseaseEffectArgs args);
///
/// What is the minimal severity needed for this effect to occur?
///
[DataField("minSeverity")]
public float MinSeverity
{
get => _minSeverity;
set
{
DebugTools.Assert(value > 1f || value < 0f ,"MinSeverity have been attempted to be set out of range");
_minSeverity = Math.Clamp(value, 0.0f, 1.0f);
}
}
private float _minSeverity = 0.0f;
///
/// What is the maximum severity that this effect can occur?
///
[DataField("maxSeverity")]
public float MaxSeverity
{
get => _maxSeverity;
set
{
DebugTools.Assert(value > 1f || value < 0f ,"MaxSeverity have been attempted to be set out of range");
_maxSeverity = Math.Clamp(value, 0.0f, 1.0f);
}
}
private float _maxSeverity = 1.0f;
}
///
/// What you have to work with in any disease effect/cure.
/// Includes an entity manager because it is out of scope
/// otherwise.
///
public readonly record struct DiseaseEffectArgs(
EntityUid DiseasedEntity,
DiseasePrototype Disease,
IEntityManager EntityManager
);
}