private void OnUpdateCameraMatrix(On.tk2dCamera.orig_UpdateCameraMatrix orig, tk2dCamera self) { orig(self); // Can't use ?. on a Unity type because they override == to null. if (GameCameras.instance == null || GameCameras.instance.tk2dCam == null) { return; } UCamera cam = GameCameras.instance.tk2dCam.GetAttr <tk2dCamera, UCamera>("_unityCamera"); if (cam == null) { return; } Matrix4x4 p = cam.projectionMatrix; if (_activeEffects.HasValue(CameraEffects.Nausea)) { p.m01 += Mathf.Sin(Time.time * 1.2f) * 1f; p.m10 += Mathf.Sin(Time.time * 1.5f) * 1f; } if (_activeEffects.HasValue(CameraEffects.Flip)) { _reflectMatrix[1, 1] = -1; p *= _reflectMatrix; } if (_activeEffects.HasValue(CameraEffects.Mirror)) { _reflectMatrix[0, 0] = -1; p *= _reflectMatrix; } if (_activeEffects.HasValue(CameraEffects.Zoom)) { // ReSharper disable once SuggestVarOrType_DeconstructionDeclarations var(x, y, _) = HeroController.instance.gameObject.transform.position; GameManager.instance.cameraCtrl.SnapTo(x, y); } cam.projectionMatrix = p; }