Exemplo n.º 1
0
        // unique db key = Id

        public Car(DateTime uploadDate, int price, string brand, string model, bool used, YearMonth dateOfPurchase, Engine engine, FuelType fuelType,
                   ChassisType chassisType, string color, GearboxType gearboxType, int totalKilometersDriven, DriveWheels driveWheels, List <string> defects,
                   SteeringWheelPosition steeringWheelPosition, NumberOfDoors numberOfDoors, int numberOfCylinders, int numberOfGears, int seats, YearMonth nextVehicleInspection,
                   string wheelSize, int weight, EuroStandard euroStandard, string originalPurchaseCountry, string vin, List <string> additionalProperties, List <string> images, string comment)
        {
            Price                   = price;
            UploadDate              = uploadDate;
            Brand                   = brand;
            Model                   = model;
            Used                    = used;
            DateOfPurchase          = dateOfPurchase;
            Engine                  = engine;
            FuelType                = fuelType;
            ChassisType             = chassisType;
            Color                   = color;
            GearboxType             = gearboxType;
            TotalKilometersDriven   = totalKilometersDriven;
            DriveWheels             = driveWheels;
            Defects                 = defects;
            SteeringWheelPosition   = steeringWheelPosition;
            NumberOfDoors           = numberOfDoors;
            NumberOfCylinders       = numberOfCylinders;
            NumberOfGears           = numberOfGears;
            Seats                   = seats;
            NextVehicleInspection   = nextVehicleInspection;
            WheelSize               = wheelSize;
            Weight                  = weight;
            EuroStandard            = euroStandard;
            OriginalPurchaseCountry = originalPurchaseCountry;
            Vin = vin;
            AdditionalProperties = additionalProperties;
            Images  = images;
            Comment = comment;
        }
Exemplo n.º 2
0
    //private float yawrate = 0;
    void FixedUpdate()
    {
        var velocity = transform.InverseTransformVector(_rigidbody.velocity);

        var steerDegrees = Mathf.Lerp(Steering * 30, Steering * 3, velocity.magnitude / 30.0f);

        CornerStiffnessFront = velocity.z > 20.0f ? 20 : 10;
        CornerStiffnessRear  = velocity.z > 20.0f ? 20 : 7;

        foreach (var steerWheel in SteerWheels)
        {
            steerWheel.SteerAngle = Steering * 60;
        }

        var steerangle = steerDegrees * Mathf.Deg2Rad;

        var cgToFrontAxle        = 1f; //Mathf.Abs(_rigidbody.centerOfMass.z - SteerWheels[0].transform.localPosition.z);
        var cgToRearAxle         = 1f; //Mathf.Abs(_rigidbody.centerOfMass.z - DriveWheels[0].transform.localPosition.z);
        var axleWeightRatioFront = cgToRearAxle / _wheelBase;
        var axleWeightRatioRear  = cgToFrontAxle / _wheelBase;

        var axleWeightFront = _rigidbody.mass * (axleWeightRatioFront * 9.81f - WeightTransfer * Throttle * 0.5f / _wheelBase);
        var axleWeightRear  = _rigidbody.mass * (axleWeightRatioRear * 9.81f + WeightTransfer * Throttle * 0.5f / _wheelBase);

        var yawrate = _rigidbody.angularVelocity.y;

        var yawSpeedFront = 1.0f * yawrate;
        var yawSpeedRear  = -1.0f * yawrate;

        var slipAngleFront = Mathf.Atan2(velocity.x + yawSpeedFront, velocity.z) - Mathf.Sign(velocity.z) * steerangle;
        var slipAngleRear  = Mathf.Atan2(velocity.x + yawSpeedRear, velocity.z);

        var tireGripFront = MaxGripFront;
        var tireGripRear  = MaxGripRear;

        var frictionForceFront = Mathf.Clamp(-CornerStiffnessFront * slipAngleFront, -tireGripFront, tireGripFront) * axleWeightFront;
        var frictionForceRear  = Mathf.Clamp(-CornerStiffnessRear * slipAngleRear, -tireGripRear, tireGripRear) * axleWeightRear;

        if (FrontSlip)
        {
            frictionForceFront *= 0.5f;
        }
        if (RearSlip)
        {
            frictionForceRear *= 0.5f;
        }

        var tractionForce = Vector3.zero;

        if (DriveWheels.Any(x => x.Grounded))
        {
            tractionForce = transform.forward * (Throttle - Brake * Mathf.Sign(velocity.z)) * AccelerationForce;
        }
        if (RearSlip)
        {
            tractionForce *= 0.5f;
        }

        var sideForce = transform.right * (Mathf.Cos(steerangle) * frictionForceFront + frictionForceRear);

        var downForce = -Vector3.up * DownForceAmount;

        var driveForce      = DriveWheels.Any(x => x.Grounded) ? tractionForce : Vector3.zero;
        var actualSideForce = ((DriveWheels[0].Grounded && SteerWheels[0].Grounded) ||
                               (DriveWheels[1].Grounded && SteerWheels[1].Grounded)) ? sideForce : Vector3.zero;

        var angularTorque = frictionForceFront - frictionForceRear;

        if (Throttle == 0 && velocity.magnitude < 0.5f)
        {
            angularTorque = 0;
            _rigidbody.angularVelocity = Vector3.zero;
            velocity.x          = 0;
            _rigidbody.velocity = transform.TransformVector(velocity);

            driveForce      = Vector3.zero;
            actualSideForce = Vector3.zero;
        }

        _rigidbody.AddForce(driveForce + actualSideForce + downForce);

        foreach (var wheel in DriveWheels)
        {
            wheel.SuspensionTarget = Mathf.Lerp(0.5f, 0.3f, Throttle);
        }
        foreach (var wheel in SteerWheels)
        {
            wheel.SuspensionTarget = Mathf.Lerp(0.5f, 0.3f, Brake);
        }

        //_rigidbody.AddForceAtPosition(downForce, transform.position -transform.forward * (DriveWheels.All(x => x.Grounded) ? (Throttle - Brake) * 0.4f : 0.0f));
        //_rigidbody.centerOfMass = -Vector3.forward * (DriveWheels.All(x => x.Grounded) ? (Throttle-Brake) * 0.4f : 0.0f);

        var angularAccel = angularTorque / _rigidbody.mass;

        if (SteerWheels.All(x => x.Grounded))
        {
            _rigidbody.angularVelocity += transform.up * angularAccel * Time.deltaTime;
        }
    }