using UnityEngine;
namespace Pathfinding.RVO {
/// Square Obstacle for RVO Simulation.
[AddComponentMenu("Pathfinding/Local Avoidance/Square Obstacle")]
[HelpURL("http://arongranberg.com/astar/documentation/stable/class_pathfinding_1_1_r_v_o_1_1_r_v_o_square_obstacle.php")]
public class RVOSquareObstacle : RVOObstacle {
/// Height of the obstacle
public float height = 1;
/// Size of the square
public Vector2 size = Vector3.one;
/// Center of the square
public Vector2 center = Vector3.zero;
protected override bool StaticObstacle { get { return false; } }
protected override bool ExecuteInEditor { get { return true; } }
protected override bool LocalCoordinates { get { return true; } }
protected override float Height { get { return height; } }
//If UNITY_EDITOR to save a few bytes, these are only needed in the editor
#if UNITY_EDITOR
private Vector2 _size;
private Vector2 _center;
private float _height;
#endif
protected override bool AreGizmosDirty () {
#if UNITY_EDITOR
bool ret = _size != size || _height != height || _center != center;
_size = size;
_center = center;
_height = height;
return ret;
#else
return false;
#endif
}
protected override void CreateObstacles () {
size.x = Mathf.Abs(size.x);
size.y = Mathf.Abs(size.y);
height = Mathf.Abs(height);
var verts = new [] { new Vector3(1, 0, -1), new Vector3(1, 0, 1), new Vector3(-1, 0, 1), new Vector3(-1, 0, -1) };
for (int i = 0; i < verts.Length; i++) {
verts[i].Scale(new Vector3(size.x * 0.5f, 0, size.y * 0.5f));
verts[i] += new Vector3(center.x, 0, center.y);
}
AddObstacle(verts, height);
}
}
}