Esempio n. 1
0
    public override Vector3 GetForce(List <BoidUtil> nearUnits, BoidUtil actualBoid, float maxSpeed, List <GameObject> food, List <GameObject> Menace, Vector3 NextWaypoint)
    {
        Vector3 velocity     = Vector3.zero;
        Vector3 foodPosition = new Vector3(float.MaxValue, float.MaxValue, float.MaxValue);

        if (food.Count <= 0)
        {
            return(Vector3.zero);
        }

        for (int i = 0; i < food.Count; i++)
        {
            float distance      = Vector3.Distance(foodPosition, actualBoid.transform.position);
            float otherDistance = Vector3.Distance(food.ToArray()[i].transform.position, actualBoid.transform.position);

            if (otherDistance < distance)
            {
                foodPosition = food.ToArray()[i].transform.position;
            }
        }

        Vector3 diff = foodPosition - actualBoid.transform.position;

        velocity = (diff.normalized * maxSpeed) - actualBoid.velocity;
        return(velocity);
    }
Esempio n. 2
0
    public override Vector3 GetForce(List <BoidUtil> nearUnits, BoidUtil actualBoid, float maxSpeed, List <GameObject> food, List <GameObject> Menace, Vector3 NextWaypoint)
    {
        Vector3 velocity       = Vector3.zero;
        float   nearUnitsCount = 0;

        if (nearUnits.Count > 0)
        {
            foreach (BoidUtil _boid in nearUnits)
            {
                if (_boid == actualBoid)
                {
                    continue;
                }

                var   difference = actualBoid.transform.position - _boid.transform.position;
                float distance   = difference.magnitude;

                if (distance < radius)
                {
                    nearUnitsCount++;
                    velocity += _boid.transform.position;
                }
            }
        }

        return(nearUnitsCount > 0 ? (velocity / nearUnitsCount) : Vector3.zero);
    }
Esempio n. 3
0
    public override Vector3 GetForce(List <BoidUtil> nearUnits, BoidUtil actualBoid, float maxSpeed, List <GameObject> food, List <GameObject> Menace, Vector3 NextWaypoint)
    {
        Vector3 velocity       = Vector3.zero;
        float   nearUnitsCount = 0;

        if (nearUnits.Count > 0)
        {
            foreach (BoidUtil _boid in nearUnits)
            {
                if (_boid == actualBoid)
                {
                    continue;
                }

                Vector3 difference = actualBoid.transform.position - _boid.transform.position;
                float   distance   = Vector3.Distance(actualBoid.transform.position, _boid.transform.position);



                if (distance < radius)
                {
                    nearUnitsCount++;
                    if (distance > 0)
                    {
                        velocity += difference.normalized / distance;
                    }
                }
            }
        }

        return(nearUnitsCount > 0 ? velocity * maxSpeed : Vector3.zero);
    }
Esempio n. 4
0
    public override Vector3 GetForce(List <BoidUtil> nearUnits, BoidUtil actualBoid, float maxSpeed, List <GameObject> food, List <GameObject> Menace, Vector3 NextWaypoint)
    {
        Vector3 velocity   = Vector3.zero;
        int     unitsCount = 0;

        foreach (BoidUtil _boid in nearUnits)
        {
            if (actualBoid == _boid)
            {
                continue;
            }

            Vector3 diff     = actualBoid.transform.position - _boid.transform.position;
            float   distance = diff.magnitude;

            if (distance < radius)
            {
                unitsCount++;
                velocity += _boid.velocity;
            }
        }

        var result = (velocity / unitsCount) - actualBoid.velocity;

        return(unitsCount > 0 ? result : Vector3.zero);
    }
Esempio n. 5
0
    public override Vector3 GetForce(List <BoidUtil> nearUnits, BoidUtil actualBoid, float maxSpeed, List <GameObject> food, List <GameObject> Menace, Vector3 NextWaypoint)
    {
        Vector3 diff = NextWaypoint - actualBoid.transform.position;

        Vector3 velocity = (diff.normalized * maxSpeed) - actualBoid.velocity;

        return(velocity);
    }
Esempio n. 6
0
    public override Vector3 GetForce(List <BoidUtil> nearUnits, BoidUtil actualBoid, float maxSpeed, List <GameObject> food, List <GameObject> Menace, Vector3 NextWaypoint)
    {
        Vector3 velocity = Vector3.zero;

        for (int i = 0; i < Menace.Count; i++)
        {
            Vector3 difference = actualBoid.transform.position - Menace[i].transform.position;
            float   distance   = Vector3.Distance(actualBoid.transform.position, Menace[i].transform.position);

            if (distance < radius)
            {
                Vector3 pos = Menace[i].transform.position - actualBoid.transform.position;

                velocity = ((pos.normalized * maxSpeed) - actualBoid.velocity) * -1.0f;

                return(velocity);
            }
        }
        return(Vector3.zero);
    }
Esempio n. 7
0
 public abstract Vector3 GetForce(List <BoidUtil> nearUnits, BoidUtil actualBoid, float maxSpeed, List <GameObject> foodList, List <GameObject> menaceList, Vector3 NextWaypoint);