Пример #1
0
    // Update is called once per frame
    void Update()
    {
        // cast from gun to ground
        if (Physics.Raycast(transform.position, transform.TransformDirection(Vector3.forward), out hit, 15, layerMask))
        {
            // if player decides to shoot freeze ray some prework must be done to change texture of ground
            if (Input.GetButton("Fire1"))
            {
                // turn particle effect on
                emission.enabled = true;

                if (!iceAudio.isPlaying)
                {
                    iceAudio.Play();
                }

                if (hit.collider.tag == "MovingPlat")
                {
                    platform = hit.transform.gameObject.GetComponent <MovingPlatform> ();

                    if (!platform.iced)
                    {
                        platform.Icy();
                    }
                }
                else if (hit.collider.tag == "SolarPanel")
                {
                    freezePanel = hit.transform.gameObject.GetComponent <FreezePanel> ();

                    if (!freezePanel.frozen)
                    {
                        freezePanel.PowerPlatforms();
                    }
                }
                else
                {
                    // get reference to terrain object
                    tob = editor.GetTerrainAtObject(hit.transform.gameObject);

                    if (tob != null)
                    {
                        editor.SetEditValues(tob);

                        // convert player world coordinates into terrain coordinates
                        editor.GetCoords(hit, out int terX, out int terZ);

                        // produce ice at specified terrain coordinates
                        editor.ModifyTerrain(terX, terZ);
                    }
                }
            }
            else
            {
                if (iceAudio.isPlaying)
                {
                    iceAudio.Stop();
                }

                emission.enabled = false;
            }
        }
        else
        {
            if (iceAudio.isPlaying)
            {
                iceAudio.Stop();
            }

            emission.enabled = false;
        }
    }
Пример #2
0
    // Update is called once per frame
    void Update()
    {
        if (!PauseManager.paused && !PauseManager.reading)
        {
            // if the player is not in the air set their y velocity to 0
            if (controller.isGrounded && velocity.y < 0)
            {
                velocity.y = 0;
            }

            // get inputs from WASD keys
            float x = Input.GetAxis("Horizontal");
            float z = Input.GetAxis("Vertical");

            // raycast from player to the ground to determine what kind of terrain they are on
            if (Physics.Raycast(transform.position, transform.TransformDirection(-Vector3.up), out toFloor, 1, layerMask))
            {
                // get current terrain object player is standing on, if none returns null
                terrain = tEdit.GetTerrainAtObject(toFloor.transform.gameObject);

                if (terrain != null)
                {
                    tEdit.SetEditValues(terrain);

                    // get heightmap coords
                    tEdit.GetCoords(toFloor, out int terX, out int terZ);

                    if (tEdit.CheckIce(terX, terZ))
                    {
                        onIce = true;
                    }
                    else
                    {
                        onIce = false;
                    }
                }
            }
            else
            {
                onIce = false;
            }



            // if any of these keys are pressed appropriate animations should play
            if (z != 0 || x != 0)
            {
                // play different sound effects if the player is currently moving on sand vs ice
                if (onIce)
                {
                    if (!footstepSound[iceSound].isPlaying)
                    {
                        footstepSound[sandSound].Stop();
                        footstepSound[iceSound].Play();
                    }
                }
                else
                {
                    if (!footstepSound[sandSound].isPlaying)
                    {
                        footstepSound[iceSound].Stop();
                        footstepSound[sandSound].Play();
                    }
                }

                // sprint button changes player's speed
                if (Input.GetKey(KeyCode.LeftShift))
                {
                    anim.SetBool("IsWalking", false);
                    anim.SetBool("IsRunning", true);
                    speed = sprintSpeed;
                }
                else
                {
                    anim.SetBool("IsRunning", false);
                    anim.SetBool("IsWalking", true);
                    speed = walkSpeed;
                }
            }
            else
            {
                anim.SetBool("IsWalking", false);

                if (footstepSound[iceSound].isPlaying)
                {
                    footstepSound[iceSound].Stop();
                }

                if (footstepSound[sandSound].isPlaying)
                {
                    footstepSound[sandSound].Stop();
                }
            }

            // move forwards/backwards with z and left/right with x
            Vector3 move = transform.right * x + transform.forward * z;

            // character controller handles the movement
            controller.Move(move * speed * Time.deltaTime);

            // play jump animation and calculate upwards velocity
            if (Input.GetButtonDown("Jump"))
            {
                anim.SetTrigger("Jump");
                velocity.y = Mathf.Sqrt(jumpHeight * -2f * gravity);
            }

            // gradually brings play back to ground
            velocity.y += gravity * Time.deltaTime;

            // if player is on ice then they gradually gain speed
            if (onIce)
            {
                velocity += transform.forward * 0.7f * z;
            }
            else
            {
                // this will gradually slow down the player
                velocity.x *= 90f / 100f;
                velocity.z *= 90f / 100f;
            }

            // apply the velocity to the player
            controller.Move(velocity * Time.deltaTime);
        }
    }