Beispiel #1
0
    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);
    }
Beispiel #2
0
    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);
    }
Beispiel #3
0
    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);
    }
Beispiel #4
0
    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);
    }
Beispiel #5
0
    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);
    }
Beispiel #6
0
    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);
    }
Beispiel #7
0
    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);
    }
Beispiel #8
0
    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);
    }
Beispiel #9
0
    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);
        }
    }
Beispiel #10
0
    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);
    }
Beispiel #11
0
 public abstract Vector2 CalculateMove(FlockingObejct flockingobject, List <Transform> context, Flocking flock);
Beispiel #12
0
 public abstract List <Transform> FilterList(FlockingObejct flockingobject, List <Transform> origin);