public override void OnStart(StartState state) { base.OnStart(state); //Find servo controllers List <IRotationController> controllers = this.part.FindModulesImplementing <IRotationController>(); servoControllers = controllers.ToArray(); //Setup servo GUI & create home sequence if needed for (int index = 0; index < servoControllers.Length; index++) { servoControllers[index].HideGUI(); } //Check to see if we need to create the home sequence createHomeSequence(); //If we're in the middle of playing a sequence, then start working the current snapshot. managerState = (EServoManagerStates)managerStateID; if (managerState == EServoManagerStates.PlayingSequence && sequenceID < sequences.Count) { snapshots = sequences[sequenceID].GetNodes(SNAPSHOT_NODE); PlaySnapshot(snapshotID); } }
public void FixedUpdate() { Events["ToggleGUI"].guiActive = true; //A sequence consists of a series of snapshots. //A snapshot is done when all the contollers are locked. //Play each snapshot in succession until we reach the end. bool playNextSnapshot = true; bool servoIsMoving = false; for (int index = 0; index < servoControllers.Length; index++) { if (servoControllers[index].IsMoving()) { playNextSnapshot = false; servoIsMoving = true; break; } } //Play servo sound if (!string.IsNullOrEmpty(runningEffectName) && HighLogic.LoadedSceneIsFlight) { this.part.Effect(runningEffectName, servoIsMoving == true ? 1.0f : -1.0f, -1); } //Nothing more to do if we're not playing a snapshot. if (managerState == EServoManagerStates.Locked) { return; } //If all servo controllers have completed their movement and we're just playing one //snapshot, then we're done. if (playNextSnapshot && managerState == EServoManagerStates.PlayingSnapshot) { managerState = EServoManagerStates.Locked; return; } //If all servo controllers have completed their movement, then play the next snapshot else if (playNextSnapshot) { Debug.Log("[WBIServoManager] - Snapshot playback complete."); snapshotID += 1; //Stay in bounds... if (snapshotID <= snapshots.Length - 1) { PlaySnapshot(snapshotID); } //We're done, no more snapshots to play. else { snapshotID = -1; managerState = EServoManagerStates.Locked; Debug.Log("[WBIServoManager] - Sequence complete."); } } }
/// <summary> /// Plays a list of supplied snapshots /// </summary> /// <param name="snapshotList">A list containing SNAPSHOT ConfigNode objects to play.</param> public void PlaySnapshot(List <ConfigNode> snapshotList) { managerState = EServoManagerStates.PlayingSequence; snapshotID = 0; snapshots = snapshotList.ToArray(); PlaySnapshot(snapshotID); }
public void FixedUpdate() { if (managerState == EServoManagerStates.Locked) { return; } bool playNextSnapshot = true; //A sequence consists of a series of snapshots. //A snapshot is done when all the contollers are locked. //Play each snapshot in succession until we reach the end. for (int index = 0; index < servoControllers.Length; index++) { if (servoControllers[index].IsMoving()) { playNextSnapshot = false; break; } } //If all servo controllers have completed their movement and we're just playing one //snapshot, then we're done. if (playNextSnapshot && managerState == EServoManagerStates.PlayingSnapshot) { managerState = EServoManagerStates.Locked; managerStateID = (int)managerState; return; } //If all servo controllers have completed their movement, then play the next snapshot else if (playNextSnapshot) { snapshotID += 1; //Stay in bounds... if (snapshotID <= snapshots.Length - 1) { PlaySnapshot(snapshotID); } //We're done, no more snapshots to play. else { snapshotID = -1; managerState = EServoManagerStates.Locked; managerStateID = (int)managerState; } } }
/// <summary> /// Plays a single snapshot /// </summary> /// <param name="snapshotNode">A SNAPSHOT ConfigNode containing servo state information</param> public void PlaySnapshot(ConfigNode snapshotNode) { managerState = EServoManagerStates.PlayingSnapshot; currentSnapshot = snapshotNode; //Set servo data from current snapshot. Make sure the number of controllers match the number of servo data items. snapshotServoData = currentSnapshot.GetNodes(SERVODATA_NODE); if (snapshotServoData.Length == servoControllers.Length) { for (int index = 0; index < servoControllers.Length; index++) { servoControllers[index].SetFromSnapshot(snapshotServoData[index]); } } }
/// <summary> /// Plays the desired sequence. /// </summary> /// <param name="sequenceIndex">An integer containing the desired sequence index.</param> public void PlaySequence(int sequenceIndex) { if (sequenceIndex < 0 || sequenceIndex > sequences.Count) { return; } Debug.Log("[WBIServoManager] - Playing sequence: " + sequences[sequenceIndex].GetValue("name") + " (" + sequenceIndex + ")"); //A sequence consists of a series of snapshots. //A snapshot is done when all the contollers are locked. //Play each snapshot in succession until we reach the end. managerState = EServoManagerStates.PlayingSequence; sequenceID = sequenceIndex; snapshotID = 0; snapshots = sequences[sequenceID].GetNodes(SNAPSHOT_NODE); PlaySnapshot(snapshotID); }
public void PlaySequence(int sequenceIndex) { if (sequenceIndex < 0 || sequenceIndex > sequences.Count) { return; } //A sequence consists of a series of snapshots. //A snapshot is done when all the contollers are locked. //Play each snapshot in succession until we reach the end. managerState = EServoManagerStates.PlayingSequence; managerStateID = (int)managerState; sequenceID = sequenceIndex; snapshotID = 0; snapshots = sequences[sequenceID].GetNodes(SNAPSHOT_NODE); PlaySnapshot(snapshotID); }