You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

207 lines
8.3 KiB
C#

using System;
using UnityEngine;
namespace Pegasus
{
/// <summary>
/// Control another pegasus with this trigger.
/// </summary>
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;
/// <summary>
/// Called when the trigger starts
/// </summary>
/// <param name="poi"></param>
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;
}
}
}
/// <summary>
/// Called when the trigger ends
/// </summary>
/// <param name="poi"></param>
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;
}
}
}
}
}