protected AttackAction(Entity attacker, Entity defender, Entity weapon, DefendComponent.AttackablePart bodyPartTargetted, bool targettingPenalty) : base(attacker) { Contract.Requires <ArgumentNullException>(attacker != null, "attacker"); Contract.Requires <ArgumentNullException>(weapon != null, "weapon"); Contract.Requires <ArgumentNullException>(defender != null, "defender"); Contract.Requires <ArgumentNullException>(bodyPartTargetted != null, "bodyPartTargetted"); Contract.Requires <ArgumentException>(attacker.Has <ActorComponent>(), "attacker doesn't have a location"); Contract.Requires <ArgumentException>(attacker.Has <Location>(), "attacker doesn't have a location"); Contract.Requires <ArgumentException>(defender.Has <DefendComponent>(), "defender cannot be attacked"); Contract.Requires <ArgumentException>(defender.Has <Location>(), "defender doesn't have a location"); Contract.Requires <ArgumentException>(defender.Get <DefendComponent>() == bodyPartTargetted.Owner, "defender does not contain supplied body part"); Contract.Requires <ArgumentException>(defender.Get <Location>().Level == attacker.Get <Location>().Level, "attacker is not on the same level as defender"); Contract.Requires <ArgumentException>(defender.Id == bodyPartTargetted.Owner.OwnerUId); Defender = defender; Weapon = weapon; BodyPartTargetted = bodyPartTargetted; TargettingPenalty = targettingPenalty; }
public RangeAttackAction(Entity attacker, Entity defender, Entity weapon, DefendComponent.AttackablePart bodyPartTargetted, bool targettingPenalty = false) : base(attacker, defender, weapon, bodyPartTargetted, targettingPenalty) { Contract.Requires <ArgumentException>(weapon.Has <RangeComponent>(), "weapon cannot range attack"); }