Skip to content

Commit 62e3919

Browse files
committed
Fix #80: error spew related to terminal velocity
1 parent f54659a commit 62e3919

File tree

1 file changed

+87
-47
lines changed

1 file changed

+87
-47
lines changed

RasterPropMonitor/Core/RPMCEvaluators.cs

Lines changed: 87 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -3022,13 +3022,16 @@ private NumericVariableEvaluator AngleOfAttack()
30223022
{
30233023
Func<double> accessor = null;
30243024

3025-
accessor = (Func<double>)GetInternalMethod("JSIFAR:GetAngleOfAttack", typeof(Func<double>));
3026-
if (accessor != null)
3025+
if (JSIFAR.farFound)
30273026
{
3028-
double value = accessor();
3029-
if (double.IsNaN(value))
3027+
accessor = (Func<double>)GetInternalMethod("JSIFAR:GetAngleOfAttack", typeof(Func<double>));
3028+
if (accessor != null)
30303029
{
3031-
accessor = null;
3030+
double value = accessor();
3031+
if (double.IsNaN(value))
3032+
{
3033+
accessor = null;
3034+
}
30323035
}
30333036
}
30343037

@@ -3049,20 +3052,28 @@ private NumericVariableEvaluator DeltaV()
30493052
{
30503053
Func<double> accessor = null;
30513054

3052-
accessor = (Func<double>)GetInternalMethod("JSIMechJeb:GetDeltaV", typeof(Func<double>));
3053-
if (accessor != null)
3055+
if (JSIMechJeb.IsInstalled)
30543056
{
3055-
double value = accessor();
3056-
if (double.IsNaN(value))
3057+
accessor = (Func<double>)GetInternalMethod("JSIMechJeb:GetDeltaV", typeof(Func<double>));
3058+
if (accessor != null)
30573059
{
3058-
accessor = null;
3060+
double value = accessor();
3061+
if (double.IsNaN(value))
3062+
{
3063+
accessor = null;
3064+
}
30593065
}
30603066
}
30613067

30623068
if (accessor == null)
30633069
{
30643070
return (RPMVesselComputer comp) =>
30653071
{
3072+
// TODO: use the stock deltav calculator instead
3073+
if (comp?.vessel?.VesselDeltaV != null)
3074+
{
3075+
return comp.vessel.VesselDeltaV.TotalDeltaVActual;
3076+
}
30663077
return (comp.actualAverageIsp * RPMGlobals.gee) * Math.Log(comp.totalShipWetMass / (comp.totalShipWetMass - comp.resources.PropellantMass(false)));
30673078
};
30683079
}
@@ -3090,6 +3101,10 @@ private NumericVariableEvaluator DeltaVStage()
30903101
{
30913102
return (RPMVesselComputer comp) =>
30923103
{
3104+
if (comp?.vessel.VesselDeltaV != null)
3105+
{
3106+
return comp.vessel.VesselDeltaV.GetStage(comp.vessel.currentStage).deltaVActual;
3107+
}
30933108
return (comp.actualAverageIsp * RPMGlobals.gee) * Math.Log(comp.totalShipWetMass / (comp.totalShipWetMass - comp.resources.PropellantMass(true)));
30943109
};
30953110
}
@@ -3103,13 +3118,16 @@ private NumericVariableEvaluator DragAccel()
31033118
{
31043119
Func<double> accessor = null;
31053120

3106-
accessor = (Func<double>)GetInternalMethod("JSIFAR:GetDragForce", typeof(Func<double>));
3107-
if (accessor != null)
3121+
if (JSIFAR.farFound)
31083122
{
3109-
double value = accessor();
3110-
if (double.IsNaN(value))
3123+
accessor = (Func<double>)GetInternalMethod("JSIFAR:GetDragForce", typeof(Func<double>));
3124+
if (accessor != null)
31113125
{
3112-
accessor = null;
3126+
double value = accessor();
3127+
if (double.IsNaN(value))
3128+
{
3129+
accessor = null;
3130+
}
31133131
}
31143132
}
31153133

@@ -3133,13 +3151,16 @@ private NumericVariableEvaluator DragForce()
31333151
{
31343152
Func<double> accessor = null;
31353153

3136-
accessor = (Func<double>)GetInternalMethod("JSIFAR:GetDragForce", typeof(Func<double>));
3137-
if (accessor != null)
3154+
if (JSIFAR.farFound)
31383155
{
3139-
double value = accessor();
3140-
if (double.IsNaN(value))
3156+
accessor = (Func<double>)GetInternalMethod("JSIFAR:GetDragForce", typeof(Func<double>));
3157+
if (accessor != null)
31413158
{
3142-
accessor = null;
3159+
double value = accessor();
3160+
if (double.IsNaN(value))
3161+
{
3162+
accessor = null;
3163+
}
31433164
}
31443165
}
31453166

@@ -3160,13 +3181,16 @@ private NumericVariableEvaluator DynamicPressure()
31603181
{
31613182
Func<double> accessor = null;
31623183

3163-
accessor = (Func<double>)GetInternalMethod("JSIFAR:GetDynamicPressure", typeof(Func<double>));
3164-
if (accessor != null)
3184+
if (JSIFAR.farFound)
31653185
{
3166-
double value = accessor();
3167-
if (double.IsNaN(value))
3186+
accessor = (Func<double>)GetInternalMethod("JSIFAR:GetDynamicPressure", typeof(Func<double>));
3187+
if (accessor != null)
31683188
{
3169-
accessor = null;
3189+
double value = accessor();
3190+
if (double.IsNaN(value))
3191+
{
3192+
accessor = null;
3193+
}
31703194
}
31713195
}
31723196

@@ -3224,13 +3248,16 @@ private NumericVariableEvaluator LiftAccel()
32243248
{
32253249
Func<double> accessor = null;
32263250

3227-
accessor = (Func<double>)GetInternalMethod("JSIFAR:GetLiftForce", typeof(Func<double>));
3228-
if (accessor != null)
3251+
if (JSIFAR.farFound)
32293252
{
3230-
double value = accessor();
3231-
if (double.IsNaN(value))
3253+
accessor = (Func<double>)GetInternalMethod("JSIFAR:GetLiftForce", typeof(Func<double>));
3254+
if (accessor != null)
32323255
{
3233-
accessor = null;
3256+
double value = accessor();
3257+
if (double.IsNaN(value))
3258+
{
3259+
accessor = null;
3260+
}
32343261
}
32353262
}
32363263

@@ -3254,13 +3281,16 @@ private NumericVariableEvaluator LiftForce()
32543281
{
32553282
Func<double> accessor = null;
32563283

3257-
accessor = (Func<double>)GetInternalMethod("JSIFAR:GetLiftForce", typeof(Func<double>));
3258-
if (accessor != null)
3284+
if (JSIFAR.farFound)
32593285
{
3260-
double value = accessor();
3261-
if (double.IsNaN(value))
3286+
accessor = (Func<double>)GetInternalMethod("JSIFAR:GetLiftForce", typeof(Func<double>));
3287+
if (accessor != null)
32623288
{
3263-
accessor = null;
3289+
double value = accessor();
3290+
if (double.IsNaN(value))
3291+
{
3292+
accessor = null;
3293+
}
32643294
}
32653295
}
32663296

@@ -3281,7 +3311,11 @@ private NumericVariableEvaluator MechJebAvailable()
32813311
{
32823312
Func<bool> accessor = null;
32833313

3284-
accessor = (Func<bool>)GetInternalMethod("JSIMechJeb:GetMechJebAvailable", typeof(Func<bool>));
3314+
if (JSIMechJeb.IsInstalled)
3315+
{
3316+
accessor = (Func<bool>)GetInternalMethod("JSIMechJeb:GetMechJebAvailable", typeof(Func<bool>));
3317+
}
3318+
32853319
if (accessor == null)
32863320
{
32873321
return (RPMVesselComputer comp) => { return 0; };
@@ -3296,13 +3330,16 @@ private NumericVariableEvaluator SideSlip()
32963330
{
32973331
Func<double> accessor = null;
32983332

3299-
accessor = (Func<double>)GetInternalMethod("JSIFAR:GetSideSlip", typeof(Func<double>));
3300-
if (accessor != null)
3333+
if (JSIFAR.farFound)
33013334
{
3302-
double value = accessor();
3303-
if (double.IsNaN(value))
3335+
accessor = (Func<double>)GetInternalMethod("JSIFAR:GetSideSlip", typeof(Func<double>));
3336+
if (accessor != null)
33043337
{
3305-
accessor = null;
3338+
double value = accessor();
3339+
if (double.IsNaN(value))
3340+
{
3341+
accessor = null;
3342+
}
33063343
}
33073344
}
33083345

@@ -3325,17 +3362,20 @@ internal double TerminalVelocity(RPMVesselComputer comp)
33253362
{
33263363
Func<double> accessor = null;
33273364

3328-
accessor = (Func<double>)GetInternalMethod("JSIFAR:GetTerminalVelocity", typeof(Func<double>));
3329-
if (accessor != null)
3365+
if (JSIFAR.farFound)
33303366
{
3331-
double value = accessor();
3332-
if (value < 0.0)
3367+
accessor = (Func<double>)GetInternalMethod("JSIFAR:GetTerminalVelocity", typeof(Func<double>));
3368+
if (accessor != null)
33333369
{
3334-
accessor = null;
3370+
double value = accessor();
3371+
if (value < 0.0)
3372+
{
3373+
accessor = null;
3374+
}
33353375
}
33363376
}
33373377

3338-
if (accessor == null)
3378+
if (accessor == null && JSIMechJeb.IsInstalled)
33393379
{
33403380
accessor = (Func<double>)GetInternalMethod("JSIMechJeb:GetTerminalVelocity", typeof(Func<double>));
33413381
double value = accessor();

0 commit comments

Comments
 (0)