Beispiel #1
0
        public WithMuzzleFlash(Actor self, WithMuzzleFlashInfo info)
        {
            this.info = info;
            var render = self.Trait <RenderSprites>();
            var facing = self.TraitOrDefault <IFacing>();

            var arm = self.TraitsImplementing <Armament>()
                      .Single(a => a.Info.Name == info.Armament);

            foreach (var b in arm.Barrels)
            {
                var barrel   = b;
                var turreted = self.TraitsImplementing <Turreted>()
                               .FirstOrDefault(t => t.Name == arm.Info.Turret);

                getFacing = turreted != null ? () => turreted.turretFacing :
                            facing != null ? (Func <int>)(() => facing.Facing) : () => 0;

                var muzzleFlash = new Animation(render.GetImage(self), getFacing);
                visible.Add(barrel, false);
                anims.Add(barrel,
                          new AnimationWithOffset(muzzleFlash,
                                                  () => arm.MuzzleOffset(self, barrel),
                                                  () => !visible[barrel],
                                                  p => WithTurret.ZOffsetFromCenter(self, p, 2)));
            }
        }
Beispiel #2
0
        public WithMuzzleFlash(Actor self, WithMuzzleFlashInfo info)
        {
            var render = self.Trait <RenderSprites>();
            var facing = self.TraitOrDefault <IFacing>();

            foreach (var arm in self.TraitsImplementing <Armament>())
            {
                // Skip armaments that don't define muzzles
                if (arm.Info.MuzzleSequence == null)
                {
                    continue;
                }

                foreach (var b in arm.Barrels)
                {
                    var barrel   = b;
                    var turreted = self.TraitsImplementing <Turreted>()
                                   .FirstOrDefault(t => t.Name == arm.Info.Turret);

                    getFacing = turreted != null ? () => turreted.turretFacing :
                                facing != null ? (Func <int>)(() => facing.Facing) : () => 0;

                    var muzzleFlash = new Animation(self.World, render.GetImage(self), getFacing);
                    visible.Add(barrel, false);
                    anims.Add(barrel,
                              new AnimationWithOffset(muzzleFlash,
                                                      () => info.IgnoreOffset ? WVec.Zero : arm.MuzzleOffset(self, barrel),
                                                      () => !visible[barrel],
                                                      () => false,
                                                      p => WithTurret.ZOffsetFromCenter(self, p, 2)));
                }
            }
        }