From 20785a6585bba517e0fdc5e7c46ca0d2314991d3 Mon Sep 17 00:00:00 2001 From: Chris Forbes Date: Fri, 9 Jul 2010 21:42:53 +1200 Subject: [PATCH] clean up bullets somewhat --- OpenRA.Mods.RA/Effects/Bullet.cs | 26 +++++++++++++++++++++++--- mods/ra/weapons.yaml | 1 + 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/OpenRA.Mods.RA/Effects/Bullet.cs b/OpenRA.Mods.RA/Effects/Bullet.cs index c1319f339a..05c04e3350 100755 --- a/OpenRA.Mods.RA/Effects/Bullet.cs +++ b/OpenRA.Mods.RA/Effects/Bullet.cs @@ -66,13 +66,33 @@ namespace OpenRA.Mods.RA.Effects if (Info.Image != null) { - anim = new Animation(Info.Image, () => Traits.Util.GetFacing(Args.dest - Args.src, 0)); + anim = new Animation(Info.Image, GetEffectiveFacing); anim.PlayRepeating("idle"); } } int TotalTime() { return (Args.dest - Args.src).Length * BaseBulletSpeed / Info.Speed; } + float GetAltitude() + { + var at = (float)t / TotalTime(); + return (Args.dest - Args.src).Length * Info.Angle * 4 * at * (1 - at); + } + + int GetEffectiveFacing() + { + var at = (float)t / TotalTime(); + var attitude = Info.Angle * (1 - 2 * at); + + var rawFacing = Traits.Util.GetFacing(Args.dest - Args.src, 0); + var u = (rawFacing % 128) / 128f; + var scale = 512 * u * (1 - u); + + return (int)(rawFacing < 128 + ? rawFacing - scale * attitude + : rawFacing + scale * attitude); + } + public void Tick( World world ) { t += 40; @@ -88,7 +108,7 @@ namespace OpenRA.Mods.RA.Effects var pos = float2.Lerp(Args.src, Args.dest, at) - new float2(0, altitude); var highPos = (Info.High || Info.Angle > 0) - ? (pos - new float2(0, (Args.dest - Args.src).Length * Info.Angle * 4 * at * (1 - at))) + ? (pos - new float2(0, GetAltitude())) : pos; world.AddFrameEndTask(w => w.Add( @@ -126,7 +146,7 @@ namespace OpenRA.Mods.RA.Effects if (Info.Shadow) yield return new Renderable(anim.Image, pos - .5f * anim.Image.size, "shadow"); - var highPos = pos - new float2(0, (Args.dest - Args.src).Length * Info.Angle * 4 * at * (1 - at)); + var highPos = pos - new float2(0, GetAltitude()); yield return new Renderable(anim.Image, highPos - .5f * anim.Image.size, Args.firedBy.Owner.Palette); } diff --git a/mods/ra/weapons.yaml b/mods/ra/weapons.yaml index 4671c2f5f4..2c2973a2a0 100644 --- a/mods/ra/weapons.yaml +++ b/mods/ra/weapons.yaml @@ -633,6 +633,7 @@ SCUD: Trail: smokey Inaccuracy: 5 Image: V2 + Angle: .1 Warhead: Spread: 8 Verses: 90%,75%,60%,25%,100%