using System.Collections.Generic;
using UnityEngine;
#if UNITY_EDITOR
using UnityEditor;
#endif
namespace Pegasus
{
///
/// Captures a pegasus path
///
[System.Serializable]
public class PegasusPath : ScriptableObject
{
///
/// The points that are stored in a pegasus path
///
[System.Serializable]
public class PegasusPoint
{
public Vector3 m_location;
public Vector3 m_rotationEuler;
public Vector3 m_dofDistance;
public PegasusPoint(Vector3 location, Vector3 rotationEuler)
{
m_location = location;
m_rotationEuler = rotationEuler;
}
}
//The default speed to create at
public float m_defaultSpeed = 8f;
//The pegasus points stored in this path
public List m_path = new List();
///
/// Create a new pegasus path
///
/// New pegasus path
public static PegasusPath CreatePegasusPath()
{
PegasusPath pp = ScriptableObject.CreateInstance();
#if UNITY_EDITOR
string path = "Assets/PegasusPath.asset";
AssetDatabase.CreateAsset(pp, path);
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
#endif
return pp;
}
public void AddPoint(GameObject go)
{
if (go == null)
{
return;
}
Vector3 location = go.transform.position;
Vector3 rotation = go.transform.eulerAngles;
PegasusPoint pp = null;
if (m_path.Count > 0)
{
pp = m_path[m_path.Count - 1];
if (pp.m_location == location && pp.m_rotationEuler != rotation)
{
return;
}
}
m_path.Add(new PegasusPoint(location, rotation));
#if UNITY_EDITOR
EditorUtility.SetDirty(this);
#endif
}
public void ClearPath()
{
m_path.Clear();
#if UNITY_EDITOR
EditorUtility.SetDirty(this);
#endif
}
public void CreatePegasusFromPath()
{
//Exit if nothing to do
if (m_path.Count == 0)
{
return;
}
GameObject pegasusGo = new GameObject("Pegasus Manager");
PegasusManager pegasus = pegasusGo.AddComponent();
pegasus.SetDefaults();
pegasus.m_heightCheckType = PegasusConstants.HeightCheckType.None;
pegasus.m_minHeightAboveTerrain = 0.1f;
pegasus.m_flythroughType = PegasusConstants.FlythroughType.SingleShot;
PegasusPoint p = null;
for (int i = 0; i < m_path.Count; i++)
{
p = m_path[i];
pegasus.AddPOI(p.m_location, p.m_location + Quaternion.Euler(p.m_rotationEuler) * (Vector3.forward * 2f));
}
pegasus.SetSpeed(m_defaultSpeed);
#if UNITY_EDITOR
Selection.activeObject = pegasusGo;
#endif
}
}
}