public override void DoAttack(Actor self, Target target) { if (!CanAttack(self, target)) { return; } var arm = Armaments.FirstOrDefault(); if (arm == null) { return; } // TODO: Define weapon ranges as WRange var range = new WRange((int)(1024 * arm.Weapon.Range)); if (!target.IsInRange(self.CenterPosition, range)) { return; } var facing = self.TraitOrDefault <IFacing>(); foreach (var a in Armaments) { a.CheckFire(self, this, facing, target); } if (target.Actor != null) { target.Actor.ChangeOwner(self.Owner); } }
public override void DoAttack(Actor self, Target target) { if (!CanAttack(self, target)) { return; } var arm = Armaments.FirstOrDefault(); if (arm == null) { return; } if (!target.IsInRange(self.CenterPosition, arm.Weapon.Range)) { return; } foreach (var a in Armaments) { a.CheckFire(self, facing.Value, target); } if (target.Actor != null) { target.Actor.ChangeOwner(self.Owner); } }
public override void DoAttack(Actor self, Target target) { if (!CanAttack(self, target)) { return; } var arm = Armaments.FirstOrDefault(); if (arm == null) { return; } if (!Combat.IsInRange(self.CenterLocation, arm.Weapon.Range, target)) { return; } var move = self.TraitOrDefault <IMove>(); var facing = self.TraitOrDefault <IFacing>(); foreach (var a in Armaments) { a.CheckFire(self, this, move, facing, target); } if (target.Actor != null) { target.Actor.ChangeOwner(self.Owner); } }
public Armament ChooseArmamentForTarget(Target t) { return(Armaments.FirstOrDefault(a => a.Weapon.IsValidAgainst(t, self.World, self))); }