void OnEnable() { #if UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX || UNITY_EDITOR_LINUX || UNITY_STANDALONE_LINUX Debug.Log("[Holoplay] Multi-display not supported on OSX or Linux."); bgCam.enabled = false; canvas.targetDisplay = 0; holoplay.targetDisplay = PluginCore.GetLKGunityIndex(0); singleDisplayMode = true; #else singleDisplayMode = false; if (!Application.isEditor) { singleDisplayMode = Display.displays.Length < 2; } if (singleDisplayMode) { Debug.Log("[Holoplay] Extended UI: single display mode"); bgCam.enabled = false; return; } PluginCore.GetLoadResults(); if (CalibrationManager.GetCalibrationCount() < 1) { Debug.Log("[Holoplay] No LKG detected for extended UI"); bgCam.enabled = false; holoplay.targetDisplay = 0; return; } // continue with actual extended ui logic // set Holoplay target display to the lkg display holoplay.targetDisplay = PluginCore.GetLKGunityIndex(0); holoplay.ReloadCalibration(); // must reload calibration after setting targetdisplay if (!Application.isEditor) { Display.displays[holoplay.targetDisplay].Activate(); // Display.displays[holoplay.targetDisplay].SetRenderingResolution(holoplay.cal.screenHeight, // holoplay.cal.screenHeight); // TODO: nothing works here // #if UNITY_STANDALONE_WIN // Display.displays[holoplay.targetDisplay].SetParams( // holoplay.cal.screenWidth, holoplay.cal.screenHeight, // holoplay.cal.xpos, holoplay.cal.ypos // ); // Debug.LogFormat("{0}, {1}, {2}, {3}", // holoplay.cal.screenWidth, holoplay.cal.screenHeight, // holoplay.cal.xpos, holoplay.cal.ypos); // #endif } // set the canvas target display to the main display canvas.targetDisplay = 0; if (bgCam) { bgCam.enabled = true; bgCam.targetDisplay = 0; } #endif }
static void CloseExtraHoloplayWindows() { var currentWindows = Resources.FindObjectsOfTypeAll(gameViewWindowType); PluginCore.GetLoadResults(); if (manualPreviewSettings != null && CalibrationManager.GetCalibrationCount() < 1) { foreach (EditorWindow w in currentWindows) { if (w.name == "Holoplay") { w.Close(); Debug.Log("[Holoplay] Closing extra Holoplay window"); } } } EditorApplication.update -= CloseExtraHoloplayWindows; }
// todo: possibly add more vars from the Holoplay for consistency // functions void OnEnable() { PluginCore.GetLoadResults(); // update warning int i; showUpdateWarning = false; for (i = 0; i < CalibrationManager.GetCalibrationCount(); i++) { if (CalibrationManager.GetCalibration(i).LKGname == "LKG") { showUpdateWarning = true; } } initialSetup = true; // Debug.Log("onenable"); Setup(initialSetup); initialSetup = false; }
void Setup(bool reloadCalibration = false) { // Debug.Log("set up multiplxing"); // if there's no holoplays, just return if (holoplays == null || holoplays.Length == 0) { return; } // limit rows and columns to 8 units columns = Mathf.Clamp(columns, 1, 8); rows = Mathf.Clamp(rows, 1, 8 / columns); if (holoplays.Length > 8) { Debug.Log("[Holoplay] Multiplex cannot support more than 8 Holoplay Captures"); System.Array.Resize(ref holoplays, 8); } // return if it's not automatic arrangement if (!automaticArrangement) { return; } LoadResults loadResults = PluginCore.GetLoadResults(); if (!loadResults.calibrationFound) { return; } // first sort displays List <DisplayPositioner> targetDisplayPositions = new List <DisplayPositioner>(); for (int lkg = 0; lkg < CalibrationManager.GetCalibrationCount(); lkg++) { targetDisplayPositions.Add(new DisplayPositioner() { targetLKG = lkg, targetDisplay = PluginCore.GetLKGunityIndex(lkg), position = new Vector2Int( Mathf.RoundToInt(CalibrationManager.GetCalibration(lkg).xpos / 100f), Mathf.RoundToInt(CalibrationManager.GetCalibration(lkg).ypos / 100f) ) }); } targetDisplayPositions.Sort(); // automatic arrangement int i = 0; float totalCenterSweep = 0f; float horizontalOffsetSweep = 0f; float verticalOffsetSweep = 0f; if (columns > 1) { // hard coded magic number of 8 for now totalCenterSweep = 8f * Holoplay.Instance.cal.aspect * (columns - 1f) / Holoplay.Instance.cal.viewCone; horizontalOffsetSweep = 2f * (columns - 1f); } if (rows > 1) { verticalOffsetSweep = -2f * (rows - 1f); // -Holoplay.Instance.fov * 0.5f * (rows - 1f); } for (int x = 0; x < columns; x++) { for (int y = 0; y < rows; y++) { var h = holoplays[i]; h.gameObject.SetActive(true); h.size = size; int yi = rows - 1 - y; float xOffset = x - (columns - 1) * 0.5f; float yOffset = yi - (rows - 1) * 0.5f; float span = size * (1f + separation); h.transform.localPosition = new Vector3(2f * xOffset * h.cal.aspect * span, 2f * yOffset * span); float offsetLerpX = columns > 1 ? ((float)x / (columns - 1f) - 0.5f) : 0f; float offsetLerpY = rows > 1 ? ((float)y / (rows - 1f) - 0.5f) : 0f; h.centerOffset = offsetLerpX * totalCenterSweep * frustumShifting; h.horizontalFrustumOffset = offsetLerpX * horizontalOffsetSweep * frustumShifting; h.verticalFrustumOffset = offsetLerpY * verticalOffsetSweep * frustumShifting; if (reloadCalibration) { if (targetDisplayPositions.Count > i) { h.targetDisplay = targetDisplayPositions[i].targetDisplay; h.targetLKG = targetDisplayPositions[i].targetLKG; h.cal.index = h.targetLKG; // Debug.Log(h.name + " is set to be target at display " + h.targetDisplay); h.ReloadCalibration(); if (Display.displays.Length > h.targetDisplay) { // Debug.Log("active display:"+h.targetDisplay); Display.displays[h.targetDisplay].Activate(); Display.displays[h.targetDisplay].SetRenderingResolution(h.cal.screenWidth, h.cal.screenHeight); } } else { Debug.LogWarning("[Holoplay] Not enough displays connected for current multiview setup"); } } i++; } } // disable the inactive ones while (i < 8) { holoplays[i].gameObject.SetActive(false); i++; } }