示例#1
0
 private void ResetXferProcess()
 {
   IvaDelayActive = false;
   IvaPortraitDelay = 0;
   FromCrewMember = ToCrewMember = null;
   SMAddon.smController.RespawnCrew();
   FlightEVA.fetch.EnableInterface();
   CameraManager.ICameras_ResetAll();
   CrewXferState = CrewXFERState.Off;
   CrewXferActive = IsSeat2SeatXfer = IsStockXfer = false;
 }
示例#2
0
 internal void CrewTransferAbort()
 {
   if (SMSettings.RealismMode)
   {
     SMAddon.source2.Stop();
     SMAddon.source3.Play();
   }
   SMAddon.elapsed = 0;
   SMAddon.smController.CrewTransfer.IvaDelayActive = false;
   SMAddon.smController.CrewTransfer.IvaPortraitDelay = 0;
   SMAddon.smController.CrewTransfer.FromCrewMember = SMAddon.smController.CrewTransfer.ToCrewMember = null;
   CrewXferState = CrewXFERState.Off;
   _crewXferActive = IsSeat2SeatXfer = false;
   FlightEVA.fetch.EnableInterface();
   CameraManager.ICameras_ResetAll();
   IsStockXfer = false;
 }
示例#3
0
    internal void CrewTransferProcess()
    {
      try
      {
        if (CrewXferActive)
        {
          if (CameraManager.Instance.currentCameraMode == CameraManager.CameraMode.IVA)
          {
            ScreenMessages.PostScreenMessage(string.Format("<color=orange>Cannot go IVA.  An SM Crew Xfer is in progress</color>"), 4f);
            CameraManager.Instance.SetCameraMode(CameraManager.CameraMode.Flight);
          }

          Part PartFrom = FromPart;
          Part PartTo = ToPart;
          ProtoCrewMember pKerbal = FromCrewMember;

          switch (CrewXferState)
          {
            case CrewXFERState.Off:
              // We're just starting loop, so set some evnironment stuff.
              timestamp = DateTime.Now;
              CrewXferState = CrewXFERState.Start;

              if (SMSettings.RealismMode)
              {
                // Default sound license: CC-By-SA
                // http://www.freesound.org/people/adcbicycle/sounds/14214/
                string path1 = SMSettings.CrewSoundStart != null ? SMSettings.CrewSoundStart : "ShipManifest/Sounds/14214-1";
                string path2 = SMSettings.CrewSoundRun != null ? SMSettings.CrewSoundRun : "ShipManifest/Sounds/14214-2";
                string path3 = SMSettings.CrewSoundStop != null ? SMSettings.CrewSoundStop : "ShipManifest/Sounds/14214-3";

                SMAddon.LoadSounds("Crew", path1, path2, path3, SMSettings.CrewSoundVol);
              }
              break;

            case CrewXFERState.Start:

              SMAddon.elapsed += (DateTime.Now - timestamp).TotalSeconds;

              if (SMSettings.RealismMode)
              {
                // Play run sound when start sound is nearly done. (repeats)
                if (SMAddon.elapsed >= SMAddon.source1.clip.length - 0.25)
                {
                  Utilities.LogMessage("source2.play():  started.", "info", SMSettings.VerboseLogging);
                  SMAddon.source2.Play();
                  SMAddon.elapsed = 0;
                  CrewXferState = CrewXFERState.Transfer;
                }
              }
              else
              {
                CrewXferState = CrewXFERState.Transfer;
              }
              break;

            case CrewXFERState.Transfer:

              SMAddon.elapsed += (DateTime.Now - timestamp).TotalSeconds;

              if (SMSettings.RealismMode)
              {
                // wait for movement to end...
                if (SMAddon.elapsed >= CrewXferDelaySec || (IsSeat2SeatXfer && SMAddon.elapsed > Seat2SeatXferDelaySec))
                  CrewXferState = CrewXFERState.Stop;
              }
              else
              {
                if (SMAddon.elapsed > 1)
                  CrewXferState = CrewXFERState.Stop;
              }
              break;

            case CrewXFERState.Stop:

              // Spawn crew in parts and in vessel.
              if (PartFrom == null)
                PartFrom = PartTo;
              if (PartTo == null)
                PartTo = PartFrom;

              if (SMSettings.RealismMode)
              {
                // play crew sit.
                SMAddon.source2.Stop();
                SMAddon.source3.Play();
              }
              SMAddon.elapsed = 0;
              CrewTransferAction();
              CrewXferState = CrewXFERState.Portraits;
              IvaDelayActive = true;
              Utilities.LogMessage("CrewTransferProcess:  Updating Portraits...", "info", SMSettings.VerboseLogging);
              break;

            case CrewXFERState.Portraits:

              // Account for crew move callbacks by adding a frame delay for portrait updates after crew move...
              if (IvaDelayActive && IvaPortraitDelay < SMSettings.IvaUpdateFrameDelay)
              {
                IvaPortraitDelay += 1;
              }
              else if ((IvaDelayActive && IvaPortraitDelay >= SMSettings.IvaUpdateFrameDelay) || !IvaDelayActive)
              {
                if (IsStockXfer)
                  ScreenMessages.PostScreenMessage(string.Format("<color=yellow>{0} moved (by SM) to {1}.</color>", FromCrewMember.name, PartTo.partInfo.title), 5f);

                ResetXferProcess();
              }
              break;
          }
          Utilities.LogMessage("Transfer State:  " + TransferCrew.CrewXferState.ToString() + "...", "Info", SMSettings.VerboseLogging);
          if (CrewXferState != CrewXFERState.Off)
            timestamp = DateTime.Now;
          else
            Utilities.LogMessage("CrewTransferProcess:  Complete.", "info", SMSettings.VerboseLogging);
        }
      }
      catch (Exception ex)
      {
        if (!SMAddon.frameErrTripped)
        {
          Utilities.LogMessage("Transfer State:  " + CrewXferState.ToString() + "...", "Error", true);
          Utilities.LogMessage(string.Format(" in CrewTransferProcess (repeating error).  Error:  {0} \r\n\r\n{1}", ex.Message, ex.StackTrace), "Error", true);
          SMAddon.frameErrTripped = true;
          ResetXferProcess();
        }
      }
    }