using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System;
using Random = UnityEngine.Random;
namespace BoatAttack
{
///
/// Very barebones waypoint system
///
[Serializable]
public class WaypointGroup : MonoBehaviour
{
public static WaypointGroup Instance = null;
public Color waypointColour = Color.yellow;
public bool loop = false;
public bool reverse = false;
public float nextWPradius = 5f;
[SerializeField] public List WPs = new List();
private int curWpID;
// Use this for initialization
void Awake()
{
Instance = this;
if(reverse)
WPs.Reverse();
}
[Serializable]
public class Waypoint
{
public Vector3 point;
public float WPradius;
public Waypoint(Vector3 position, float radius)
{
point = position;
WPradius = radius;
}
}
public void CreateWaypoint()
{
Vector3 Pos = gameObject.transform.position;
float Rad = nextWPradius;
Waypoint WP = new Waypoint(Pos, Rad);
WPs.Add(WP);
curWpID++;
}
public Vector3 GetWaypointDestination(int index)
{
Waypoint wp;
if (index > 0 && index < WPs.Count - 1)
wp = WPs[index];
else
wp = null;
return wp.point + (Random.insideUnitSphere * wp.WPradius);
}
public Waypoint GetWaypoint(int index)
{
return WPs[index];
}
public void DeleteLastWaypoint()
{
WPs.RemoveAt(curWpID);
curWpID--;
}
public void DeleteAllWaypoints()
{
WPs.Clear();
curWpID = 0;
}
void OnDrawGizmosSelected()
{
Gizmos.color = waypointColour;
Gizmos.DrawSphere(gameObject.transform.position, nextWPradius);
for (int i = 0; i < WPs.Count; i++)
{
Gizmos.DrawWireSphere(WPs[i].point, WPs[i].WPradius);
#if UnityEditor
UnityEditor.Handles.Label(WPs[i].point, "WP " + WPs[i].WPnumber);
#endif
if (i < WPs.Count - 1)
{
Gizmos.DrawLine(WPs[i].point, WPs[i + 1].point);
}
else if (loop)
{
Gizmos.color = Color.red;
Gizmos.DrawLine(WPs[i].point, WPs[0].point);
}
}
}
}
}