Skip to content

Commit

Permalink
prevent log errors/nullrefs, performance pass (sqrMagnitude and forea…
Browse files Browse the repository at this point in the history
…ch replacement)
  • Loading branch information
TheDogKSP committed Aug 13, 2017
1 parent 70fc2be commit 50155ce
Show file tree
Hide file tree
Showing 11 changed files with 80 additions and 58 deletions.
4 changes: 2 additions & 2 deletions BDArmory/CounterMeasure/CMSmoke.cs
Expand Up @@ -34,8 +34,8 @@ public static bool RaycastSmoke(Ray ray)
float enter;
if(smokePlane.Raycast(ray, out enter))
{
float dist = (ray.GetPoint(enter)-smokeTf.position).magnitude;
if(dist < 16)
float dist = (ray.GetPoint(enter)-smokeTf.position).sqrMagnitude;
if(dist < 16*16)
{
return true;
}
Expand Down
6 changes: 3 additions & 3 deletions BDArmory/FX/ExplosionFX.cs
Expand Up @@ -218,12 +218,12 @@ public static void DoExplosionDamage(Vector3 position, float power, float heat,
while (v.MoveNext())
{
if (v.Current == null) continue;
if (!v.Current.loaded || v.Current.packed || (v.Current.CoM - position).magnitude >= maxDistance * 4) continue;
if (!v.Current.loaded || v.Current.packed || (v.Current.CoM - position).sqrMagnitude >= (maxDistance*maxDistance) * 4) continue;
List<Part>.Enumerator p = v.Current.parts.GetEnumerator();
while (p.MoveNext())
{
if (p.Current == null) continue;
if ((p.Current.transform.position - position).magnitude >= maxDistance) continue;
if ((p.Current.transform.position - position).sqrMagnitude >= maxDistance*maxDistance) continue;
DoExplosionRay(new Ray(position, p.Current.transform.TransformPoint(p.Current.CoMOffset) - position), power, heat, maxDistance, ref ignoreParts, ref ignoreBuildings, sourceVessel);
}
p.Dispose();
Expand All @@ -234,7 +234,7 @@ public static void DoExplosionDamage(Vector3 position, float power, float heat,
while(bldg.MoveNext())
{
if(bldg.Current == null) continue;
if((bldg.Current.transform.position - position).magnitude < maxDistance * 1000)
if((bldg.Current.transform.position - position).sqrMagnitude < maxDistance*maxDistance * 1000)
{
DoExplosionRay(new Ray(position, bldg.Current.transform.position - position), power, heat, maxDistance, ref ignoreParts, ref ignoreBuildings);
}
Expand Down
32 changes: 16 additions & 16 deletions BDArmory/MissileFire.cs
Expand Up @@ -1101,12 +1101,12 @@ IEnumerator GuardTurretRoutine()
if (tgp.Current == null) continue;
if (!tgp.Current.enabled || (tgp.Current.cameraEnabled && tgp.Current.groundStabilized &&
!((tgp.Current.groundTargetPosition -
guardTarget.transform.position).magnitude > 20))) continue;
guardTarget.transform.position).sqrMagnitude > 20*20))) continue;
tgp.Current.EnableCamera();
yield return StartCoroutine(tgp.Current.PointToPositionRoutine(guardTarget.CoM));
if (!tgp.Current) continue;
if (tgp.Current.groundStabilized && guardTarget &&
(tgp.Current.groundTargetPosition - guardTarget.transform.position).magnitude < 20)
(tgp.Current.groundTargetPosition - guardTarget.transform.position).sqrMagnitude < 20*20)
{
tgp.Current.slaveTurrets = true;
StartGuardTurretFiring();
Expand All @@ -1117,7 +1117,7 @@ IEnumerator GuardTurretRoutine()
tgp.Dispose();
}

