Beispiel #1
0
        private void Update()
        {
            if (Input.GetKeyDown(KeyCode.F9))
            {
                _showVel = !_showVel;
            }

            if (!Loader.HasLoaded)
            {
                return;
            }


            // reset player input
            m_ped.ResetMovementInput();


            if (!m_ped.enableFlying && !m_ped.IsInVehicle && Input.GetKeyDown(KeyCode.T))
            {
                m_ped.enableFlying = true;
                m_ped.Movement     = new Vector3(0f, 0f, 0f);                                     // disable current movement
                PlayerModel.PlayAnim(AnimGroup.WalkCycle, AnimIndex.RoadCross, PlayMode.StopAll); // play 'flying' animation
            }
            else if (m_ped.enableFlying && Input.GetKeyDown(KeyCode.T))
            {
                m_ped.enableFlying = false;
            }

            if (!m_ped.IsInVehicle && Input.GetKeyDown(KeyCode.R))
            {
                m_ped.enableNoclip = !m_ped.enableNoclip;
                m_ped.characterController.detectCollisions = !m_ped.enableNoclip;
                if (m_ped.enableNoclip && !m_ped.enableFlying)
                {
                    m_ped.Movement = new Vector3(0f, 0f, 0f);                                         // disable current movement
                    PlayerModel.PlayAnim(AnimGroup.WalkCycle, AnimIndex.RoadCross, PlayMode.StopAll); // play 'flying' animation
                }
            }


            this.UpdateCamera();


            if (!GameManager.CanPlayerReadInput())
            {
                return;
            }


            if (Input.GetButtonDown("Use") && m_ped.IsInVehicle)
            {
                m_ped.ExitVehicle();

                return;
            }


            if (m_ped.IsInVehicle)
            {
                return;
            }


            if (m_ped.enableFlying || m_ped.enableNoclip)
            {
                var up_down = 0.0f;

                if (Input.GetKey(KeyCode.Backspace))
                {
                    up_down = 1.0f;
                }
                else if (Input.GetKey(KeyCode.Delete))
                {
                    up_down = -1.0f;
                }

                var inputMove = new Vector3(Input.GetAxis("Horizontal"), up_down, Input.GetAxis("Vertical"));

                m_ped.Movement = Vector3.Scale(Camera.transform.TransformVector(inputMove),
                                               new Vector3(1f, 1f, 1f)).normalized;

                m_ped.Movement *= 10.0f;

                if (Input.GetKey(KeyCode.LeftShift))
                {
                    m_ped.Movement *= 10.0f;
                }
                else if (Input.GetKey(KeyCode.Z))
                {
                    m_ped.Movement *= 100.0f;
                }

                return;
            }


            m_ped.WeaponHolder.IsAimOn  = m_ped.WeaponHolder.IsHoldingWeapon && Input.GetMouseButton(1);
            m_ped.WeaponHolder.IsFireOn = m_ped.WeaponHolder.IsHoldingWeapon && Input.GetMouseButton(0);

            //if (!_player.WeaponHolder.IsAimOn)
            {
                // give input to player

                m_ped.IsJumpOn = Input.GetKey(m_jumpKey);

                Vector3 inputMove = Vector3.zero;
                if (m_smoothMovement)
                {
                    inputMove = new Vector3(Input.GetAxis("Horizontal"), 0f, Input.GetAxis("Vertical"));
                }
                else
                {
                    inputMove = new Vector3(Input.GetAxisRaw("Horizontal"), 0f, Input.GetAxisRaw("Vertical"));
                }

                if (inputMove.sqrMagnitude > 0f)
                {
                    inputMove.Normalize();

                    if (Input.GetKey(m_walkKey))
                    {
                        m_ped.IsWalking = true;
                    }
                    else if (Input.GetKey(m_sprintKey))
                    {
                        m_ped.IsSprinting = true;
                    }
                    else
                    {
                        m_ped.IsRunning = true;
                    }
                }

                m_ped.Movement = Vector3.Scale(Camera.transform.TransformVector(inputMove),
                                               new Vector3(1f, 0f, 1f)).normalized;

                // player heading should be assigned here, not in Player class
                //	if (!_player.IsAiming)
                {
                    if (m_ped.Movement.sqrMagnitude > float.Epsilon)
                    {
                        m_ped.Heading = m_ped.Movement;
                    }
                }
            }


            if (!Input.GetButtonDown("Use"))
            {
                return;
            }

            // find any vehicles that have a seat inside the checking radius and sort by closest seat
            var vehicles = FindObjectsOfType <Vehicle>()
                           .Where(x => Vector3.Distance(transform.position, x.FindClosestSeatTransform(transform.position).position) < EnterVehicleRadius)
                           .OrderBy(x => Vector3.Distance(transform.position, x.FindClosestSeatTransform(transform.position).position)).ToArray();

            foreach (var vehicle in vehicles)
            {
                var seat = vehicle.FindClosestSeat(transform.position);

                m_ped.EnterVehicle(vehicle, seat);

                break;
            }
        }