Exemplo n.º 1
0
    private void Movement()
    {
        if (Lives == 0)
        {
            return;
        }

        Vector3 velocity = Vector3.zero;
        byte    keys     = 0b0000;

        if (CurrentTask == null && !IsFlying)
        {
            if (Input.GetKey(KeyCode.W))
            {
                velocity += new Vector3(1f, 0f, 0f);
                keys     |= 0b1;
            }

            if (Input.GetKey(KeyCode.S))
            {
                velocity += new Vector3(-1f, 0f, 0f);
                keys     |= 0b10;
            }

            if (Input.GetKey(KeyCode.A))
            {
                velocity += new Vector3(0f, 0f, 1f);
                keys     |= 0b100;
            }

            if (Input.GetKey(KeyCode.D))
            {
                velocity += new Vector3(0f, 0f, -1f);
                keys     |= 0b1000;
            }

            if (keys != 0b0)
            {
                transform.eulerAngles = Utils.GetEulerByKeys(keys);
            }
        }

        if (velocity != Vector3.zero)
        {
            if (!velocity.x.Equals(0f) && !velocity.z.Equals(0f))
            {
                velocity.x *= .7f;
                velocity.z *= .7f;
            }

            velocity *= Speed;
        }

        if (!IsFlying)
        {
            if (keys != _syncMovementKeys || velocity == Vector3.zero && _oldVelocity != velocity)
            {
                CmdSyncMovement(transform.position, keys);
            }

            _oldVelocity = velocity;

            velocity.y = _rigidbody.velocity.y;

            _rigidbody.velocity = velocity;
        }

        if ((Input.GetKeyDown(KeyCode.Space) || Input.GetKeyDown(KeyCode.E)) && CurrentTask == null)
        {
            GameTask task =
                PhysicsUtils
                .GetNearestObjectHit <GameTask>(Physics.SphereCastAll(transform.position, Distance, Vector3.up, Distance), transform);
            if (task != null && (task.HunterActive && IsHunter || task.VictimActive && !IsHunter))
            {
                CmdTaskOpen(task.gameObject);
            }
        }

        if (Input.GetKeyDown(KeyCode.Escape) && CurrentTask != null && CurrentTask.Closeable)
        {
            CurrentTask.OnTaskCloseClient();
            CmdTaskClose();
        }

        if (CurrentTask != null && CurrentTask.IsFirstCome)
        {
            CurrentTask.OnTaskUpdateClient();
        }
    }