Ejemplo n.º 1
0
    public void FixedUpdate()
    {
        HelicopterInputState_t aIInputState = GetAIInputState();

        currentThrottle = Mathf.Lerp(currentThrottle, aIInputState.throttle, 2f * Time.fixedDeltaTime);
        currentThrottle = Mathf.Clamp(currentThrottle, -0.2f, 1f);
        rigidBody.AddRelativeTorque(new Vector3(aIInputState.pitch * torqueScale.x, aIInputState.yaw * torqueScale.y, aIInputState.roll * torqueScale.z) * Time.fixedDeltaTime, ForceMode.Force);
        avgThrust = Mathf.Lerp(avgThrust, engineThrustMax * currentThrottle, Time.fixedDeltaTime);
        float   value  = Mathf.Clamp01(Vector3.Dot(base.transform.up, Vector3.up));
        float   num    = Mathf.InverseLerp(liftDotMax, 1f, value);
        Vector3 force  = Vector3.up * engineThrustMax * 0.5f * currentThrottle * num;
        Vector3 force2 = (base.transform.up - Vector3.up).normalized * engineThrustMax * currentThrottle * (1f - num);
        float   num2   = rigidBody.mass * (0f - Physics.gravity.y);

        rigidBody.AddForce(base.transform.up * num2 * num * 0.99f, ForceMode.Force);
        rigidBody.AddForce(force, ForceMode.Force);
        rigidBody.AddForce(force2, ForceMode.Force);
        for (int i = 0; i < GroundEffects.Length; i++)
        {
            Transform  obj       = GroundPoints[i];
            Transform  transform = GroundEffects[i];
            RaycastHit hitInfo;
            if (Physics.Raycast(obj.transform.position, Vector3.down, out hitInfo, 50f, 8388608))
            {
                transform.gameObject.SetActive(true);
                transform.transform.position = hitInfo.point + new Vector3(0f, 1f, 0f);
            }
            else
            {
                transform.gameObject.SetActive(false);
            }
        }
    }
Ejemplo n.º 2
0
    public HelicopterInputState_t GetHelicopterInputState()
    {
        HelicopterInputState_t result = default(HelicopterInputState_t);

        result.throttle  = (Input.GetKey(KeyCode.W) ? 1f : 0f);
        result.throttle -= (Input.GetKey(KeyCode.S) ? 1f : 0f);
        result.pitch     = Input.GetAxis("Mouse Y");
        result.roll      = 0f - Input.GetAxis("Mouse X");
        result.yaw       = (Input.GetKey(KeyCode.D) ? 1f : 0f);
        result.yaw      -= (Input.GetKey(KeyCode.A) ? 1f : 0f);
        result.pitch     = Mathf.RoundToInt(result.pitch);
        result.roll      = Mathf.RoundToInt(result.roll);
        return(result);
    }
Ejemplo n.º 3
0
    public HelicopterInputState_t GetAIInputState()
    {
        HelicopterInputState_t result = default(HelicopterInputState_t);
        Vector3 vector = Vector3.Cross(Vector3.up, base.transform.right);
        float   num    = Vector3.Dot(Vector3.Cross(Vector3.up, vector), Vector3Ex.Direction2D(AIMoveTarget.position, base.transform.position));

        result.yaw  = ((num < 0f) ? 1f : 0f);
        result.yaw -= ((num > 0f) ? 1f : 0f);
        float num2 = Vector3.Dot(Vector3.up, base.transform.right);

        result.roll  = ((num2 < 0f) ? 1f : 0f);
        result.roll -= ((num2 > 0f) ? 1f : 0f);
        float num3 = Vector3Ex.Distance2D(base.transform.position, AIMoveTarget.position);
        float num4 = Vector3.Dot(vector, Vector3Ex.Direction2D(AIMoveTarget.position, base.transform.position));
        float num5 = Vector3.Dot(Vector3.up, base.transform.forward);

        if (num3 > 10f)
        {
            result.pitch  = ((num4 > 0.8f) ? (-0.25f) : 0f);
            result.pitch -= ((num4 < -0.8f) ? (-0.25f) : 0f);
            if (num5 < -0.35f)
            {
                result.pitch = -1f;
            }
            else if (num5 > 0.35f)
            {
                result.pitch = 1f;
            }
        }
        else if (num5 < -0f)
        {
            result.pitch = -1f;
        }
        else if (num5 > 0f)
        {
            result.pitch = 1f;
        }
        float idealAltitude = GetIdealAltitude();
        float y             = base.transform.position.y;
        float num6          = 0f;

        num6 = ((y > idealAltitude + altitudeTolerance) ? (-1f) : ((y < idealAltitude - altitudeTolerance) ? 1f : ((!(num3 > 20f)) ? 0f : Mathf.Lerp(0f, 1f, num3 / 20f))));
        Debug.Log("desiredThrottle : " + num6);
        result.throttle = num6 * 1f;
        return(result);
    }