Example #1
0
    void MoveTo(BoidNode currentWaypoint)
    {
        node = boid.node;

        // Influence of next checkpoint
        Vector3 steeringFromTarget = boid.VelocityTowards(currentWaypoint.position, 0, 0.5f);

        neighbourUnits = Grid.instance.GetUnitNeighbours(boid, false, 3);
        Vector3 steeringFromUnits = Flocker.ComputeSeparationForce(boid, neighbourUnits, radius, 1);

        Vector3 steeringFromSurroundings = ComputeSteeringFromObstacles(node, 1, 10);
        // Compose
        Vector3 steering = Vector3.ClampMagnitude(steeringFromTarget + steeringFromUnits + steeringFromSurroundings, steeringFromTarget.magnitude);

        steering = steering / boid.mass;

        // Floor influence
        float movementRatio = 1 - node.boidNode.penalty;

        boid.velocity = Vector3.ClampMagnitude(boid.velocity + steering, boid.maxSpeed * movementRatio);

        Grid.instance.RemoveUnit(boid);
        boid.position = boid.predictPosition(Time.deltaTime);
        Grid.instance.RegisterUnit(boid);
        transform.position = boid.position;
    }