public override StateOffset ApplyPostconditions(StateOffset state)
        {
            int actionPoints = state.Get(StateKey.AP(_source), _source.ActionPoints);
            state.Set(StateKey.AP(_source), actionPoints - _predictedCost);
            state.Set(StateKey.Position(_source), _destination);

            return state;
        }
        public StateOffset ApplyPostconditions(StateOffset state)
        {
            int targetHealth = state.Get(StateKey.Health(_target), _target.Health);
            int damage = state.Get(StateOffset.CombatantKey(_target, "attack"), _source.EffectiveStats.Attack);

            state.Set(StateOffset.CombatantHealthKey(_target), targetHealth - damage);

            return state;
        }
        public override bool ArePreconditionsMet(StateOffset state)
        {
            int actionPoints = state.Get(StateKey.AP(_source), _source.ActionPoints);
            Point position = state.Get(StateKey.Position(_source), _source.Position);

            int predictedCost = Point.TaxicabDistance(position, _target.Position);

            return actionPoints > predictedCost;
        }
 public bool ArePreconditionsMet(StateOffset state)
 {
     Point _targetPos = state.Get(StateKey.Position(_target), _target.Position);
     return _melee.InFullAreaOfEffect(_targetPos);
 }