public override Vector2 CalculateMove(FlockingObejct flockingobejct, List <Transform> context, Flocking flock) { if (weights.Length != behaviors.Length) { return(Vector2.zero); } Vector2 move = Vector2.zero; for (int i = 0; i < behaviors.Length; i++) { Vector2 partMove = behaviors[i].CalculateMove(flockingobejct, context, flock) * weights[i]; if (partMove != Vector2.zero) { if (partMove.sqrMagnitude > weights[i] * weights[i]) { partMove.Normalize(); partMove *= weights[i]; } move += partMove; } } return(move); }
public override Vector2 CalculateMove(FlockingObejct flockingobject, List <Transform> context, Flocking flock) { if (context.Count == 0) { return(Vector2.zero); } Vector2 avoid = Vector2.zero; int avoidnum = 0; List <Transform> filterContext = (filter == null) ? context : filter.FilterList(flockingobject, context); foreach (Transform item in filterContext) { if (Vector2.SqrMagnitude(item.position - flockingobject.transform.position) < flock.SqureRadius) { avoidnum++; avoid += (Vector2)(flockingobject.transform.position - item.position); } } if (avoidnum > 0) { avoid /= avoidnum; } return(avoid); }
public override Vector2 CalculateMove(FlockingObejct flockingobejct, List <Transform> context, Flocking flock) { Vector2 centerOffset = center - (Vector2)flockingobejct.transform.position; float i = centerOffset.magnitude / radius; if (i < 0.9f) { return(Vector2.zero); } return(centerOffset * i * i); }
public override List <Transform> FilterList(FlockingObejct flockingobject, List <Transform> origin) { List <Transform> filtered = new List <Transform>(); foreach (Transform item in origin) { if (mask == (mask | (1 << item.gameObject.layer))) { filtered.Add(item); } } return(filtered); }
public override List <Transform> FilterList(FlockingObejct flockingobject, List <Transform> origin) { List <Transform> filtered = new List <Transform>(); foreach (Transform item in origin) { FlockingObejct itemObject = item.GetComponent <FlockingObejct>(); if (itemObject != null && itemObject.ObjectFlocking == flockingobject.ObjectFlocking) { filtered.Add(item); } } return(filtered); }
private List <Transform> GetNearbyObjects(FlockingObejct objects) { List <Transform> context = new List <Transform>(); Collider2D[] contextCollider = Physics2D.OverlapCircleAll(objects.transform.position, neighborRadius); foreach (Collider2D c in contextCollider) { if (c != objects.ObjectCollider) { context.Add(c.transform); } } return(context); }
public override Vector2 CalculateMove(FlockingObejct flockingobejct, List <Transform> context, Flocking flock) { if (context.Count == 0) { return(Vector2.zero); } Vector2 formation = Vector2.zero; List <Transform> filterContext = (filter == null) ? context : filter.FilterList(flockingobejct, context); foreach (Transform item in filterContext) { formation += new Vector2(Mathf.Sin(item.transform.position.x), Mathf.Cos(item.transform.position.y)); } return(formation); }
public override Vector2 CalculateMove(FlockingObejct flockingobejct, List <Transform> context, Flocking flock) { if (context.Count == 0) { return(flockingobejct.transform.up); } Vector2 alignment = Vector2.zero; List <Transform> filterContext = (filter == null) ? context : filter.FilterList(flockingobejct, context); foreach (Transform item in filterContext) { alignment += (Vector2)item.transform.up; } alignment /= context.Count; return(alignment); }
private void Start() { squreMaxSpeed = Maxspeed * Maxspeed; squreNeighborRadius = neighborRadius * neighborRadius; squreRadius = squreNeighborRadius * Radius * Radius; for (int i = 0; i < startCount; i++) { FlockingObejct newObject = Instantiate(flockingobjectPrefabs, Random.insideUnitCircle * startCount * objectdensity, Quaternion.Euler(Vector3.forward * Random.Range(0.0f, 360.0f)), transform); newObject.name = "flocking" + i; newObject.Init(this); flockingobjects.Add(newObject); } }
public override Vector2 CalculateMove(FlockingObejct flockingobejct, List <Transform> context, Flocking flock) { if (context.Count == 0) { return(Vector2.zero); } Vector2 cohesion = Vector2.zero; List <Transform> filterContext = (filter == null) ? context : filter.FilterList(flockingobejct, context); foreach (Transform item in filterContext) { cohesion += (Vector2)item.position; } cohesion /= context.Count; cohesion -= (Vector2)flockingobejct.transform.position; return(cohesion); }
public abstract Vector2 CalculateMove(FlockingObejct flockingobject, List <Transform> context, Flocking flock);
public abstract List <Transform> FilterList(FlockingObejct flockingobject, List <Transform> origin);