Example #1
0
        public Vector3 Arrive(Vector3 target)
        {
            Vector3 toTarget = target - transform.position;

            float slowingDistance = 8.0f;
            float distance        = toTarget.magnitude;

            if (distance == 0.0f)
            {
                return(Vector3.zero);
            }
            const float DecelerationTweaker = 10.3f;
            float       ramped = maxSpeed * (distance / (slowingDistance * DecelerationTweaker));

            float   clamped = Math.Min(ramped, maxSpeed);
            Vector3 desired = clamped * (toTarget / distance);

            if (Params.drawDebugLines)
            {
                LineDrawer.DrawTarget(target, Color.gray);
            }
            Utilities.checkNaN(desired);


            return(desired - velocity);
        }
Example #2
0
        public Vector3 Arrive(Vector3 target)
        {
            Vector3 desired = target - transform.position;

            float distance = desired.magnitude;

            //toTarget.Normalize();
            if (drawGizmos)
            {
                LineDrawer.DrawTarget(target, Color.red);
                LineDrawer.DrawSphere(target, arriveSlowingDistance, 20, Color.yellow);
            }

            if (distance < 1.0f)
            {
                return(Vector3.zero);
            }
            float desiredSpeed = 0;

            if (distance < arriveSlowingDistance)
            {
                desiredSpeed = (distance / arriveSlowingDistance) * maxSpeed * (1.0f - arriveDeceleration);
            }
            else
            {
                desiredSpeed = maxSpeed;
            }
            desired *= desiredSpeed;

            return(desired - velocity);
        }
Example #3
0
        Vector3 Seek(Vector3 targetPos)
        {
            Vector3 desiredVelocity;

            desiredVelocity = targetPos - transform.position;
            desiredVelocity.Normalize();
            desiredVelocity *= maxSpeed;
            if (Params.drawDebugLines)
            {
                LineDrawer.DrawTarget(targetPos, Color.red);
            }
            return(desiredVelocity - velocity);
        }
Example #4
0
        Vector3 Pursue()
        {
            Vector3 toTarget = pursuitTarget.transform.position - transform.position;
            float   dist     = toTarget.magnitude;
            float   time     = dist / maxSpeed;

            Vector3 targetPos = pursuitTarget.transform.position + (time * pursuitTarget.GetComponent <Boid>().velocity);

            if (drawGizmos)
            {
                LineDrawer.DrawTarget(targetPos, Color.red);
                LineDrawer.DrawLine(transform.position, targetPos, Color.cyan);
            }

            return(Seek(targetPos));
        }
Example #5
0
        Vector3 Wander()
        {
            float jitterTimeSlice = Params.GetFloat("wander_jitter") * timeDelta;

            Vector3 toAdd = UnityEngine.Random.insideUnitSphere * jitterTimeSlice;

            wanderTargetPos += toAdd;
            wanderTargetPos.Normalize();
            wanderTargetPos *= Params.GetFloat("wander_radius");

            Vector3 localTarget = wanderTargetPos + Vector3.forward * Params.GetFloat("wander_distance");
            Vector3 worldTarget = transform.TransformPoint(localTarget);

            if (Params.drawDebugLines)
            {
                LineDrawer.DrawTarget(worldTarget, Color.blue);
            }
            return(worldTarget - transform.position);
        }
Example #6
0
        Vector3 Wander()
        {
            float jitterTimeSlice = wanderJitter * timeDelta;

            Vector3 toAdd = UnityEngine.Random.insideUnitSphere * jitterTimeSlice;

            wanderTargetPos += toAdd;
            wanderTargetPos.Normalize();
            wanderTargetPos *= wanderRadius;

            Vector3 localTarget = wanderTargetPos + Vector3.forward * wanderDistance;
            Vector3 worldTarget = transform.TransformPoint(localTarget);

            if (drawGizmos)
            {
                LineDrawer.DrawTarget(worldTarget, Color.blue);
            }
            return(worldTarget - transform.position);
        }