if (!guardTarget || (guardTarget.transform.position - transform.position).magnitude > guardRange)
if (!guardTarget || (guardTarget.transform.position - transform.position).sqrMagnitude > guardRange*guardRange)
{
SetTarget(null); //disengage, sensors unavailable.
yield break;
Expand All @@ -1141,7 +1141,7 @@ IEnumerator GuardTurretRoutine()
if (vesselRadarData &&
(!vesselRadarData.locked ||
(vesselRadarData.lockedTargetData.targetData.predictedPosition - guardTarget.transform.position)
.magnitude > 40))
.sqrMagnitude > 40*40))
{
//vesselRadarData.TryLockTarget(guardTarget.transform.position);
vesselRadarData.TryLockTarget(guardTarget);
Expand All @@ -1155,7 +1155,7 @@ IEnumerator GuardTurretRoutine()
}
}

if (!guardTarget || (guardTarget.transform.position - transform.position).magnitude > guardRange)
if (!guardTarget || (guardTarget.transform.position - transform.position).sqrMagnitude > guardRange*guardRange)
{
SetTarget(null); //disengage, sensors unavailable.
yield break;
Expand Down Expand Up @@ -1278,7 +1278,7 @@ IEnumerator GuardMissileRoutine()


MissileLauncher mlauncher;
while (ml && Time.time - attemptStartTime < attemptDuration && (!heatTarget.exists || (heatTarget.predictedPosition - guardTarget.transform.position).magnitude > 40))
while (ml && Time.time - attemptStartTime < attemptDuration && (!heatTarget.exists || (heatTarget.predictedPosition - guardTarget.transform.position).sqrMagnitude > 40*40))
{
//TODO BDModularGuidance: add turret
//try using missile turret to lock target
Expand All @@ -1302,7 +1302,7 @@ IEnumerator GuardMissileRoutine()
{
if (!vesselRadarData.locked ||
(vesselRadarData.lockedTargetData.targetData.predictedPosition -
guardTarget.transform.position).magnitude > 40)
guardTarget.transform.position).sqrMagnitude > 40*40)
{
//vesselRadarData.TryLockTarget(guardTarget.transform.position);
vesselRadarData.TryLockTarget(guardTarget);
Expand Down Expand Up @@ -1377,7 +1377,7 @@ IEnumerator GuardMissileRoutine()
float attemptStartTime = Time.time;
float attemptDuration = targetScanInterval * 0.75f;
while (Time.time - attemptStartTime < attemptDuration &&
(!antiRadTargetAcquired || (antiRadiationTarget - guardTarget.CoM).magnitude > 20))
(!antiRadTargetAcquired || (antiRadiationTarget - guardTarget.CoM).sqrMagnitude > 20*20))
{
yield return new WaitForFixedUpdate();
}
Expand All @@ -1387,7 +1387,7 @@ IEnumerator GuardMissileRoutine()
yield return new WaitForSeconds(1f);
}

