using Beam.Abstractions; namespace Beam.Dynamic { public class NumberedStateChanger(NumberedStateChanger.MoveState moveState) : IStateChangeBehaviour { public delegate void MoveState(IState state, int amount); public MoveState MoveStateDlgte { get; set; } = moveState; public virtual void Apply(IState state, object stimulus) { if (stimulus is not int amount) throw new ArgumentException(string.Format(Exceptions.Exceptions.num_state_changer_stimulus_must_be_int, stimulus.GetType().Name), nameof(stimulus)); Apply(state, amount); } public virtual void Apply(IState state, int amount) { MoveStateDlgte(state, amount); } public NumberedStateChanger(IStateChangeBehaviour behavior) : this((x, i) => { behavior.Apply(x, i); }) {} } }