示例#1
0
        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);
            }
        }
示例#2
0
        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);
            }
        }
示例#3
0
        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);
            }
        }
示例#4
0
 public Armament ChooseArmamentForTarget(Target t)
 {
     return(Armaments.FirstOrDefault(a => a.Weapon.IsValidAgainst(t, self.World, self)));
 }