if (ml && antiRadTargetAcquired && (antiRadiationTarget - guardTarget.CoM).magnitude < 20)
if (ml && antiRadTargetAcquired && (antiRadiationTarget - guardTarget.CoM).sqrMagnitude < 20*20)
{
FireCurrentMissile(true);
StartCoroutine(MissileAwayRoutine(ml));
Expand All @@ -1403,7 +1403,7 @@ IEnumerator GuardMissileRoutine()
if (tgp.Current == null) continue;
tgp.Current.EnableCamera();
yield return StartCoroutine(tgp.Current.PointToPositionRoutine(guardTarget.CoM));
if (tgp.Current.groundStabilized && (tgp.Current.groundTargetPosition - guardTarget.transform.position).magnitude < 20)
if (tgp.Current.groundStabilized && (tgp.Current.groundTargetPosition - guardTarget.transform.position).sqrMagnitude < 20*20)
{
break;
}
Expand All @@ -1414,15 +1414,15 @@ IEnumerator GuardMissileRoutine()
//search for a laser point that corresponds with target vessel
float attemptStartTime = Time.time;
float attemptDuration = targetScanInterval * 0.75f;
while (Time.time - attemptStartTime < attemptDuration && (!laserPointDetected || (foundCam && (foundCam.groundTargetPosition - guardTarget.CoM).magnitude > 20)))
while (Time.time - attemptStartTime < attemptDuration && (!laserPointDetected || (foundCam && (foundCam.groundTargetPosition - guardTarget.CoM).sqrMagnitude > 20*20)))
{
yield return new WaitForFixedUpdate();
}
if (SetCargoBays())
{
yield return new WaitForSeconds(1f);
}
if (ml && laserPointDetected && foundCam && (foundCam.groundTargetPosition - guardTarget.CoM).magnitude < 20)
if (ml && laserPointDetected && foundCam && (foundCam.groundTargetPosition - guardTarget.CoM).sqrMagnitude < 20*20)
{
FireCurrentMissile(true);
StartCoroutine(MissileAwayRoutine(ml));
Expand Down Expand Up @@ -3589,8 +3589,8 @@ void ScanAllTargets()
{
if (v.Current == null) continue;
if (!v.Current.loaded) continue;
float distance = (transform.position - v.Current.transform.position).magnitude;
if (!(distance < guardRange) || !CanSeeTarget(v.Current)) continue;
float distance = (transform.position - v.Current.transform.position).sqrMagnitude;
if (!(distance < guardRange*guardRange) || !CanSeeTarget(v.Current)) continue;
float angle = Vector3.Angle(-transform.forward, v.Current.transform.position - transform.position);
if (!(angle < guardAngle / 2)) continue;
List<MissileBase>.Enumerator missile = v.Current.FindPartModulesImplementing<MissileBase>().GetEnumerator();
Expand Down Expand Up @@ -3714,7 +3714,7 @@ bool CrossCheckWithRWR(TargetInfo v)
{
for (int i = 0; i < rwr.pingsData.Length; i++)
{
if (rwr.pingsData[i].exists && (rwr.pingWorldPositions[i] - v.position).magnitude < 20)
if (rwr.pingsData[i].exists && (rwr.pingWorldPositions[i] - v.position).sqrMagnitude < 20*20)
{
matchFound = true;
break;
Expand Down Expand Up @@ -3852,7 +3852,7 @@ void GuardMode()
{
//release target if out of range
if (BDArmorySettings.ALLOW_LEGACY_TARGETING &&
(guardTarget.transform.position - transform.position).magnitude > guardRange)
(guardTarget.transform.position - transform.position).sqrMagnitude > guardRange*guardRange)
{
SetTarget(null);
}
Expand Down
2 changes: 1 addition & 1 deletion BDArmory/ModuleTurret.cs
Expand Up @@ -280,7 +280,7 @@ public bool TargetInRange(Vector3 targetPosition, float thresholdDegrees, float
}
bool withinView = Vector3.Angle(targetPosition - pitchTransform.position, pitchTransform.forward) <
thresholdDegrees;
bool withinDistance = (targetPosition - pitchTransform.position).magnitude < maxDistance;
bool withinDistance = (targetPosition - pitchTransform.position).sqrMagnitude < maxDistance*maxDistance;
return (withinView && withinDistance);
}

Expand Down
4 changes: 2 additions & 2 deletions BDArmory/ModuleWeapon.cs
Expand Up @@ -1688,7 +1688,7 @@ void RunTrajectorySimulation()
simulating = false;
}

if ((simStartPos - simCurrPos).magnitude > maxTargetingRange)
if ((simStartPos - simCurrPos).sqrMagnitude > maxTargetingRange*maxTargetingRange)
{
bulletPrediction = simStartPos + ((simCurrPos - simStartPos).normalized * maxTargetingRange);
simulating = false;
Expand Down Expand Up @@ -1873,7 +1873,7 @@ void UpdateTargetVessel()
//legacy or visual range guard targeting
if (aiControlled && weaponManager && legacyTargetVessel &&
(BDArmorySettings.ALLOW_LEGACY_TARGETING ||
(legacyTargetVessel.transform.position - transform.position).magnitude < weaponManager.guardRange))
(legacyTargetVessel.transform.position - transform.position).sqrMagnitude < weaponManager.guardRange*weaponManager.guardRange))
{
targetPosition = legacyTargetVessel.CoM;
targetVelocity = legacyTargetVessel.srf_velocity;
Expand Down
42 changes: 27 additions & 15 deletions BDArmory/Parts/ModuleTargetingCamera.cs
Expand Up @@ -4,6 +4,7 @@
using BDArmory.Radar;
using BDArmory.UI;
using UnityEngine;
using System.Collections.Generic;

namespace BDArmory.Parts
{
Expand Down Expand Up @@ -145,10 +146,13 @@ public MissileFire weaponManager
if(wpmr == null || wpmr.vessel!=vessel)
{
wpmr = null;
foreach(MissileFire mf in vessel.FindPartModulesImplementing<MissileFire>())
List<MissileFire>.Enumerator mf = vessel.FindPartModulesImplementing<MissileFire>().GetEnumerator();
while (mf.MoveNext())
{
wpmr = mf;
if (mf.Current)
wpmr = mf.Current;
}
mf.Dispose();
}

return wpmr;
Expand Down Expand Up @@ -255,14 +259,16 @@ public void DisableCamera()

ModuleTargetingCamera FindNextActiveCamera()
{
foreach(ModuleTargetingCamera mtc in vessel.FindPartModulesImplementing<ModuleTargetingCamera>())
List<ModuleTargetingCamera>.Enumerator mtc = vessel.FindPartModulesImplementing<ModuleTargetingCamera>().GetEnumerator();
while (mtc.MoveNext())
{
if(mtc.cameraEnabled)
if(mtc.Current && mtc.Current.cameraEnabled)
{
mtc.EnableCamera();
return mtc;
mtc.Current.EnableCamera();
return mtc.Current;
}
}
mtc.Dispose();

return null;
}
Expand Down Expand Up @@ -316,10 +322,12 @@ public override void OnStart (StartState state)
DelayedEnable();
}

foreach(MissileFire wm in vessel.FindPartModulesImplementing<MissileFire>())
{
wm.targetingPods.Add(this);
List<MissileFire>.Enumerator wm = vessel.FindPartModulesImplementing<MissileFire>().GetEnumerator();
while (wm.MoveNext())
{
wm.Current.targetingPods.Add(this);
}
wm.Dispose();
}
}

Expand Down Expand Up @@ -1067,10 +1075,12 @@ void SendGPS()

void SlaveTurrets()
{
foreach (ModuleTargetingCamera mtc in vessel.FindPartModulesImplementing<ModuleTargetingCamera>())
{
mtc.slaveTurrets = false;
List<ModuleTargetingCamera>.Enumerator mtc = vessel.FindPartModulesImplementing<ModuleTargetingCamera>().GetEnumerator();
while (mtc.MoveNext())
{
mtc.Current.slaveTurrets = false;
}
mtc.Dispose();

if(weaponManager && weaponManager.vesselRadarData)
{
Expand All @@ -1082,10 +1092,12 @@ void SlaveTurrets()

void UnslaveTurrets()
{
foreach (ModuleTargetingCamera mtc in vessel.FindPartModulesImplementing<ModuleTargetingCamera>())
{
mtc.slaveTurrets = false;
List<ModuleTargetingCamera>.Enumerator mtc = vessel.FindPartModulesImplementing<ModuleTargetingCamera>().GetEnumerator();
while (mtc.MoveNext())
{
mtc.Current.slaveTurrets = false;
}
mtc.Dispose();

if(weaponManager && weaponManager.vesselRadarData)
{
Expand Down
15 changes: 9 additions & 6 deletions BDArmory/Parts/TargetingCamera.cs
@@ -1,4 +1,5 @@
using BDArmory.UI;
using System.Collections.Generic;
using UnityEngine;

namespace BDArmory.Parts
Expand Down Expand Up @@ -95,20 +96,22 @@ void VesselChange(Vessel v)
}

bool moduleFound = false;
foreach(ModuleTargetingCamera mtc in v.FindPartModulesImplementing<ModuleTargetingCamera>())
{
Debug.Log ("[BDArmory] : Vessel switched to vessel with targeting camera. Refreshing camera state.");
List<ModuleTargetingCamera>.Enumerator mtc = v.FindPartModulesImplementing<ModuleTargetingCamera>().GetEnumerator();
while (mtc.MoveNext())
{
Debug.Log ("[BDArmory] : Vessel switched to vessel with targeting camera. Refreshing camera state.");

if(mtc.cameraEnabled)
if(mtc.Current.cameraEnabled)
{
mtc.DelayedEnable();
mtc.Current.DelayedEnable();
}
else
{
mtc.DisableCamera();
mtc.Current.DisableCamera();
}
moduleFound = true;
}
mtc.Dispose();

if(!moduleFound)
{
Expand Down
17 changes: 10 additions & 7 deletions BDArmory/Radar/RadarUtils.cs
Expand Up @@ -217,10 +217,6 @@ public static float RenderVesselRadarSnapshot(Vessel v, Transform t, bool inEdit

SetupResources();

//move vessel up for clear rendering shot (only if outside editor and thus vessel is a real vessel)
if (v.id != Guid.Empty)
v.SetPosition(v.transform.position + presentationPosition);

Bounds vesselbounds = CalcVesselBounds(v, t);
if (BDArmorySettings.DRAW_DEBUG_LABELS)
{
Expand All @@ -229,6 +225,13 @@ public static float RenderVesselRadarSnapshot(Vessel v, Transform t, bool inEdit
Debug.Log("[BDArmory]: - size: " + vesselbounds.size + ", magnitude: " + vesselbounds.size.magnitude);
}

if (vesselbounds.size == Vector3.zero)
return 0f;

//move vessel up for clear rendering shot (only if outside editor and thus vessel is a real vessel)
if (v.id != Guid.Empty)
v.SetPosition(v.transform.position + presentationPosition);

// pass1: frontal
radarCam.transform.position = vesselbounds.center + t.up * radarDistance;
radarCam.transform.LookAt(vesselbounds.center);
Expand Down Expand Up @@ -850,9 +853,9 @@ public static Vector3 GuardScanInDirection(MissileFire myWpnManager, float direc

if(Vector3.Dot(vesselDirection, lookDirection) < 0) continue;

float vesselDistance = (vessel.transform.position - position).magnitude;
float vesselDistance = (vessel.transform.position - position).sqrMagnitude;

if(vesselDistance < maxDistance && Vector3.Angle(vesselProjectedDirection, lookDirection) < fov / 2 && Vector3.Angle(vessel.transform.position-position, -myWpnManager.transform.forward) < myWpnManager.guardAngle/2)
if(vesselDistance < maxDistance*maxDistance && Vector3.Angle(vesselProjectedDirection, lookDirection) < fov / 2 && Vector3.Angle(vessel.transform.position-position, -myWpnManager.transform.forward) < myWpnManager.guardAngle/2)
{
//Debug.Log("Found vessel: " + vessel.vesselName);
if(TerrainCheck(referenceTransform.position, vessel.transform.position)) continue; //blocked by terrain
Expand Down Expand Up @@ -910,7 +913,7 @@ public static Vector3 GuardScanInDirection(MissileFire myWpnManager, float direc
if(!weapon.recentlyFiring) continue;
if(Vector3.Dot(weapon.fireTransforms[0].forward, vesselDirection) > 0) continue;

if(Vector3.Angle(weapon.fireTransforms[0].forward, -vesselDirection) < 6500 / vesselDistance && (!results.firingAtMe || (weapon.vessel.ReferenceTransform.position - position).magnitude < (results.threatPosition - position).magnitude))
if(Vector3.Angle(weapon.fireTransforms[0].forward, -vesselDirection) < 6500 / vesselDistance && (!results.firingAtMe || (weapon.vessel.ReferenceTransform.position - position).sqrMagnitude < (results.threatPosition - position).sqrMagnitude))
{
results.firingAtMe = true;
results.threatPosition = weapon.vessel.transform.position;
Expand Down

0 comments on commit 50155ce

Please sign in to comment.