Пример #1
0
 public override void OnModuleDisabled()
 {
     core.rcs.users.Remove(this);
     core.attitude.attitudeDeactivate();
     dockingStep     = DockingStep.OFF;
     drawBoundingBox = false;
 }
Пример #2
0
        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;
            }
        }
Пример #8
0
 public override void OnModuleEnabled()
 {
     core.rcs.users.Add(this);
     core.attitude.users.Add(this);
     dockingStep = DockingStep.INIT;
 }
Пример #9
0
 void EndDocking()
 {
     dockingStep = DockingStep.OFF;
     users.Clear();
     enabled = false;
 }
Пример #10
0
        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;
            }
        }
Пример #11
0
        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;
        }
 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;
            }

        }