Example #1
0
        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);
            }
        }
Example #2
0
        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.");
                }
            }
        }
Example #3
0
        /// <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);
        }
Example #4
0
        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;
                }
            }
        }
Example #5
0
        /// <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]);
                }
            }
        }
Example #6
0
        /// <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);
        }
Example #7
0
        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);
        }