Esempio n. 1
0
    public override Vector2 Calculate_Move(Sheep_Controller sheeb, List <Transform> context, Herd_Controller herd)
    {
        // If there are no neighbors, do not adjust
        if (context.Count == 0f)
        {
            return(Vector2.zero);
        }

        // Add points together and average
        Vector2 coh_Move = Vector2.zero;

        foreach (Transform thing in context)
        {
            coh_Move += (Vector2)thing.position;
        }

        coh_Move /= context.Count;

        // Offset
        coh_Move -= (Vector2)sheeb.transform.position;

        return(coh_Move);
    }
Esempio n. 2
0
    public override Vector2 Calculate_Move(Sheep_Controller sheeb, List <Transform> context, Herd_Controller herd)
    {
        // If there are no neighbors, do not adjust
        if (context.Count == 0f)
        {
            return(Vector2.zero);
        }

        // Add points together and average
        Vector2 avoid_Move = Vector2.zero;
        int     n_Avoid    = 0;

        foreach (Transform thing in context)
        {
            if (Vector2.SqrMagnitude(thing.position - sheeb.transform.position) < herd.SquareAvoidRadius)
            {
                n_Avoid++;
                avoid_Move += (Vector2)(sheeb.transform.position - thing.position);
            }
        }

        if (n_Avoid > 0)
        {
            avoid_Move /= n_Avoid;
        }

        return(avoid_Move);
    }
Esempio n. 3
0
    public override Vector2 Calculate_Move(Sheep_Controller sheeb, List <Transform> context, Herd_Controller herd)
    {
        // Handle mismatched data
        if (weights.Length != behaviors.Length)
        {
            Debug.LogError("Data mismatch");
            return(Vector2.zero);
        }

        // Set up move
        Vector2 move = Vector2.zero;

        for (int i = 0; i < behaviors.Length; i++)
        {
            Vector2 partial_Move = behaviors[i].Calculate_Move(sheeb, context, herd) * weights[i];

            if (partial_Move != Vector2.zero)
            {
                if (partial_Move.sqrMagnitude > weights[i] * weights[i])
                {
                    partial_Move.Normalize();
                    partial_Move *= weights[i];
                }

                move += partial_Move;
            }
        }

        return(move);
    }
Esempio n. 4
0
 public abstract Vector2 Calculate_Move(Sheep_Controller sheeb, List <Transform> context, Herd_Controller herd);
Esempio n. 5
0
    public override Vector2 Calculate_Move(Sheep_Controller sheeb, List <Transform> context, Herd_Controller herd)
    {
        // If there are no neighbors, do not adjust
        if (context.Count == 0f)
        {
            return(sheeb.transform.up);
        }

        // Add points together and average
        Vector2 align_Move = Vector2.zero;

        foreach (Transform thing in context)
        {
            align_Move += (Vector2)thing.transform.up;
        }

        align_Move /= context.Count;

        return(align_Move);
    }