Example #1
0
    public void Steer(Vector3 target, Vector3 target_velocity, float max_target_speed)
    {
        // TODO 5: Create a fake position to represent
        // enemies predicted movement. Then call Steer()
        // on our Steering Seek / Arrive with the predicted position in
        // max_seconds_prediction time
        // Be sure that arrive / seek's update is not called at the same time

        Vector3 diff = move.target.transform.position - transform.position;

        float distance = diff.magnitude;
        float speed    = move.movement.magnitude;
        float fake_prediction;

        if (speed < distance / max_seconds_prediction)
        {
            fake_prediction = max_seconds_prediction;
        }
        else
        {
            fake_prediction = distance / speed;
        }

        arrive.Steer(move.target.transform.position + (target_velocity * fake_prediction));


        // TODO 6: Improve the prediction based on the distance from
        // our target and the speed we have
    }
Example #2
0
    public void Steer(Vector3 target, Vector3 velocity)
    {
        // TODO 5: Create a fake position to represent
        // enemies predicted movement. Then call Steer()
        // on our Steering Seek / Arrive with the predicted position in
        // max_seconds_prediction time
        // Be sure that arrive / seek's update is not called at the same time
        Vector3 Distance = target - transform.position;
        float   vel      = 0;

        if (move.movement.magnitude > 0)
        {
            vel = move.max_mov_velocity / move.movement.magnitude;
        }

        // TODO 6: Improve the prediction based on the distance from
        // our target and the speed we have
        float dist = Distance.magnitude / max_distance;

        Debug.Log(dist);
        float   average  = (vel + dist) / 2;
        Vector3 vel_time = velocity * max_seconds_prediction * average;

        Vector3 Fposition = target + vel_time;

        arrive.Steer(Fposition);
    }
Example #3
0
    public void Steer(Vector3 target, Vector3 velocity, float target_max_speed)
    {
        Vector3 diff               = target - transform.position;
        float   distance           = diff.magnitude;
        float   seconds_prediction = distance / target_max_speed;
        Vector3 prediction         = target + velocity * seconds_prediction;

        arrive.Steer(prediction);
    }
Example #4
0
    public void Steer(Vector3 target, Vector3 velocity)
    {
        // TODO 6: Create a fake position to represent
        // enemies predicted movement. Then call Steer()
        // on our Steering Arrive

        velocity.Normalize();
        Vector3 tar = target + (velocity * max_prediction);

        arrive.Steer(tar);
    }
    public void Steer(Vector3 target, Vector3 target_velocity, float max_target_speed)
    {
        target = Movenemy.transform.position;

        Vector3 diff               = target - transform.position;
        float   distance           = diff.magnitude;
        float   seconds_prediction = distance / max_target_speed;
        Vector3 prediction         = target + target_velocity * seconds_prediction;

        arrive.Steer(prediction);
    }
Example #6
0
    // Update is called once per frame
    void Update()
    {
        float      angle = Mathf.Atan2(move.movement.x, move.movement.z);
        Quaternion q     = Quaternion.AngleAxis(Mathf.Rad2Deg * angle, Vector3.up);

        foreach (my_ray ray in rays)
        {
            RaycastHit hit;

            if (Physics.Raycast(new Vector3(transform.position.x, 1.0f, transform.position.z), q * ray.direction.normalized, out hit, ray.length, mask) == true)
            {
                seek.Steer(new Vector3(hit.point.x, transform.position.y, hit.point.z) + hit.normal * avoid_distance);
            }
        }
    }
Example #7
0
    public void Steer(Vector3 target, Vector3 velocity)
    {
        Vector3 diff     = target - transform.position;
        float   distance = diff.magnitude;
        float   my_speed = move.movement.magnitude;
        float   prediction;

        // is the speed too small ?
        if (my_speed < distance / max_prediction)
        {
            prediction = max_prediction;
        }
        else
        {
            prediction = distance / my_speed;
        }

        arrive.Steer(target + (velocity * prediction));
    }
Example #8
0
    public void Steer(Vector3 target, Vector3 velocity)
    {
        // TODO 6: Create a fake position to represent
        // enemies predicted movement. Then call Steer()
        // on our Steering Arrive

        Vector3 predictedPosition = Vector3.zero;

        // Prediction 1 (simple)
        predictedPosition = target + velocity * max_prediction;

        // Prediction 2 (improved. The acceleration decreases depending on how close the target is)
        float distanceToTarget = Vector3.Distance(transform.position, target);
        float prediction       = distanceToTarget / max_prediction;

        predictedPosition = target + velocity * prediction;

        arrive.Steer(predictedPosition);
    }
Example #9
0
    public void Steer(Vector3 target, Vector3 velocity)
    {
        Vector3 diff = target - transform.position;

        float distance      = diff.magnitude;
        float current_speed = move.current_velocity[priority].magnitude;
        float prediction;

        // is the speed too small ?
        if (current_speed < distance / max_seconds_prediction)
        {
            prediction = max_seconds_prediction;
        }
        else
        {
            prediction = distance / current_speed;
        }

        arrive.Steer(target + (velocity * prediction));
    }
Example #10
0
    public void Steer(Vector3 target, Vector3 velocity)
    {
        // TODO 6: Create a fake position to represent
        // enemies predicted movement. Then call Steer()
        // on our Steering Arrive
        Vector3 position = target - transform.position;
        float   predict  = 0.0f;

        if (velocity.magnitude <= position.magnitude / max_prediction)
        {
            predict = max_prediction;
        }
        else
        {
            predict = position.magnitude / velocity.magnitude;
        }

        target += move.movement * predict;

        arrive.Steer(target);
    }
Example #11
0
 // Update is called once per frame
 void Update()
 {
     if (!move)
     {
         move = GetComponent <Move>();
     }
     else
     {
         if (path.status == NavMeshPathStatus.PathComplete)
         {
             align.Steer(path.corners[current_point]);
             if (current_point != path.corners.Length - 1)
             {
                 seek.Steer(path.corners[current_point]);
                 if (Vector3.Distance(transform.position, path.corners[current_point]) < min_distance)
                 {
                     current_point++;
                 }
             }
             else
             {
                 if (arrive.Steer(path.corners[current_point]))
                 {
                     if (!once)
                     {
                         once = true;
                     }
                 }
                 else
                 {
                     once = false;
                 }
             }
         }
     }
 }