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(); } }