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))); } }
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))); } } }