示例#1
0
 public void CompleteGame()
 {
     isGameComplete = true;
     cameraController.ActiveCamera(false);
     fountain.Activate(false);
     SelectController.Instance.Activate(false);
     for (int index = 0; index < baseControllers.Length; index++)
     {
         baseControllers[index].DeactiveBaracks();
     }
     messageWindow.ShowMessage("YOU WON!");
 }
    // Update is called once per frame
    void Update()
    {
        if (MainController.CurrentGameState() != MainController.GameState.PLAYING)
        {
            rb.Sleep();
            srcSpeed.pitch = 0;
            return;
        }
        else if (CameraController.ActiveCamera() == 2)
        {
            return;
        }

        Vector3 dirMovLocal = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));

        Vector3 dirMovGlobal = Camera.main.transform.TransformDirection(dirMovLocal);

        dirMovGlobal.y = 0;
        dirMovGlobal.Normalize();

        Vector3 vecVelocity = rb.velocity;

        if (!(Mathf.Abs(vecVelocity.x) > maxSpeed && vecVelocity.x / dirMovGlobal.x > 0))
        {
            vecVelocity.x += dirMovGlobal.x * accel;
        }
        if (!(Mathf.Abs(vecVelocity.z) > maxSpeed && vecVelocity.z / dirMovGlobal.z > 0))
        {
            vecVelocity.z += dirMovGlobal.z * accel;
        }

        if (Input.GetKeyDown(KeyCode.LeftShift))
        {
            if (countTouching == 0)//Means Flying, Accel Down
            {
                vecVelocity.y -= accel * 2;
            }
        }

        else if (Input.GetKeyDown(KeyCode.Space))
        {
            if ((Time.time - timeLastTouch) < 0.2f && ((Time.time - timeLastJump) > 0.5f))
            {
                timeLastJump = Time.time;

                Vector3 dirJump = (transform.position - ptLastTouching).normalized;
                dirJump.y += 0.5f;
                dirJump.Normalize();
                vecVelocity += dirJump * forceJumping;

                srcEffect.PlayOneShot(clipJump, srcEffect.volume * 0.5f);
            }
        }

        else if (Input.GetKeyDown(KeyCode.F) && ((Time.time - timeLastJump) > 0.2f))
        {
            // Do Flash Jump
            if (player.Power > powerPerFlashJump)
            {
                timeLastJump = Time.time;
                Vector3 dirJump = Quaternion.Euler(CameraController.ViewRotation()) * Vector3.forward;
                dirJump.Normalize();
                dirJump.y += 0.5f;
                dirJump.Normalize();

                vecVelocity  += dirJump * forceJumping;
                player.Power -= powerPerFlashJump;


                Vector3 vecPlayerPs = -(ps.transform.rotation * Vector3.forward) * 0.5f;
                Vector3 posPs       = transform.position + vecPlayerPs;

                ps.transform.position    = posPs;
                ps.transform.eulerAngles = CameraController.ViewRotation();

                ps.GetComponent <ParticleSystem>().Emit(10);
                srcEffect.PlayOneShot(clipFlashJump);
            }
        }

        if (Input.GetKeyDown(KeyCode.L))
        {
            player.Power += powerPerBattery;
        }



        rb.velocity = vecVelocity;

        srcSpeed.pitch = Mathf.Clamp(Mathf.Sqrt(Mathf.Abs(rb.velocity.magnitude) / 10), 0.5f, 3);

        //Gravitational Force Reward
        player.Power += posLast.y > transform.position.y ?
                        (((posLast.y - transform.position.y) / 10.0f) * rewardPowerFalling) : 0;

        //Timely Power Consumption (in second)
        player.Power -= Time.deltaTime * powerConsumption;
        if (player.Power < -powerPerBattery)
        {
            MainController.CurrentGame().GameOver();
        }


        posLast = transform.position;
    }