コード例 #1
0
    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Escape))
        {
            AutoFade.LoadLevel("Level Select", Color.white);
        }

        /*if(Input.GetKeyDown(KeyCode.P)) {
         *      PlayerDie();
         * }*/

        if (isDead || Camera.main == null)
        {
            return;
        }

        if (optionalDangerHeightMeasure)
        {
            int diff = (int)(transform.position.y - optionalDangerHeightMeasure.transform.position.y);
            if (diff > 0)
            {
                optionalDangerHeightReadout.text = dangerBaseText;
            }
            else
            {
                optionalDangerHeightReadout.text = "" + (-diff) + "m below detection";
            }
        }

        float wasThrottle = throttle;

        /*if(missionTarget == null) {
         *      transform.rotation =
         *              Quaternion.Slerp(transform.rotation,
         *                               Quaternion.LookRotation(Vector3.up), Time.deltaTime * 3.0f);
         *      throttle = 1.0f;
         *      isHairpin180 = false;
         * } else {*/
        if (Input.GetKeyDown(KeyCode.Alpha1))
        {
            throttle = 0.0f;
        }
        else if (Input.GetKeyDown(KeyCode.Alpha2))
        {
            throttle = 0.1f;
        }
        else if (Input.GetKeyDown(KeyCode.Alpha3))
        {
            throttle = 0.2f;
        }
        else if (Input.GetKeyDown(KeyCode.Alpha4))
        {
            throttle = 0.3f;
        }
        else if (Input.GetKeyDown(KeyCode.Alpha5))
        {
            throttle = 0.4f;
        }
        else if (Input.GetKeyDown(KeyCode.Alpha6))
        {
            throttle = 0.5f;
        }
        else if (Input.GetKeyDown(KeyCode.Alpha7))
        {
            throttle = 0.6f;
        }
        else if (Input.GetKeyDown(KeyCode.Alpha8))
        {
            throttle = 0.7f;
        }
        else if (Input.GetKeyDown(KeyCode.Alpha9))
        {
            throttle = 0.8f;
        }
        else if (Input.GetKeyDown(KeyCode.Alpha0))
        {
            throttle = 1.0f;
        }

        //}

        if (throttle > wasThrottle)
        {
            SoundCenter.instance.PlayClipOn(
                SoundCenter.instance.throttleUp, transform.position, 1.0f, transform);
        }
        else if (throttle < wasThrottle)
        {
            SoundCenter.instance.PlayClipOn(
                SoundCenter.instance.throttleDown, transform.position, 1.0f, transform);
        }

        asymThrot           = (1.0f - throttleSmooth);
        asymThrot          *= asymThrot;
        asymThrot           = 1.0f - asymThrot;
        engineVolume.volume = 0.1f + 0.7f * asymThrot;

        if (maxThrottle)
        {
            asymThrot *= 4.0f;
        }

        float newFOV  = 55.0f + asymThrot * 10.0f;
        float kSpring = 0.95f;

        stretchFOV.fieldOfView = kSpring * stretchFOV.fieldOfView + (1.0f - kSpring) * newFOV;

        transform.position += asymThrot * transform.forward * Time.deltaTime * maxSpeed;

        float dodgeInput = Input.GetAxisRaw("Roll");

        if (activelyStrafing)
        {
            if (dodgeInput == 0.0f)
            {
                activelyStrafing = false;
            }
        }
        else
        {
            if (dodgeInput < -0.1f)
            {
                strafeAxis       = transform.right;
                activelyStrafing = true;
                SoundCenter.instance.PlayClipOn(
                    SoundCenter.instance.playerDodge, transform.position, 1.0f, transform);
            }
            else if (dodgeInput > 0.1f)
            {
                strafeAxis       = -transform.right;
                activelyStrafing = true;
                SoundCenter.instance.PlayClipOn(
                    SoundCenter.instance.playerDodge, transform.position, 1.0f, transform);
            }
        }

        if (rocketReloadTimeLeft > 0.0f)
        {
            rocketReloadTimeLeft -= Time.deltaTime;
            if (rocketReloadTimeLeft <= 0.0f || GameStateStaticProgress.cheatsOn)
            {
                if (rocketsLoaded < 4)
                {
                    if (rocketsLoaded == 0)
                    {
                        rocketHUD.gameObject.SetActive(true);
                    }
                    rocketHUD.sprite = rocketGraphics[rocketsLoaded];
                    rocketsLoaded++;
                    rocketReloadTimeLeft = rocketReloadTime;
                }
            }
        }

        if (Input.GetKeyDown(KeyCode.Return))
        {
            if (rocketSalvo == 0 && rocketsLoaded > 0)
            {
                if (GameStateStaticProgress.cheatsOn == false)
                {
                    rocketSalvo          = rocketsLoaded;
                    rocketReloadTimeLeft = rocketReloadTime;
                    rocketsLoaded        = 0;
                    rocketHUD.gameObject.SetActive(false);
                }
                else
                {
                    rocketSalvo = rocketsLoaded;
                }
            }
            else
            {
                SoundCenter.instance.PlayClipOn(
                    SoundCenter.instance.laserFire, transform.position, 1.0f, transform);
            }
        }

        if (Input.GetKeyDown(KeyCode.X) && isHairpin180 == false /*&& missionTarget != null*/)
        {
            SoundCenter.instance.PlayClipOn(
                SoundCenter.instance.playerDodge, transform.position, 1.0f, transform);
            isHairpin180   = true;
            hairpinSpinAmt = 0.0f;
            spin180From    = transform.rotation;
            spin180Goal    = transform.rotation
                             * Quaternion.AngleAxis(180.0f, Vector3.right);
        }

        /*if(missionTarget == null) {
         *      // on autopilot, ignore inputs
         * } else*/if (isHairpin180 == false)
        {
            isTurningDampenSpeed = (Mathf.Abs(Input.GetAxis("Vertical")) > 0.2f ||
                                    Mathf.Abs(Input.GetAxis("Horizontal")) > 0.2f);

            transform.Rotate(
                Input.GetAxis("Vertical") * Time.deltaTime * pitchSpeed,
                Input.GetAxis("Horizontal") * Time.deltaTime * yawSpeed,
                (GameStateStaticProgress.uprightDodge ? 0.0f :
                 Input.GetAxis("Roll") * Time.deltaTime * rollSpeed)
                );

            transform.position += strafeAxis * Time.deltaTime * dodgeSpeed;
        }
        else
        {
            bool wasBelow = (hairpinSpinAmt < 0.5f);
            hairpinSpinAmt += Time.deltaTime * 0.7f;

            isTurningDampenSpeed = true;

            if (hairpinSpinAmt < 0.5f)
            {
                float halfTurn = hairpinSpinAmt * 2.0f;
                transform.rotation =
                    Quaternion.Lerp(spin180From, spin180Goal, halfTurn);
            }
            else
            {
                float lastTurn = hairpinSpinAmt * 2.0f - 1.0f;
                if (wasBelow)
                {
                    SoundCenter.instance.PlayClipOn(
                        SoundCenter.instance.throttleDown, transform.position, 1.0f, transform);

                    spin180From = transform.rotation;
                    spin180Goal = transform.rotation
                                  * Quaternion.AngleAxis(180.0f, Vector3.forward);
                }
                transform.rotation =
                    Quaternion.Lerp(spin180From, spin180Goal, lastTurn);
            }

            if (hairpinSpinAmt > 1.0f)
            {
                SoundCenter.instance.PlayClipOn(
                    SoundCenter.instance.throttleUp, transform.position, 1.0f, transform);
                isHairpin180 = false;
            }
        }

        updateThrottleReadout();
        updateHealthReadout();
        updateTargetReadout();

        if (gunCooldownTimeLeft >= 0.0f)
        {
            gunCooldownTimeLeft -= Time.deltaTime;
        }

        if (reloadTime >= 0.0f)
        {
            reloadTime -= Time.deltaTime;
        }
        else if (Input.GetKey(KeyCode.Space) && gunCooldownTimeLeft <= 0.0f)
        {
            gunHeat += timeBetweenShots * 0.5f;
            if (gunHeat > 1.0f)
            {
                if (GameStateStaticProgress.cheatsOn)
                {
                    gunHeat = 1.0f;
                }
                else
                {
                    gunCooldownTimeLeft = cooldownTimeNeeded;
                    SoundCenter.instance.PlayClipOn(
                        SoundCenter.instance.throttleDown, transform.position, 1.0f, transform);
                }
            }

            mFlash.Strobe();

            SoundCenter.instance.PlayClipOn(
                SoundCenter.instance.playerMG2, transform.position, Random.Range(0.2f, 0.4f),
                transform);

            Ray        playerGun = new Ray(transform.position, transform.forward);
            float      missBy    = 0.75f;
            Quaternion missQuat  = Quaternion.AngleAxis(Random.Range(-missBy, missBy), Camera.main.transform.up);
            missQuat            = missQuat * Quaternion.AngleAxis(Random.Range(-missBy, missBy), Camera.main.transform.right);
            playerGun.direction = missQuat * playerGun.direction;

            RaycastHit rhInfo;
            int        layerMask = ~(1 << 12);
            if (Physics.Raycast(playerGun, out rhInfo, 4000.0f, layerMask))
            {
                Vector3    towardPlayer = rhInfo.point - transform.position;
                GameObject newGo        = (GameObject)GameObject.Instantiate(
                    spawnUponShotHit,
                    rhInfo.point - towardPlayer.normalized * 2.0f,
                    Quaternion.identity
                    );
                newGo.transform.parent = rhInfo.collider.transform;
                Shootable thingShot = rhInfo.collider.GetComponent <Shootable>();
                SoundCenter.instance.PlayClipOn(
                    SoundCenter.instance.playerMG1, transform.position, Random.Range(0.3f, 0.4f),
                    transform);
                if (thingShot)
                {
                    thingShot.DamageThis();
                }
                // Destroy( rhInfo.collider.gameObject );
            }
            reloadTime = timeBetweenShots;
        }
        else if (gunHeat > 0.0f)
        {
            gunHeat -= Time.deltaTime;
            if (gunHeat < 0.0f)
            {
                gunHeat = 0.0f;
            }
        }
    }