コード例 #1
0
        /*public Vessel getSink()
         * {
         *  if (sinkTarget == ShuntTarget.CelestialBody)
         *  {
         *      return null;
         *  }
         *  else if (sinkTarget == ShuntTarget.CraftTarget && typeof(Vessel).IsInstanceOfType(vessel.targetObject))
         *  {
         *      return (Vessel)vessel.targetObject;
         *  }
         *  else if(sinkTarget == ShuntTarget.NearestVessel)
         *  {
         *      List<Vessel> sortedLoadedVessels = FlightGlobals.FindNearestVesselWhere(part.transform.position, vessel => vessel.loaded);
         *      if (sinkTarget == ShuntTarget.CraftTarget || sourceTarget == ShuntTarget.CraftTarget)
         *      {
         *          if (sortedLoadedVessels.Count < 3)
         *          {
         *              return null;
         *          }
         *          else
         *          {
         *
         *          }
         *      }
         *          if (sortedLoadedVessels.Count < 2)
         *      {
         *          return null;
         *      }
         *      else
         *      {
         *          return FlightGlobals.FindNearestVesselWhere(part.transform.position, vessel => vessel.loaded)[1];
         *      }
         *  }
         * }*/

        /*public float getTargetDistance()
         * {
         *  if(sinkTarget == ShuntTarget.CelestialBody)
         *  {
         *      return (float)vessel.radarAltitude;
         *  }
         *  else if(sinkTarget == ShuntTarget.CraftTarget)
         *  {
         *      return (getSink().transform.position - part.transform.position).magnitude;
         *  }
         *  else
         *  {
         *      return (FlightGlobals.FindNearestVesselWhere(part.transform.position, vessel => vessel.loaded)[1].transform.position - part.transform.position).magnitude;
         *  }
         * }*/

        public void updateForceables()
        {
            if (sourceTarget == ShuntTarget.Self)
            {
                sourceValid = true;
                sourceForceable.wrap(part);
            }
            else if (sourceTarget == ShuntTarget.CelestialBody)
            {
                sourceValid = true;
                sourceForceable.wrap();
            }
            else if (sourceTarget == ShuntTarget.CraftTarget && typeof(Vessel).IsInstanceOfType(vessel.targetObject))
            {
                sourceValid = true;
                sourceForceable.wrap((Vessel)vessel.targetObject);
            }
            else if (sourceTarget == ShuntTarget.NearestVessel)
            {
                List <Vessel> sortedLoadedVessels = FlightGlobals.FindNearestVesselWhere(part.transform.position, vessel => vessel.loaded);
                if (sinkTarget == ShuntTarget.CraftTarget)
                {
                    if (sortedLoadedVessels.Count < 3)
                    {
                        sourceValid = false;
                    }
                    else
                    {
                        if (sortedLoadedVessels[1] != (Vessel)vessel.targetObject)
                        {
                            sourceValid = true;
                            sourceForceable.wrap(sortedLoadedVessels[1]);
                        }
                        else
                        {
                            sourceValid = true;
                            sourceForceable.wrap(sortedLoadedVessels[2]);
                        }
                    }
                }
                if (sortedLoadedVessels.Count < 2)
                {
                    sourceValid = false;
                }
                else
                {
                    sourceValid = true;
                    sourceForceable.wrap(sortedLoadedVessels[1]);
                }
            }
            else
            {
                sourceValid = false;
            }

            if (sinkTarget == ShuntTarget.Self)
            {
                sinkValid = true;
                sinkForceable.wrap(part);
            }
            else if (sinkTarget == ShuntTarget.CelestialBody)
            {
                sinkValid = true;
                sinkForceable.wrap();
            }
            else if (sinkTarget == ShuntTarget.CraftTarget && typeof(Vessel).IsInstanceOfType(vessel.targetObject))
            {
                sinkValid = true;
                sinkForceable.wrap((Vessel)vessel.targetObject);
            }
            else if (sinkTarget == ShuntTarget.NearestVessel)
            {
                List <Vessel> sortedLoadedVessels = FlightGlobals.FindNearestVesselWhere(part.transform.position, vessel => vessel.loaded);
                if (sourceTarget == ShuntTarget.CraftTarget)
                {
                    if (sortedLoadedVessels.Count < 3)
                    {
                        sinkValid = false;
                    }
                    else
                    {
                        if (sortedLoadedVessels[1] != (Vessel)vessel.targetObject)
                        {
                            sinkValid = true;
                            sinkForceable.wrap(sortedLoadedVessels[1]);
                        }
                        else
                        {
                            sinkValid = true;
                            sinkForceable.wrap(sortedLoadedVessels[2]);
                        }
                    }
                }
                if (sortedLoadedVessels.Count < 2)
                {
                    sinkValid = false;
                }
                else
                {
                    sinkValid = true;
                    sinkForceable.wrap(sortedLoadedVessels[1]);
                }
            }
            else
            {
                sinkValid = false;
            }
        }