예제 #1
0
    /////////////////////////////////////////

    /////////////////////////////////////////
    void EquipWeapon(CarWeapon _weapon)
    {
        currentWeapon = _weapon;

        //////////////////////////////gun init/////////////////////////////////////////
        GameObject _weaponIns = (GameObject)Instantiate(_weapon.gungraphics, weaponHolder.position, weaponHolder.rotation);

        _weaponIns.transform.SetParent(weaponHolder);


        ////////////////////////////////////////////////////////////////////////////////

        currentGraphics = _weaponIns.GetComponent <CarWeaponGraphics>();
        if (currentGraphics == null)
        {
            Debug.LogError("No Weapon Graphics Component on weapon_object:" + _weaponIns.name);
        }

        if (isLocalPlayer)
        {
            //_weaponIns.layer = LayerMask.NameToLayer(weaponLayerName);
            CarUtil.SetLayerRecursively(_weaponIns, LayerMask.NameToLayer(weaponLayerName));
        }

        ////////////////////////// turret init //////////////////////////////////////
        GameObject _turretIns = (GameObject)Instantiate(_weapon.turretgraphics, turretHolder.position, turretHolder.rotation);

        _turretIns.transform.SetParent(turretHolder);
        turretGraphics = _turretIns.GetComponentInChildren <Animator>();
        /////////////////////////////////////////////////////////////////////////////
    }
예제 #2
0
 private void Test()
 {
     car = CarUtil.CreateCar(CarType.Benz);
     if (car != null)
     {
         car.PrintName();
     }
     car = CarUtil.CreateCar(CarType.Bmw);
     if (car != null)
     {
         car.PrintName();
     }
     car = CarUtil.CreateCar(CarType.Honda);
     if (car != null)
     {
         car.PrintName();
     }
 }
예제 #3
0
파일: CarEntity.cs 프로젝트: cr4yz/sandbox
    public void OnPostPhysicsStep(float dt)
    {
        if (!this.IsValid())
        {
            return;
        }

        if (!spawned)
        {
            return;
        }

        if (!IsServer)
        {
            return;
        }

        var body = PhysicsBody;

        body.LinearDrag     = 0.0f;
        body.AngularDrag    = 0.0f;
        body.LinearDamping  = 0;
        body.AngularDamping = 0;
        body.GravityScale   = (_driveWheelsOnGround || _turnWheelsOnGround) ? 0 : 1;

        var rotation = body.Rot;

        _accelerateDirection = currentInput.throttle.Clamp(-1, 1);
        _turnDirection       = _turnDirection.LerpTo(currentInput.turning.Clamp(-1, 1), 1.0f - MathF.Pow(0.0075f, Time.Delta));

        float targetTilt = 0;
        float targetLean = 0;

        var speed = rotation.Inverse * body.Velocity;

        if (_driveWheelsOnGround || _turnWheelsOnGround)
        {
            var forwardSpeed  = MathF.Abs(speed.x);
            var speedFraction = MathF.Min(forwardSpeed / 500.0f, 1);

            targetTilt = (_accelerateDirection).Clamp(-1.0f, 1.0f);
            targetLean = speedFraction * _turnDirection;
        }

        _accelerationTilt = _accelerationTilt.LerpTo(targetTilt, 1.0f - MathF.Pow(0.01f, dt));
        _turnLean         = _turnLean.LerpTo(targetLean, 1.0f - MathF.Pow(0.01f, dt));

        if (_driveWheelsOnGround)
        {
            var forwardSpeed    = MathF.Abs(speed.x);
            var speedMultiplier = 1.0f - (forwardSpeed / 5000.0f).Clamp(0.0f, 1.0f);
            var acceleration    = speedMultiplier * (_accelerateDirection < 0.0f ? 200.0f : 500.0f) * body.Mass * (_driveWheelsOnGround ? _accelerateDirection : 1.0f) * dt;
            var impulseLocation = body.Pos + rotation * new Vector3(MathF.Sign(acceleration) * 100.0f, 0, 0);
            var impulse         = rotation * new Vector3(acceleration, 0, 0);

            body.ApplyImpulseAt(impulseLocation + rotation.Up * 25, impulse);
        }

        speed         = rotation.Inverse * body.Velocity;
        MovementSpeed = speed.x;

        RaycastWheels(rotation, true, out var frontWheels, out var backWheels, dt);

        var onGround = frontWheels || backWheels;

        _turnWheelsOnGround  = frontWheels;
        _driveWheelsOnGround = backWheels;

        if (onGround)
        {
            _wheelSpeed = speed.x;

            var grip = 1.0f - CarUtil.Curve(1.0f - Vector3.Dot(rotation.Up, Vector3.Up), 1000.0f);

            body.Velocity += (Vector3.Down * 900.0f) * dt;

            {
                var dampening = new Vector3(0.2f, grip, 0.0f);
                var dampened  = (rotation.Inverse * body.Velocity) * CarUtil.Pow(1.0f - dampening, dt);
                body.Velocity = (rotation * dampened);
            }

            {
                // angular dampen
                var unrotatedAngular = rotation.Inverse * body.AngularVelocity;
                var angularDampening = new Vector3(0, 0, 0.999f);
                var dampenedAngular  = unrotatedAngular * CarUtil.Pow(1.0f - angularDampening, dt);
                body.AngularVelocity = rotation * dampenedAngular;
            }

            var localVelocity = rotation.Inverse * body.Velocity;
            var turnAmount    = _turnWheelsOnGround ? (MathF.Sign(localVelocity.x) * 100.0f * CalculateTurnFactor(MathF.Abs(localVelocity.x)) * dt) : 0.0f;

            // turning
            if (MathF.Abs(turnAmount) > 0.0f)
            {
                body.AngularVelocity += rotation * new Vector3(0, 0, turnAmount);
            }

            {
                var dampening = new Vector3(0.2f, grip, 0.0f);
                var dampened  = (rotation.Inverse * body.Velocity) * CarUtil.Pow(1.0f - dampening, dt);
                body.Velocity = (rotation * dampened);
            }

            {
                // angular dampen
                var unrotatedAngular = rotation.Inverse * body.AngularVelocity;
                var angularDampening = new Vector3(0, 0, 0.999f);
                var dampenedAngular  = unrotatedAngular * CarUtil.Pow(1.0f - angularDampening, dt);
                body.AngularVelocity = rotation * dampenedAngular;
            }
        }
    }