using System; using UnityEngine; namespace Pegasus { /// /// Control another pegasus with this trigger. /// public class TriggerControlPegasus : TriggerBase { public PegasusConstants.PoiPegasusTriggerAction m_actionOnStart = PegasusConstants.PoiPegasusTriggerAction.PlayPegasus; public PegasusConstants.PoiPegasusTriggerAction m_actionOnEnd = PegasusConstants.PoiPegasusTriggerAction.StopPegasus; public PegasusManager m_pegasus; public bool m_disabled = false; public bool m_disableAfterActioned = true; /// /// Called when the trigger starts /// /// public override void OnStart(PegasusPoi poi) { if (poi == null) { Debug.LogWarning(string.Format("Poi was not supplied on {0} - exiting", name)); return; } if (m_pegasus == null) { Debug.LogWarning(string.Format("Pegasus was not supplied on {0} - exiting", name)); return; } if (m_disabled) { return; } if (m_triggerAtStart) { switch (m_actionOnStart) { case PegasusConstants.PoiPegasusTriggerAction.PlayPegasus: if (poi.m_manager.m_displayDebug == true) { Debug.Log(string.Format("Started flythrough on {0} from {1}", poi.m_manager.name, poi.name)); } //Stop playback of the calling pegasus if the new one has the same target if (poi.m_manager.m_target != null && m_pegasus.m_target != null) { if (poi.m_manager.m_target.GetInstanceID() == m_pegasus.m_target.GetInstanceID()) { poi.m_manager.StopFlythrough(); } } //And start the new one if (m_pegasus.m_currentState == PegasusConstants.FlythroughState.Paused) { m_pegasus.ResumeFlythrough(); } else { m_pegasus.StartFlythrough(); } if (m_disableAfterActioned) { m_disabled = true; } break; case PegasusConstants.PoiPegasusTriggerAction.PausePegasus: if (poi.m_manager.m_displayDebug == true) { Debug.Log(string.Format("Pausing flythrough on {0} from {1}", poi.m_manager.name, poi.name)); } m_pegasus.PauseFlythrough(); if (m_disableAfterActioned) { m_disabled = true; } break; case PegasusConstants.PoiPegasusTriggerAction.ResumePegasus: if (poi.m_manager.m_displayDebug == true) { Debug.Log(string.Format("Resuming flythrough on {0} from {1}", poi.m_manager.name, poi.name)); } m_pegasus.ResumeFlythrough(); if (m_disableAfterActioned) { m_disabled = true; } break; case PegasusConstants.PoiPegasusTriggerAction.StopPegasus: if (poi.m_manager.m_displayDebug == true) { Debug.Log(string.Format("Stopping flythrough on {0} from {1}", poi.m_manager.name, poi.name)); } m_pegasus.StopFlythrough(); if (m_disableAfterActioned) { m_disabled = true; } break; case PegasusConstants.PoiPegasusTriggerAction.DoNothing: if (poi.m_manager.m_displayDebug == true) { Debug.Log(string.Format("Doing nothing on {0} from {1}", poi.m_manager.name, poi.name)); } break; } } } /// /// Called when the trigger ends /// /// public override void OnEnd(PegasusPoi poi) { if (poi == null) { Debug.LogWarning(string.Format("Poi was not supplied on {0} - exiting", name)); return; } if (m_pegasus == null) { Debug.LogWarning(string.Format("Pegasus was not supplied on {0} - exiting", name)); return; } if (m_disabled) { return; } if (m_triggerAtEnd) { switch (m_actionOnEnd) { case PegasusConstants.PoiPegasusTriggerAction.PlayPegasus: if (poi.m_manager.m_displayDebug == true) { Debug.Log(string.Format("Started flythrough on {0} from {1}", poi.m_manager.name, poi.name)); } //Stop current pegasus (hack) poi.m_manager.StopFlythrough(); if (m_pegasus.m_currentState == PegasusConstants.FlythroughState.Paused) { m_pegasus.ResumeFlythrough(); } else { m_pegasus.StartFlythrough(); } if (m_disableAfterActioned) { m_disabled = true; } break; case PegasusConstants.PoiPegasusTriggerAction.PausePegasus: if (poi.m_manager.m_displayDebug == true) { Debug.Log(string.Format("Pausing flythrough on {0} from {1}", poi.m_manager.name, poi.name)); } m_pegasus.PauseFlythrough(); if (m_disableAfterActioned) { m_disabled = true; } break; case PegasusConstants.PoiPegasusTriggerAction.ResumePegasus: if (poi.m_manager.m_displayDebug == true) { Debug.Log(string.Format("Resuming flythrough on {0} from {1}", poi.m_manager.name, poi.name)); } m_pegasus.ResumeFlythrough(); if (m_disableAfterActioned) { m_disabled = true; } break; case PegasusConstants.PoiPegasusTriggerAction.StopPegasus: if (poi.m_manager.m_displayDebug == true) { Debug.Log(string.Format("Stopping flythrough on {0} from {1}", poi.m_manager.name, poi.name)); } m_pegasus.StopFlythrough(); if (m_disableAfterActioned) { m_disabled = true; } break; case PegasusConstants.PoiPegasusTriggerAction.DoNothing: if (poi.m_manager.m_displayDebug == true) { Debug.Log(string.Format("Doing nothing on {0} from {1}", poi.m_manager.name, poi.name)); } break; } } } } }