public override void OnModuleDisabled() { core.rcs.users.Remove(this); core.attitude.attitudeDeactivate(); dockingStep = DockingStep.OFF; drawBoundingBox = false; }
void InitDocking() { lastTarget = core.target.Target; try { vesselBoundingBox = vessel.GetBoundingBox(); targetBoundingBox = lastTarget.GetVessel().GetBoundingBox(); targetSize = targetBoundingBox.size.magnitude; if (!overrideSafeDistance) { safeDistance = vesselBoundingBox.size.magnitude + targetSize + 0.5f; } else { safeDistance = (float)overridenSafeDistance.val; } if (core.target.Target is ModuleDockingNode) { acquireRange = ((ModuleDockingNode)core.target.Target).acquireRange * 0.5; } else { acquireRange = 0.25; } } catch (Exception e) { print(e); } if (zSep < 0) //we're behind the target { dockingStep = DockingStep.WRONG_SIDE_BACKING_UP; } else if (lateralSep.magnitude > dockingcorridorRadius) // in front but far from docking axis { if (zSep < targetSize) { dockingStep = DockingStep.BACKING_UP; } else { dockingStep = DockingStep.MOVING_TO_START; } } else { dockingStep = DockingStep.DOCKING; } }
void InitDocking() { lastTarget = core.target.Target; try { Vector3Pair vesselBoundingBox = vessel.GetBoundingBox(); Vector3Pair targetBoundingBox = lastTarget.GetVessel().GetBoundingBox(); targetSize = Mathf.Max(targetBoundingBox.p1.magnitude, targetBoundingBox.p2.magnitude); safeDistance = Mathf.Max(vesselBoundingBox.p1.magnitude, vesselBoundingBox.p2.magnitude) + targetSize; if (core.target.Target is ModuleDockingNode) { acquireRange = ((ModuleDockingNode)core.target.Target).acquireRange * 0.5; } else { acquireRange = 0.25; } } catch (Exception e) { print(e); } if (zSep < 0) //we're behind the target { dockingStep = DockingStep.WRONG_SIDE_BACKING_UP; } else if (lateralSep.magnitude > dockingcorridorRadius) // in front but far from docking axis { if (zSep < targetSize) { dockingStep = DockingStep.BACKING_UP; } else { dockingStep = DockingStep.MOVING_TO_START; } } else { dockingStep = DockingStep.DOCKING; } }
void InitDocking() { lastTarget = core.target.Target; try { Vector3Pair vesselBoundingBox = vessel.GetBoundingBox(); Vector3Pair targetBoundingBox = lastTarget.GetVessel().GetBoundingBox(); targetSize = Mathf.Max(targetBoundingBox.p1.magnitude, targetBoundingBox.p2.magnitude); safeDistance = Mathf.Max(vesselBoundingBox.p1.magnitude, vesselBoundingBox.p2.magnitude) + targetSize; if (core.target.Target is ModuleDockingNode) acquireRange = ((ModuleDockingNode)core.target.Target).acquireRange * 0.5; else acquireRange = 0.25; } catch (Exception e) { print(e); } if (zSep < 0) //we're behind the target dockingStep = DockingStep.WRONG_SIDE_BACKING_UP; else if (lateralSep.magnitude > dockingcorridorRadius) // in front but far from docking axis if (zSep < targetSize) dockingStep = DockingStep.BACKING_UP; else dockingStep = DockingStep.MOVING_TO_START; else dockingStep = DockingStep.DOCKING; }
public override void OnModuleEnabled() { core.rcs.users.Add(this); core.attitude.users.Add(this); dockingStep = DockingStep.INIT; }
public override void OnModuleDisabled() { core.rcs.users.Remove(this); core.attitude.attitudeDeactivate(); dockingStep = DockingStep.OFF; }
public override void OnFixedUpdate() { UpdateDistance(); switch (dockingStep) { case DockingStep.INIT: if (!core.target.NormalTargetExists) { dockingStep = DockingStep.OFF; users.Clear(); return; } InitDocking(); break; case DockingStep.WRONG_SIDE_BACKING_UP: if (-zSep > safeDistance) dockingStep = DockingStep.WRONG_SIDE_LATERAL; break; case DockingStep.WRONG_SIDE_LATERAL: if (lateralSep.magnitude > safeDistance) dockingStep = DockingStep.WRONG_SIDE_SWITCHSIDE; break; case DockingStep.WRONG_SIDE_SWITCHSIDE: if (zSep > 0) dockingStep = DockingStep.BACKING_UP; break; case DockingStep.BACKING_UP: if (zSep > targetSize) dockingStep = DockingStep.MOVING_TO_START; break; case DockingStep.MOVING_TO_START: if (lateralSep.magnitude < dockingcorridorRadius) dockingStep = DockingStep.DOCKING; break; case DockingStep.DOCKING: if (zSep < acquireRange) { dockingStep = DockingStep.OFF; users.Clear(); enabled = false; } break; default: break; } }
void EndDocking() { dockingStep = DockingStep.OFF; users.Clear(); enabled = false; }
public override void OnFixedUpdate() { if (!core.target.NormalTargetExists) { EndDocking(); return; } UpdateDistance(); switch (dockingStep) { case DockingStep.INIT: InitDocking(); break; case DockingStep.WRONG_SIDE_BACKING_UP: if (-zSep > safeDistance) { dockingStep = DockingStep.WRONG_SIDE_LATERAL; } break; case DockingStep.WRONG_SIDE_LATERAL: if (lateralSep.magnitude > safeDistance) { dockingStep = DockingStep.WRONG_SIDE_SWITCHSIDE; } break; case DockingStep.WRONG_SIDE_SWITCHSIDE: if (zSep > 0) { dockingStep = DockingStep.BACKING_UP; } break; case DockingStep.BACKING_UP: if (zSep > targetSize) { dockingStep = DockingStep.MOVING_TO_START; } break; case DockingStep.MOVING_TO_START: if (lateralSep.magnitude < dockingcorridorRadius) { dockingStep = DockingStep.DOCKING; } break; case DockingStep.DOCKING: if (zSep < acquireRange) { EndDocking(); } // Added checks to make sure we're still good to dock. else if (lateralSep.magnitude > dockingcorridorRadius) // far from docking axis { if (zSep < 0) //we're behind the target { dockingStep = DockingStep.WRONG_SIDE_BACKING_UP; } else if (lateralSep.magnitude > dockingcorridorRadius) // in front but far from docking axis { if (zSep < 1) { dockingStep = DockingStep.MOVING_TO_START; } } } break; default: break; } }
void InitDocking() { lastTarget = core.target.Target; try { vesselBoundingBox = vessel.GetBoundingBox(); targetBoundingBox = lastTarget.GetVessel().GetBoundingBox(); if (!overrideTargetSize) { targetSize = targetBoundingBox.size.magnitude; } else { targetSize = (float)overridenTargetSize.val; } if (!overrideSafeDistance) { safeDistance = vesselBoundingBox.size.magnitude + targetSize + 0.5f; } else { safeDistance = (float)overridenSafeDistance.val; } if (core.target.Target is ModuleDockingNode) { acquireRange = ((ModuleDockingNode)core.target.Target).acquireRange * 0.5; } else { acquireRange = 0.25; } } catch (Exception e) { Log.err(e, this); } if (zSep < 0) //we're behind the target { // If we're more than half our own bounding box size behind the target port then use wrong side behavior // Still needs improvement. The reason for these changes is that to prevent wrong side behavior when our // port slipped behind the target by a fractional amount. The result is that rather than avoiding the // target ship we end up trying to pass right through it. // What's really needed here is code that compares bounding box positions to determine if we just try to back up or change sides completely. if (Math.Abs(zSep) > vesselBoundingBox.size.magnitude * 0.5f) { dockingStep = DockingStep.WRONG_SIDE_BACKING_UP; } else { dockingStep = DockingStep.BACKING_UP; // Just back straight up. } } else if (lateralSep.magnitude > dockingcorridorRadius) // in front but far from docking axis { if (zSep < targetSize) { dockingStep = DockingStep.BACKING_UP; } else { dockingStep = DockingStep.MOVING_TO_START; } } else { dockingStep = DockingStep.DOCKING; } }
public override void OnFixedUpdate() { if (!core.target.NormalTargetExists) { EndDocking(); return; } UpdateDistance(); switch (dockingStep) { case DockingStep.INIT: InitDocking(); break; case DockingStep.WRONG_SIDE_BACKING_UP: if (-zSep > safeDistance) { dockingStep = DockingStep.WRONG_SIDE_LATERAL; } break; case DockingStep.WRONG_SIDE_LATERAL: if (lateralSep.magnitude > safeDistance) { dockingStep = DockingStep.WRONG_SIDE_SWITCHSIDE; } break; case DockingStep.WRONG_SIDE_SWITCHSIDE: if (zSep > 0) { dockingStep = DockingStep.BACKING_UP; } break; case DockingStep.BACKING_UP: if (zSep > targetSize) { dockingStep = DockingStep.MOVING_TO_START; } break; case DockingStep.MOVING_TO_START: if (lateralSep.magnitude < dockingcorridorRadius) { dockingStep = DockingStep.DOCKING; } break; case DockingStep.DOCKING: if (zSep < acquireRange) { EndDocking(); } break; default: break; } }
void InitDocking() { lastTarget = core.target.Target; try { vesselBoundingBox = vessel.GetBoundingBox(); targetBoundingBox = lastTarget.GetVessel().GetBoundingBox(); if (!overrideTargetSize) targetSize = targetBoundingBox.size.magnitude; else targetSize = (float)overridenTargetSize.val; if (!overrideSafeDistance) safeDistance = vesselBoundingBox.size.magnitude + targetSize + 0.5f; else safeDistance = (float)overridenSafeDistance.val; if (core.target.Target is ModuleDockingNode) acquireRange = ((ModuleDockingNode)core.target.Target).acquireRange * 0.5; else acquireRange = 0.25; } catch (Exception e) { print(e); } if (zSep < 0) //we're behind the target dockingStep = DockingStep.WRONG_SIDE_BACKING_UP; else if (lateralSep.magnitude > dockingcorridorRadius) // in front but far from docking axis if (zSep < targetSize) dockingStep = DockingStep.BACKING_UP; else dockingStep = DockingStep.MOVING_TO_START; else dockingStep = DockingStep.DOCKING; }
public override void OnFixedUpdate() { if (!core.target.NormalTargetExists) { EndDocking(); return; } UpdateDistance(); switch (dockingStep) { case DockingStep.INIT: InitDocking(); break; case DockingStep.WRONG_SIDE_BACKING_UP: if (-zSep > safeDistance) dockingStep = DockingStep.WRONG_SIDE_LATERAL; break; case DockingStep.WRONG_SIDE_LATERAL: if (lateralSep.magnitude > safeDistance) dockingStep = DockingStep.WRONG_SIDE_SWITCHSIDE; break; case DockingStep.WRONG_SIDE_SWITCHSIDE: if (zSep > 0) dockingStep = DockingStep.BACKING_UP; break; case DockingStep.BACKING_UP: if (zSep > targetSize) dockingStep = DockingStep.MOVING_TO_START; break; case DockingStep.MOVING_TO_START: if (lateralSep.magnitude < dockingcorridorRadius) dockingStep = DockingStep.DOCKING; break; case DockingStep.DOCKING: if (zSep < acquireRange) { EndDocking(); } // Added checks to make sure we're still good to dock. else if (lateralSep.magnitude > dockingcorridorRadius) // far from docking axis { if (zSep < 0) //we're behind the target dockingStep = DockingStep.WRONG_SIDE_BACKING_UP; else if (lateralSep.magnitude > dockingcorridorRadius) // in front but far from docking axis { if (zSep < 1) dockingStep = DockingStep.MOVING_TO_START; } } break; default: break; } }