Exemple #1
0
    // Called once per frame
    void Update()
    {
        // Calculate mass and force for character
        if (!useCustomMass)
        {
            force = mass * Mathf.Abs(Physics.gravity.y);
        }
        else
        {
            force = customMass * Mathf.Abs(Physics.gravity.y);
        }

        // Physics for Primitive
        primitiveGravityForce   = primitiveMass * (Physics.gravity.y);
        primitiveSpeed          = primitiveCollider.gameObject.GetComponent <Rigidbody>().velocity;
        primitiveImpulse        = primitiveMass * (Vector3.zero - primitiveSpeed);
        forceNetExertedByGround = primitiveImpulse / contactTime;
        totalForce = forceNetExertedByGround.y + Math.Abs(primitiveGravityForce);

        // Plot Information
        //totalForceYPlot = totalForce;

        // Brush.cs needs them
        heightIKLeft  = _feetPlacement.LeftFootIKPosition.y;
        heightIKRight = _feetPlacement.RightFootIKPosition.y;

        // For debug
        centerGridLeftFoot  = World2Grid(_feetPlacement.LeftFootIKPosition.x, _feetPlacement.LeftFootIKPosition.z);
        centerGridRightFoot = World2Grid(_feetPlacement.RightFootIKPosition.x, _feetPlacement.RightFootIKPosition.z);

        // Just informative
        isLeftFootGrounded  = _feetPlacement.isLeftFootGrounded;
        isRightFootGrounded = _feetPlacement.isRightFootGrounded;

        // Plot the position of the feet in both systems
        if (printFeetPositions)
        {
            Debug.Log("[INFO] Left Foot Coords (World): " + _feetPlacement.LeftFootIKPosition.ToString());
            Debug.Log("[INFO] Left Foot Coords (Grid): " + centerGridLeftFoot.ToString());
            Debug.Log("[INFO] Right Foot Coords (World): " + _feetPlacement.RightFootIKPosition.ToString());
            Debug.Log("[INFO] Right Foot Coords (Grid): " + centerGridRightFoot.ToString());
        }

        // Apply brush to feet
        if (current_brush)
        {
            // Included inside: Print + Filter
            current_brush.CallFootprint(_feetPlacement.LeftFootIKPosition.x, _feetPlacement.LeftFootIKPosition.z,
                                        _feetPlacement.RightFootIKPosition.x, _feetPlacement.RightFootIKPosition.z);
        }

        // Apply brush to primitive
        if (current_brush_primitive)
        {
            // Test brush to make prints for a given 3D primitive
            current_brush_primitive.CallFootprint(primitiveCollider.gameObject.transform.position.x, primitiveCollider.gameObject.transform.position.z);
        }

        if (smoothAll)
        {
            // Terrain Center
            Vector3 rayGrid      = new Vector3(heightmap_width / 2, 0, heightmap_height / 2);
            Vector3 rayGridWorld = Grid2World(rayGrid);
            Debug.DrawRay(rayGridWorld, Vector3.up * 4, Color.blue);

            elapsed += Time.deltaTime;
            if (elapsed >= smoothTimeInterval)
            {
                elapsed = elapsed % smoothTimeInterval;
                //GaussianCustom();
                GaussianBlur3();
            }
        }
    }