diff --git a/OpenRA.Game/Graphics/Animation.cs b/OpenRA.Game/Graphics/Animation.cs index 37cd1a4c7a..a78fa3426f 100644 --- a/OpenRA.Game/Graphics/Animation.cs +++ b/OpenRA.Game/Graphics/Animation.cs @@ -23,7 +23,7 @@ namespace OpenRA.Graphics public bool IsDecoration { get; set; } readonly SequenceProvider sequenceProvider; - readonly Func facingFunc; + readonly Func facingFunc; readonly Func paused; int frame; @@ -33,15 +33,15 @@ namespace OpenRA.Graphics Action tickFunc = () => { }; public Animation(World world, string name) - : this(world, name, () => 0) { } + : this(world, name, () => WAngle.Zero) { } - public Animation(World world, string name, Func facingFunc) + public Animation(World world, string name, Func facingFunc) : this(world, name, facingFunc, null) { } public Animation(World world, string name, Func paused) - : this(world, name, () => 0, paused) { } + : this(world, name, () => WAngle.Zero, paused) { } - public Animation(World world, string name, Func facingFunc, Func paused) + public Animation(World world, string name, Func facingFunc, Func paused) { sequenceProvider = world.Map.Rules.Sequences; Name = name.ToLowerInvariant(); @@ -50,7 +50,7 @@ namespace OpenRA.Graphics } public int CurrentFrame { get { return backwards ? CurrentSequence.Length - frame - 1 : frame; } } - public Sprite Image { get { return CurrentSequence.GetSprite(CurrentFrame, WAngle.FromFacing(facingFunc())); } } + public Sprite Image { get { return CurrentSequence.GetSprite(CurrentFrame, facingFunc()); } } public IRenderable[] Render(WPos pos, WVec offset, int zOffset, PaletteReference palette, float scale) { @@ -58,7 +58,7 @@ namespace OpenRA.Graphics if (CurrentSequence.ShadowStart >= 0) { - var shadow = CurrentSequence.GetShadow(CurrentFrame, WAngle.FromFacing(facingFunc())); + var shadow = CurrentSequence.GetShadow(CurrentFrame, facingFunc()); var shadowRenderable = new SpriteRenderable(shadow, pos, offset, CurrentSequence.ShadowZOffset + zOffset, palette, scale, true); return new IRenderable[] { shadowRenderable, imageRenderable }; } @@ -74,7 +74,7 @@ namespace OpenRA.Graphics if (CurrentSequence.ShadowStart >= 0) { - var shadow = CurrentSequence.GetShadow(CurrentFrame, WAngle.FromFacing(facingFunc())); + var shadow = CurrentSequence.GetShadow(CurrentFrame, facingFunc()); var shadowPos = pos - new int2((int)(scale * shadow.Size.X / 2), (int)(scale * shadow.Size.Y / 2)); var shadowRenderable = new UISpriteRenderable(shadow, WPos.Zero + offset, shadowPos, CurrentSequence.ShadowZOffset + zOffset, palette, scale); return new IRenderable[] { shadowRenderable, imageRenderable }; diff --git a/OpenRA.Mods.Cnc/Traits/Render/WithEmbeddedTurretSpriteBody.cs b/OpenRA.Mods.Cnc/Traits/Render/WithEmbeddedTurretSpriteBody.cs index 3a1441b3a0..07ea910bf6 100644 --- a/OpenRA.Mods.Cnc/Traits/Render/WithEmbeddedTurretSpriteBody.cs +++ b/OpenRA.Mods.Cnc/Traits/Render/WithEmbeddedTurretSpriteBody.cs @@ -34,7 +34,7 @@ namespace OpenRA.Mods.Cnc.Traits.Render var wsb = init.Actor.TraitInfos().FirstOrDefault(); // Show the correct turret facing - var facing = init.Contains() ? init.Get().Value(init.World) : t.InitialFacing; + var facing = WAngle.FromFacing(init.Contains() ? init.Get().Value(init.World) : t.InitialFacing); var anim = new Animation(init.World, image, () => facing); anim.PlayRepeating(RenderSprites.NormalizeSequence(anim, init.GetDamageState(), wsb.Sequence)); @@ -47,11 +47,11 @@ namespace OpenRA.Mods.Cnc.Traits.Render { readonly Turreted turreted; - static Func MakeTurretFacingFunc(Actor self) + static Func MakeTurretFacingFunc(Actor self) { // Turret artwork is baked into the sprite, so only the first turret makes sense. var turreted = self.TraitsImplementing().FirstOrDefault(); - return () => turreted.TurretFacing; + return () => WAngle.FromFacing(turreted.TurretFacing); } public WithEmbeddedTurretSpriteBody(ActorInitializer init, WithSpriteBodyInfo info) diff --git a/OpenRA.Mods.Cnc/Traits/Render/WithGunboatBody.cs b/OpenRA.Mods.Cnc/Traits/Render/WithGunboatBody.cs index b2ca207cef..4acb765e20 100644 --- a/OpenRA.Mods.Cnc/Traits/Render/WithGunboatBody.cs +++ b/OpenRA.Mods.Cnc/Traits/Render/WithGunboatBody.cs @@ -46,11 +46,11 @@ namespace OpenRA.Mods.Cnc.Traits.Render readonly IFacing facing; readonly Turreted turret; - static Func MakeTurretFacingFunc(Actor self) + static Func MakeTurretFacingFunc(Actor self) { // Turret artwork is baked into the sprite, so only the first turret makes sense. var turreted = self.TraitsImplementing().FirstOrDefault(); - return () => turreted.TurretFacing; + return () => WAngle.FromFacing(turreted.TurretFacing); } public WithGunboatBody(ActorInitializer init, WithGunboatBodyInfo info) diff --git a/OpenRA.Mods.Cnc/Traits/Render/WithRoof.cs b/OpenRA.Mods.Cnc/Traits/Render/WithRoof.cs index 4cffcc2225..e46721c511 100644 --- a/OpenRA.Mods.Cnc/Traits/Render/WithRoof.cs +++ b/OpenRA.Mods.Cnc/Traits/Render/WithRoof.cs @@ -29,7 +29,7 @@ namespace OpenRA.Mods.Cnc.Traits.Render public WithRoof(Actor self, WithRoofInfo info) { var rs = self.Trait(); - var roof = new Animation(self.World, rs.GetImage(self), () => self.Trait().Facing); + var roof = new Animation(self.World, rs.GetImage(self), RenderSprites.MakeFacingFunc(self)); roof.Play(info.Sequence); rs.Add(new AnimationWithOffset(roof, null, null, 1024)); } diff --git a/OpenRA.Mods.Common/Effects/SpriteEffect.cs b/OpenRA.Mods.Common/Effects/SpriteEffect.cs index aa4ff5d0c8..d8b215ed69 100644 --- a/OpenRA.Mods.Common/Effects/SpriteEffect.cs +++ b/OpenRA.Mods.Common/Effects/SpriteEffect.cs @@ -48,7 +48,7 @@ namespace OpenRA.Mods.Common.Effects this.visibleThroughFog = visibleThroughFog; this.delay = delay; pos = posFunc(); - anim = new Animation(world, image, facingFunc); + anim = new Animation(world, image, () => WAngle.FromFacing(facingFunc())); } public void Tick(World world) diff --git a/OpenRA.Mods.Common/Graphics/ActorPreview.cs b/OpenRA.Mods.Common/Graphics/ActorPreview.cs index 691748f15c..5c18f9b5c5 100644 --- a/OpenRA.Mods.Common/Graphics/ActorPreview.cs +++ b/OpenRA.Mods.Common/Graphics/ActorPreview.cs @@ -67,20 +67,23 @@ namespace OpenRA.Mods.Common.Graphics return () => orientation; } - public Func GetFacing() + public Func GetFacing() { var facingInfo = Actor.TraitInfoOrDefault(); if (facingInfo == null) - return () => 0; + return () => WAngle.Zero; // Dynamic facing takes priority var dynamicInit = dict.GetOrDefault(); if (dynamicInit != null) - return dynamicInit.Value(null); + { + var getFacing = dynamicInit.Value(null); + return () => WAngle.FromFacing(getFacing()); + } // Fall back to initial actor facing if an Init isn't available var facingInit = dict.GetOrDefault(); - var facing = facingInit != null ? facingInit.Value(null) : facingInfo.GetInitialFacing(); + var facing = WAngle.FromFacing(facingInit != null ? facingInit.Value(null) : facingInfo.GetInitialFacing()); return () => facing; } diff --git a/OpenRA.Mods.Common/Projectiles/Bullet.cs b/OpenRA.Mods.Common/Projectiles/Bullet.cs index 2c72aac97c..10ad546c9b 100644 --- a/OpenRA.Mods.Common/Projectiles/Bullet.cs +++ b/OpenRA.Mods.Common/Projectiles/Bullet.cs @@ -158,7 +158,7 @@ namespace OpenRA.Mods.Common.Projectiles if (!string.IsNullOrEmpty(info.Image)) { - anim = new Animation(world, info.Image, new Func(GetEffectiveFacing)); + anim = new Animation(world, info.Image, new Func(GetEffectiveFacing)); anim.PlayRepeating(info.Sequences.Random(world.SharedRandom)); } @@ -176,7 +176,7 @@ namespace OpenRA.Mods.Common.Projectiles remainingBounces = info.BounceCount; } - int GetEffectiveFacing() + WAngle GetEffectiveFacing() { var at = (float)ticks / (length - 1); var attitude = angle.Tan() * (1 - 2 * at) / (4 * 1024); @@ -184,9 +184,11 @@ namespace OpenRA.Mods.Common.Projectiles var u = (facing % 128) / 128f; var scale = 512 * u * (1 - u); - return (int)(facing < 128 + var effective = (int)(facing < 128 ? facing - scale * attitude : facing + scale * attitude); + + return WAngle.FromFacing(effective); } public void Tick(World world) @@ -211,7 +213,7 @@ namespace OpenRA.Mods.Common.Projectiles { var delayedPos = WPos.LerpQuadratic(source, target, angle, ticks - info.TrailDelay, length); world.AddFrameEndTask(w => w.Add(new SpriteEffect(delayedPos, w, info.TrailImage, info.TrailSequences.Random(world.SharedRandom), - trailPalette, facing: GetEffectiveFacing()))); + trailPalette, facing: GetEffectiveFacing().Facing))); smokeTicks = info.TrailInterval; } diff --git a/OpenRA.Mods.Common/Projectiles/GravityBomb.cs b/OpenRA.Mods.Common/Projectiles/GravityBomb.cs index 590a2b22f9..18bfa40665 100644 --- a/OpenRA.Mods.Common/Projectiles/GravityBomb.cs +++ b/OpenRA.Mods.Common/Projectiles/GravityBomb.cs @@ -65,13 +65,14 @@ namespace OpenRA.Mods.Common.Projectiles this.info = info; this.args = args; pos = args.Source; + var facing = WAngle.FromFacing(args.Facing); var convertedVelocity = new WVec(info.Velocity.Y, -info.Velocity.X, info.Velocity.Z); - velocity = convertedVelocity.Rotate(WRot.FromFacing(args.Facing)); + velocity = convertedVelocity.Rotate(WRot.FromYaw(facing)); acceleration = new WVec(info.Acceleration.Y, -info.Acceleration.X, info.Acceleration.Z); if (!string.IsNullOrEmpty(info.Image)) { - anim = new Animation(args.SourceActor.World, info.Image, () => args.Facing); + anim = new Animation(args.SourceActor.World, info.Image, () => facing); if (!string.IsNullOrEmpty(info.OpenSequence)) anim.PlayThen(info.OpenSequence, () => anim.PlayRepeating(info.Sequences.Random(args.SourceActor.World.SharedRandom))); diff --git a/OpenRA.Mods.Common/Projectiles/Missile.cs b/OpenRA.Mods.Common/Projectiles/Missile.cs index 6bb4fadd41..fbaf983d08 100644 --- a/OpenRA.Mods.Common/Projectiles/Missile.cs +++ b/OpenRA.Mods.Common/Projectiles/Missile.cs @@ -203,7 +203,7 @@ namespace OpenRA.Mods.Common.Projectiles WDist distanceCovered; WDist rangeLimit; - int renderFacing; + WAngle renderFacing; [Sync] int hFacing; @@ -835,7 +835,7 @@ namespace OpenRA.Mods.Common.Projectiles else move = HomingTick(world, tarDistVec, relTarHorDist); - renderFacing = new WVec(move.X, move.Y - move.Z, 0).Yaw.Facing; + renderFacing = new WVec(move.X, move.Y - move.Z, 0).Yaw; // Move the missile var lastPos = pos; @@ -858,7 +858,7 @@ namespace OpenRA.Mods.Common.Projectiles if (!string.IsNullOrEmpty(info.TrailImage) && --ticksToNextSmoke < 0 && (state != States.Freefall || info.TrailWhenDeactivated)) { world.AddFrameEndTask(w => w.Add(new SpriteEffect(pos - 3 * move / 2, w, info.TrailImage, info.TrailSequences.Random(world.SharedRandom), - trailPalette, facing: renderFacing))); + trailPalette, facing: renderFacing.Facing))); ticksToNextSmoke = info.TrailInterval; } diff --git a/OpenRA.Mods.Common/Traits/Attack/AttackGarrisoned.cs b/OpenRA.Mods.Common/Traits/Attack/AttackGarrisoned.cs index 02798a5a1a..b07124fd4f 100644 --- a/OpenRA.Mods.Common/Traits/Attack/AttackGarrisoned.cs +++ b/OpenRA.Mods.Common/Traits/Attack/AttackGarrisoned.cs @@ -161,7 +161,7 @@ namespace OpenRA.Mods.Common.Traits if (port == null) return; - var muzzleFacing = targetYaw.Angle / 4; + var muzzleFacing = targetYaw.Facing; paxFacing[a.Actor].Facing = muzzleFacing; paxPos[a.Actor].SetVisualPosition(a.Actor, pos + PortOffset(self, port)); @@ -172,7 +172,7 @@ namespace OpenRA.Mods.Common.Traits if (a.Info.MuzzleSequence != null) { // Muzzle facing is fixed once the firing starts - var muzzleAnim = new Animation(self.World, paxRender[a.Actor].GetImage(a.Actor), () => muzzleFacing); + var muzzleAnim = new Animation(self.World, paxRender[a.Actor].GetImage(a.Actor), () => targetYaw); var sequence = a.Info.MuzzleSequence; if (a.Info.MuzzleSplitFacings > 0) diff --git a/OpenRA.Mods.Common/Traits/Burns.cs b/OpenRA.Mods.Common/Traits/Burns.cs index f712da5594..cc852a2277 100644 --- a/OpenRA.Mods.Common/Traits/Burns.cs +++ b/OpenRA.Mods.Common/Traits/Burns.cs @@ -35,7 +35,7 @@ namespace OpenRA.Mods.Common.Traits { this.info = info; - var anim = new Animation(self.World, "fire", () => 0); + var anim = new Animation(self.World, "fire"); anim.IsDecoration = true; anim.PlayRepeating(info.Anim); self.Trait().Add(anim); diff --git a/OpenRA.Mods.Common/Traits/Render/RenderSprites.cs b/OpenRA.Mods.Common/Traits/Render/RenderSprites.cs index 568818f3e4..a11982f51c 100644 --- a/OpenRA.Mods.Common/Traits/Render/RenderSprites.cs +++ b/OpenRA.Mods.Common/Traits/Render/RenderSprites.cs @@ -157,11 +157,13 @@ namespace OpenRA.Mods.Common.Traits.Render readonly List anims = new List(); string cachedImage; - public static Func MakeFacingFunc(Actor self) + public static Func MakeFacingFunc(Actor self) { var facing = self.TraitOrDefault(); - if (facing == null) return () => 0; - return () => facing.Facing; + if (facing == null) + return () => WAngle.Zero; + + return () => WAngle.FromFacing(facing.Facing); } public RenderSprites(ActorInitializer init, RenderSpritesInfo info) diff --git a/OpenRA.Mods.Common/Traits/Render/WithBridgeSpriteBody.cs b/OpenRA.Mods.Common/Traits/Render/WithBridgeSpriteBody.cs index 145c332bcd..56af58bf17 100644 --- a/OpenRA.Mods.Common/Traits/Render/WithBridgeSpriteBody.cs +++ b/OpenRA.Mods.Common/Traits/Render/WithBridgeSpriteBody.cs @@ -61,7 +61,7 @@ namespace OpenRA.Mods.Common.Traits.Render readonly Actor self; public WithBridgeSpriteBody(ActorInitializer init, WithBridgeSpriteBodyInfo info) - : base(init, info, () => 0) + : base(init, info) { self = init.Self; bridgeInfo = info; diff --git a/OpenRA.Mods.Common/Traits/Render/WithChargeSpriteBody.cs b/OpenRA.Mods.Common/Traits/Render/WithChargeSpriteBody.cs index 2881466e5f..41a37a65cb 100644 --- a/OpenRA.Mods.Common/Traits/Render/WithChargeSpriteBody.cs +++ b/OpenRA.Mods.Common/Traits/Render/WithChargeSpriteBody.cs @@ -39,7 +39,7 @@ namespace OpenRA.Mods.Common.Traits.Render readonly AttackCharges attackCharges; public WithChargeSpriteBody(ActorInitializer init, WithChargeSpriteBodyInfo info) - : base(init, info, () => 0) + : base(init, info) { attackCharges = init.Self.Trait(); ConfigureAnimation(init.Self); diff --git a/OpenRA.Mods.Common/Traits/Render/WithCrateBody.cs b/OpenRA.Mods.Common/Traits/Render/WithCrateBody.cs index 24d8230e36..f91a7ee831 100644 --- a/OpenRA.Mods.Common/Traits/Render/WithCrateBody.cs +++ b/OpenRA.Mods.Common/Traits/Render/WithCrateBody.cs @@ -40,7 +40,7 @@ namespace OpenRA.Mods.Common.Traits.Render public IEnumerable RenderPreviewSprites(ActorPreviewInitializer init, RenderSpritesInfo rs, string image, int facings, PaletteReference p) { - var anim = new Animation(init.World, rs.Image, () => 0); + var anim = new Animation(init.World, rs.Image); anim.PlayRepeating(RenderSprites.NormalizeSequence(anim, init.GetDamageState(), IdleSequence)); yield return new SpriteActorPreview(anim, () => WVec.Zero, () => 0, p, rs.Scale); } diff --git a/OpenRA.Mods.Common/Traits/Render/WithDeadBridgeSpriteBody.cs b/OpenRA.Mods.Common/Traits/Render/WithDeadBridgeSpriteBody.cs index f4f13b8e75..0f4c37dd0d 100644 --- a/OpenRA.Mods.Common/Traits/Render/WithDeadBridgeSpriteBody.cs +++ b/OpenRA.Mods.Common/Traits/Render/WithDeadBridgeSpriteBody.cs @@ -66,7 +66,7 @@ namespace OpenRA.Mods.Common.Traits.Render readonly BridgeLayer bridgeLayer; public WithDeadBridgeSpriteBody(ActorInitializer init, WithDeadBridgeSpriteBodyInfo info) - : base(init, info, () => 0) + : base(init, info) { bridgeInfo = info; bridgeLayer = init.World.WorldActor.Trait(); diff --git a/OpenRA.Mods.Common/Traits/Render/WithGateSpriteBody.cs b/OpenRA.Mods.Common/Traits/Render/WithGateSpriteBody.cs index b58dd9787b..2a5634c881 100644 --- a/OpenRA.Mods.Common/Traits/Render/WithGateSpriteBody.cs +++ b/OpenRA.Mods.Common/Traits/Render/WithGateSpriteBody.cs @@ -54,7 +54,7 @@ namespace OpenRA.Mods.Common.Traits.Render bool renderOpen; public WithGateSpriteBody(ActorInitializer init, WithGateSpriteBodyInfo info) - : base(init, info, () => 0) + : base(init, info) { gateBodyInfo = info; gate = init.Self.Trait(); diff --git a/OpenRA.Mods.Common/Traits/Render/WithIdleOverlay.cs b/OpenRA.Mods.Common/Traits/Render/WithIdleOverlay.cs index e9d0e05f54..ccae38d6e6 100644 --- a/OpenRA.Mods.Common/Traits/Render/WithIdleOverlay.cs +++ b/OpenRA.Mods.Common/Traits/Render/WithIdleOverlay.cs @@ -48,12 +48,15 @@ namespace OpenRA.Mods.Common.Traits.Render if (Palette != null) p = init.WorldRenderer.Palette(Palette); - Func facing; + Func facing; if (init.Contains()) - facing = init.Get>(); + { + var getFacing = init.Get>(); + facing = () => WAngle.FromFacing(getFacing()); + } else { - var f = init.Contains() ? init.Get() : 0; + var f = WAngle.FromFacing(init.Contains() ? init.Get() : 0); facing = () => f; } @@ -61,7 +64,7 @@ namespace OpenRA.Mods.Common.Traits.Render anim.PlayRepeating(RenderSprites.NormalizeSequence(anim, init.GetDamageState(), Sequence)); var body = init.Actor.TraitInfo(); - Func orientation = () => body.QuantizeOrientation(WRot.FromFacing(facing()), facings); + Func orientation = () => body.QuantizeOrientation(WRot.FromYaw(facing()), facings); Func offset = () => body.LocalToWorld(Offset.Rotate(orientation())); Func zOffset = () => { diff --git a/OpenRA.Mods.Common/Traits/Render/WithMuzzleOverlay.cs b/OpenRA.Mods.Common/Traits/Render/WithMuzzleOverlay.cs index ec3e731c96..8d4694006f 100644 --- a/OpenRA.Mods.Common/Traits/Render/WithMuzzleOverlay.cs +++ b/OpenRA.Mods.Common/Traits/Render/WithMuzzleOverlay.cs @@ -31,7 +31,7 @@ namespace OpenRA.Mods.Common.Traits.Render { readonly Dictionary visible = new Dictionary(); readonly Dictionary anims = new Dictionary(); - readonly Func getFacing; + readonly Func getFacing; readonly Armament[] armaments; public WithMuzzleOverlay(Actor self, WithMuzzleOverlayInfo info) @@ -55,11 +55,11 @@ namespace OpenRA.Mods.Common.Traits.Render // Workaround for broken ternary operators in certain versions of mono (3.10 and // certain versions of the 3.8 series): https://bugzilla.xamarin.com/show_bug.cgi?id=23319 if (turreted != null) - getFacing = () => turreted.TurretFacing; + getFacing = () => WAngle.FromFacing(turreted.TurretFacing); else if (facing != null) - getFacing = () => facing.Facing; + getFacing = () => WAngle.FromFacing(facing.Facing); else - getFacing = () => 0; + getFacing = () => WAngle.Zero; var muzzleFlash = new Animation(self.World, render.GetImage(self), getFacing); visible.Add(barrel, false); @@ -79,7 +79,7 @@ namespace OpenRA.Mods.Common.Traits.Render var sequence = a.Info.MuzzleSequence; if (a.Info.MuzzleSplitFacings > 0) - sequence += Util.QuantizeFacing(getFacing(), a.Info.MuzzleSplitFacings).ToString(); + sequence += Util.QuantizeFacing(getFacing().Facing, a.Info.MuzzleSplitFacings).ToString(); visible[barrel] = true; anims[barrel].Animation.PlayThen(sequence, () => visible[barrel] = false); diff --git a/OpenRA.Mods.Common/Traits/Render/WithProductionDoorOverlay.cs b/OpenRA.Mods.Common/Traits/Render/WithProductionDoorOverlay.cs index 99308623e9..33319dcd06 100644 --- a/OpenRA.Mods.Common/Traits/Render/WithProductionDoorOverlay.cs +++ b/OpenRA.Mods.Common/Traits/Render/WithProductionDoorOverlay.cs @@ -24,7 +24,7 @@ namespace OpenRA.Mods.Common.Traits.Render public IEnumerable RenderPreviewSprites(ActorPreviewInitializer init, RenderSpritesInfo rs, string image, int facings, PaletteReference p) { - var anim = new Animation(init.World, image, () => 0); + var anim = new Animation(init.World, image); anim.PlayFetchIndex(RenderSprites.NormalizeSequence(anim, init.GetDamageState(), Sequence), () => 0); var bi = init.Actor.TraitInfo(); diff --git a/OpenRA.Mods.Common/Traits/Render/WithResourceLevelSpriteBody.cs b/OpenRA.Mods.Common/Traits/Render/WithResourceLevelSpriteBody.cs index 90e5ab233b..2bacd01e22 100644 --- a/OpenRA.Mods.Common/Traits/Render/WithResourceLevelSpriteBody.cs +++ b/OpenRA.Mods.Common/Traits/Render/WithResourceLevelSpriteBody.cs @@ -43,7 +43,7 @@ namespace OpenRA.Mods.Common.Traits.Render PlayerResources playerResources; public WithResourceLevelSpriteBody(ActorInitializer init, WithResourceLevelSpriteBodyInfo info) - : base(init, info, () => 0) + : base(init, info) { this.info = info; playerResources = init.Self.Owner.PlayerActor.Trait(); diff --git a/OpenRA.Mods.Common/Traits/Render/WithSpriteBarrel.cs b/OpenRA.Mods.Common/Traits/Render/WithSpriteBarrel.cs index 56d2685929..514a2558f3 100644 --- a/OpenRA.Mods.Common/Traits/Render/WithSpriteBarrel.cs +++ b/OpenRA.Mods.Common/Traits/Render/WithSpriteBarrel.cs @@ -46,11 +46,11 @@ namespace OpenRA.Mods.Common.Traits.Render .First(tt => tt.Turret == armament.Turret); var turretFacing = Turreted.TurretFacingFromInit(init, t.InitialFacing, armament.Turret); - var anim = new Animation(init.World, image, turretFacing); + var anim = new Animation(init.World, image, () => WAngle.FromFacing(turretFacing())); anim.Play(RenderSprites.NormalizeSequence(anim, init.GetDamageState(), Sequence)); - Func facing = init.GetFacing(); - Func orientation = () => body.QuantizeOrientation(WRot.FromFacing(facing()), facings); + var facing = init.GetFacing(); + Func orientation = () => body.QuantizeOrientation(WRot.FromYaw(facing()), facings); Func turretOffset = () => body.LocalToWorld(t.Offset.Rotate(orientation())); Func zOffset = () => { @@ -82,7 +82,7 @@ namespace OpenRA.Mods.Common.Traits.Render .First(tt => tt.Name == armament.Info.Turret); rs = self.Trait(); - DefaultAnimation = new Animation(self.World, rs.GetImage(self), () => turreted.TurretFacing); + DefaultAnimation = new Animation(self.World, rs.GetImage(self), () => WAngle.FromFacing(turreted.TurretFacing)); DefaultAnimation.PlayRepeating(NormalizeSequence(self, Info.Sequence)); rs.Add(new AnimationWithOffset( DefaultAnimation, () => BarrelOffset(), () => IsTraitDisabled, p => RenderUtils.ZOffsetFromCenter(self, p, 0))); diff --git a/OpenRA.Mods.Common/Traits/Render/WithSpriteBody.cs b/OpenRA.Mods.Common/Traits/Render/WithSpriteBody.cs index 7e3a08ce2d..b73b8c2974 100644 --- a/OpenRA.Mods.Common/Traits/Render/WithSpriteBody.cs +++ b/OpenRA.Mods.Common/Traits/Render/WithSpriteBody.cs @@ -56,9 +56,9 @@ namespace OpenRA.Mods.Common.Traits.Render readonly Animation boundsAnimation; public WithSpriteBody(ActorInitializer init, WithSpriteBodyInfo info) - : this(init, info, () => 0) { } + : this(init, info, () => WAngle.Zero) { } - protected WithSpriteBody(ActorInitializer init, WithSpriteBodyInfo info, Func baseFacing) + protected WithSpriteBody(ActorInitializer init, WithSpriteBodyInfo info, Func baseFacing) : base(info) { rs = init.Self.Trait(); diff --git a/OpenRA.Mods.Common/Traits/Render/WithSpriteTurret.cs b/OpenRA.Mods.Common/Traits/Render/WithSpriteTurret.cs index 4c68db5a7d..8882c87463 100644 --- a/OpenRA.Mods.Common/Traits/Render/WithSpriteTurret.cs +++ b/OpenRA.Mods.Common/Traits/Render/WithSpriteTurret.cs @@ -51,11 +51,11 @@ namespace OpenRA.Mods.Common.Traits.Render .First(tt => tt.Turret == Turret); var turretFacing = Turreted.TurretFacingFromInit(init, t.InitialFacing, Turret); - var anim = new Animation(init.World, image, turretFacing); + var anim = new Animation(init.World, image, () => WAngle.FromFacing(turretFacing())); anim.Play(RenderSprites.NormalizeSequence(anim, init.GetDamageState(), Sequence)); - Func facing = init.GetFacing(); - Func orientation = () => body.QuantizeOrientation(WRot.FromFacing(facing()), facings); + var facing = init.GetFacing(); + Func orientation = () => body.QuantizeOrientation(WRot.FromYaw(facing()), facings); Func offset = () => body.LocalToWorld(t.Offset.Rotate(orientation())); Func zOffset = () => { @@ -90,7 +90,7 @@ namespace OpenRA.Mods.Common.Traits.Render arms = self.TraitsImplementing() .Where(w => w.Info.Turret == info.Turret).ToArray(); - DefaultAnimation = new Animation(self.World, rs.GetImage(self), () => t.TurretFacing); + DefaultAnimation = new Animation(self.World, rs.GetImage(self), () => WAngle.FromFacing(t.TurretFacing)); DefaultAnimation.PlayRepeating(NormalizeSequence(self, info.Sequence)); rs.Add(new AnimationWithOffset(DefaultAnimation, () => TurretOffset(self), diff --git a/OpenRA.Mods.Common/Traits/Render/WithWallSpriteBody.cs b/OpenRA.Mods.Common/Traits/Render/WithWallSpriteBody.cs index cd436420a6..29e635541c 100644 --- a/OpenRA.Mods.Common/Traits/Render/WithWallSpriteBody.cs +++ b/OpenRA.Mods.Common/Traits/Render/WithWallSpriteBody.cs @@ -72,7 +72,7 @@ namespace OpenRA.Mods.Common.Traits.Render } } - var anim = new Animation(init.World, image, () => 0); + var anim = new Animation(init.World, image); anim.PlayFetchIndex(RenderSprites.NormalizeSequence(anim, init.GetDamageState(), Sequence), () => adjacent); yield return new SpriteActorPreview(anim, () => WVec.Zero, () => 0, p, rs.Scale); @@ -99,7 +99,7 @@ namespace OpenRA.Mods.Common.Traits.Render void IWallConnector.SetDirty() { dirty = true; } public WithWallSpriteBody(ActorInitializer init, WithWallSpriteBodyInfo info) - : base(init, info, () => 0) + : base(init, info) { wallInfo = info; } diff --git a/OpenRA.Mods.Common/Traits/ThrowsParticle.cs b/OpenRA.Mods.Common/Traits/ThrowsParticle.cs index 0a4a8b27fa..c9f3b1112d 100644 --- a/OpenRA.Mods.Common/Traits/ThrowsParticle.cs +++ b/OpenRA.Mods.Common/Traits/ThrowsParticle.cs @@ -81,7 +81,7 @@ namespace OpenRA.Mods.Common.Traits // Facing rotation rotation = WAngle.FromFacing(WDist.FromPDF(Game.CosmeticRandom, 2).Length * info.TurnSpeed / 1024); - var anim = new Animation(init.World, rs.GetImage(self), () => facing.Angle / 4); + var anim = new Animation(init.World, rs.GetImage(self), () => facing); anim.PlayRepeating(info.Anim); rs.Add(new AnimationWithOffset(anim, () => pos, null)); }