summaryrefslogtreecommitdiff
path: root/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/ExampleScenes/Scenes/LocalAvoidance/RVOAgentPlacer.cs
blob: 03dbeddf51f1b1ca0708136933cdb04a6eaafa64 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
using UnityEngine;
using System.Collections;

namespace Pathfinding.Examples {
	/// <summary>
	/// Places ROV agents in circles.
	/// Used in a example scene
	/// </summary>
	[HelpURL("https://arongranberg.com/astar/documentation/stable/rvoagentplacer.html")]
	public class RVOAgentPlacer : MonoBehaviour {
		public int agents = 100;

		public float ringSize = 100;
		public LayerMask mask;

		public GameObject prefab;

		public Vector3 goalOffset;

		public float repathRate = 1;

		// Use this for initialization
		IEnumerator Start () {
			yield return null;

			for (int i = 0; i < agents; i++) {
				float angle = ((float)i / agents)*(float)System.Math.PI*2;

				Vector3 pos = new Vector3((float)System.Math.Cos(angle), 0, (float)System.Math.Sin(angle))*ringSize;
				Vector3 antipodal = -pos + goalOffset;

				GameObject go = GameObject.Instantiate(prefab, Vector3.zero, Quaternion.Euler(0, angle+180, 0)) as GameObject;
				RVOExampleAgent ag = go.GetComponent<RVOExampleAgent>();

				if (ag == null) {
					Debug.LogError("Prefab does not have an RVOExampleAgent component attached");
					yield break;
				}

				//ag.radius = radius;
				go.transform.parent = transform;
				go.transform.position = pos;

				ag.repathRate = repathRate;
				ag.SetTarget(antipodal);

				ag.SetColor(GetColor(angle));
			}
		}

		const float rad2Deg = 360.0f/ ((float)System.Math.PI*2);

		public Color GetColor (float angle) {
			return AstarMath.HSVToRGB(angle * rad2Deg, 0.8f, 0.6f);
		}
	}
}