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; }
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; }
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(); } } }