From f69fb6a7bb3df7c2d07e4b63d3f8692bab398377 Mon Sep 17 00:00:00 2001 From: hecomi Date: Wed, 9 Nov 2016 00:50:57 +0900 Subject: [PATCH] remove monitor if unsupported. --- .../Scripts/MultipleMonitorCreator.cs | 40 +++++++++++++++++-- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/Assets/uDesktopDuplication/Examples/Scripts/MultipleMonitorCreator.cs b/Assets/uDesktopDuplication/Examples/Scripts/MultipleMonitorCreator.cs index 6c2bd7f..476719f 100644 --- a/Assets/uDesktopDuplication/Examples/Scripts/MultipleMonitorCreator.cs +++ b/Assets/uDesktopDuplication/Examples/Scripts/MultipleMonitorCreator.cs @@ -4,6 +4,10 @@ using System.Collections.Generic; public class MultipleMonitorCreator : MonoBehaviour { [SerializeField] GameObject monitorPrefab; + [SerializeField] bool removeIfUnsupported = true; + [SerializeField] float removeWaitDuration = 5f; + bool hasMonitorUnsupportStateChecked = false; + float removeWaitTimer_ = 0f; public class MonitorInfo { @@ -13,14 +17,21 @@ public class MultipleMonitorCreator : MonoBehaviour public Vector3 meshBounds; } - private List monitors_ = new List(); - public List monitors { get { return monitors_; } } + private List monitors_ = new List(); + public List monitors { get { return monitors_; } } void Start() { Create(); } + void Update() + { + if (removeIfUnsupported) { + RemoveUnsupportedDisplayAfterRemoveTimer(); + } + } + void OnEnable() { uDesktopDuplication.Manager.onReinitialized += Recreate; @@ -31,14 +42,37 @@ public class MultipleMonitorCreator : MonoBehaviour uDesktopDuplication.Manager.onReinitialized -= Recreate; } + void RemoveUnsupportedDisplayAfterRemoveTimer() + { + if (!hasMonitorUnsupportStateChecked) { + removeWaitTimer_ += Time.deltaTime; + if (removeWaitTimer_ > removeWaitDuration) { + hasMonitorUnsupportStateChecked = true; + foreach (var info in monitors_) { + if (info.uddTexture.monitor.state == uDesktopDuplication.MonitorState.Unsupported) { + Destroy(info.gameObject); + } + } + } + } + } + + void ResetRemoveTimer() + { + hasMonitorUnsupportStateChecked = false; + removeWaitTimer_ = 0f; + } + void Create() { + ResetRemoveTimer(); + // Sort monitors in coordinate order var monitors = uDesktopDuplication.Manager.monitors; monitors.Sort((a, b) => a.left - b.left); // Create monitors - for (int i = 0 ; i < uDesktopDuplication.Manager.monitorCount; ++i) { + for (int i = 0; i < uDesktopDuplication.Manager.monitorCount; ++i) { // Create monitor obeject var go = Instantiate(monitorPrefab); go.name = "Monitor " + i;