Cache Missile speed infos in constructor

The primary reason is to have one central location for the look-ups, so we'll only have to change up to 3 lines if we rename or merge the speed properties.
This commit is contained in:
reaperrr
2016-09-09 13:15:14 +02:00
parent 6eade2dd3f
commit 0b7fdc411b

View File

@@ -159,6 +159,9 @@ namespace OpenRA.Mods.Common.Projectiles
readonly Animation anim; readonly Animation anim;
readonly WVec gravity; readonly WVec gravity;
readonly int minLaunchSpeed;
readonly int maxLaunchSpeed;
readonly int maxSpeed;
int ticks; int ticks;
@@ -201,6 +204,9 @@ namespace OpenRA.Mods.Common.Projectiles
gravity = new WVec(0, 0, -info.Gravity); gravity = new WVec(0, 0, -info.Gravity);
targetPosition = args.PassiveTarget; targetPosition = args.PassiveTarget;
rangeLimit = info.RangeLimit != WDist.Zero ? info.RangeLimit : args.Weapon.Range; rangeLimit = info.RangeLimit != WDist.Zero ? info.RangeLimit : args.Weapon.Range;
minLaunchSpeed = info.MinimumLaunchSpeed.Length > -1 ? info.MinimumLaunchSpeed.Length : info.Speed.Length;
maxLaunchSpeed = info.MaximumLaunchSpeed.Length > -1 ? info.MaximumLaunchSpeed.Length : info.Speed.Length;
maxSpeed = info.Speed.Length;
var world = args.SourceActor.World; var world = args.SourceActor.World;
@@ -248,9 +254,7 @@ namespace OpenRA.Mods.Common.Projectiles
void DetermineLaunchSpeedAndAngleForIncline(int predClfDist, int diffClfMslHgt, int relTarHorDist, void DetermineLaunchSpeedAndAngleForIncline(int predClfDist, int diffClfMslHgt, int relTarHorDist,
out int speed, out int vFacing) out int speed, out int vFacing)
{ {
var minLaunchSpeed = info.MinimumLaunchSpeed.Length > -1 ? info.MinimumLaunchSpeed.Length : info.Speed.Length; speed = maxLaunchSpeed;
var maxLaunchSpeed = info.MaximumLaunchSpeed.Length > -1 ? info.MaximumLaunchSpeed.Length : info.Speed.Length;
speed = info.MaximumLaunchSpeed.Length > -1 ? info.MaximumLaunchSpeed.Length : info.Speed.Length;
// Find smallest vertical facing, for which the missile will be able to climb terrAltDiff w-units // Find smallest vertical facing, for which the missile will be able to climb terrAltDiff w-units
// within hHeightChange w-units all the while ending the ascent with vertical facing 0 // within hHeightChange w-units all the while ending the ascent with vertical facing 0
@@ -291,7 +295,7 @@ namespace OpenRA.Mods.Common.Projectiles
// TODO: Double check Launch parameter determination // TODO: Double check Launch parameter determination
void DetermineLaunchSpeedAndAngle(World world, out int speed, out int vFacing) void DetermineLaunchSpeedAndAngle(World world, out int speed, out int vFacing)
{ {
speed = info.MaximumLaunchSpeed.Length > -1 ? info.MaximumLaunchSpeed.Length : info.Speed.Length; speed = maxLaunchSpeed;
loopRadius = LoopRadius(speed, info.VerticalRateOfTurn); loopRadius = LoopRadius(speed, info.VerticalRateOfTurn);
// Compute current distance from target position // Compute current distance from target position
@@ -310,7 +314,7 @@ namespace OpenRA.Mods.Common.Projectiles
else if (lastHt != 0) else if (lastHt != 0)
{ {
vFacing = System.Math.Max((sbyte)(info.MinimumLaunchAngle.Angle >> 2), (sbyte)0); vFacing = System.Math.Max((sbyte)(info.MinimumLaunchAngle.Angle >> 2), (sbyte)0);
speed = info.MaximumLaunchSpeed.Length > -1 ? info.MaximumLaunchSpeed.Length : info.Speed.Length; speed = maxLaunchSpeed;
} }
else else
{ {
@@ -404,7 +408,7 @@ namespace OpenRA.Mods.Common.Projectiles
void ChangeSpeed(int sign = 1) void ChangeSpeed(int sign = 1)
{ {
speed = (speed + sign * info.Acceleration.Length).Clamp(0, info.Speed.Length); speed = (speed + sign * info.Acceleration.Length).Clamp(0, maxSpeed);
// Compute the vertical loop radius // Compute the vertical loop radius
loopRadius = LoopRadius(speed, info.VerticalRateOfTurn); loopRadius = LoopRadius(speed, info.VerticalRateOfTurn);
@@ -415,7 +419,7 @@ namespace OpenRA.Mods.Common.Projectiles
// Compute the projectile's freefall displacement // Compute the projectile's freefall displacement
var move = velocity + gravity / 2; var move = velocity + gravity / 2;
velocity += gravity; velocity += gravity;
var velRatio = info.Speed.Length * 1024 / velocity.Length; var velRatio = maxSpeed * 1024 / velocity.Length;
if (velRatio < 1024) if (velRatio < 1024)
velocity = velocity * velRatio / 1024; velocity = velocity * velRatio / 1024;