support option to choise real / fixed scale.

This commit is contained in:
hecomi
2016-11-13 23:18:00 +09:00
parent 5a3af11d08
commit dc702c6e1d
3 changed files with 39 additions and 13 deletions
@@ -4,9 +4,26 @@ using MeshForwardDirection = uDesktopDuplication.Texture.MeshForwardDirection;
public class MultipleMonitorCreator : MonoBehaviour
{
[SerializeField] GameObject monitorPrefab;
[SerializeField] bool removeIfUnsupported = true;
[SerializeField] float removeWaitDuration = 5f;
[Tooltip("Create monitors using this prefab.")]
[SerializeField]
GameObject monitorPrefab;
[Tooltip("Use same scale as real using DPI.")]
[SerializeField]
bool useRealScale = true;
[Tooltip("Use this sacle as width if useRealScale is false.")]
[SerializeField]
float scale = 0.5f;
[Tooltip("Remove unsupported monitors automatically after removeWaitDuration.")]
[SerializeField]
bool removeIfUnsupported = true;
[Tooltip("Remove unsupported monitors automatically after removeWaitDuration.")]
[SerializeField]
float removeWaitDuration = 5f;
bool hasMonitorUnsupportStateChecked = false;
float removeWaitTimer_ = 0f;
@@ -96,10 +113,18 @@ public class MultipleMonitorCreator : MonoBehaviour
var monitor = texture.monitor;
// Set width / height
if (meshForwardDirection == MeshForwardDirection.Y) {
go.transform.localScale = new Vector3(monitor.widthMeter, go.transform.localScale.y, monitor.heightMeter);
float width, height;
if (useRealScale) {
width = monitor.widthMeter;
height = monitor.heightMeter;
} else {
go.transform.localScale = new Vector3(monitor.widthMeter, monitor.heightMeter, go.transform.localScale.z);
width = scale * (monitor.isHorizontal ? 1f : monitor.aspect);
height = scale * (monitor.isHorizontal ? 1f / monitor.aspect : 1f);
}
if (meshForwardDirection == MeshForwardDirection.Y) {
go.transform.localScale = new Vector3(width, go.transform.localScale.y, height);
} else {
go.transform.localScale = new Vector3(width, height, go.transform.localScale.z);
}
// Set parent as this object
@@ -126,7 +151,8 @@ public class MultipleMonitorCreator : MonoBehaviour
monitors_.Clear();
}
void Recreate()
[ContextMenu("Recreate")]
public void Recreate()
{
Clear();
Create();
@@ -30,7 +30,7 @@ public class MultipleMonitorLayouter : MonoBehaviour
var totalWidth = 0f;
foreach (var info in monitors) {
var width = info.uddTexture.monitor.widthMeter * (info.mesh.bounds.extents.x * 2f);
var width = info.gameObject.transform.localEulerAngles.x * (info.mesh.bounds.extents.x * 2f);
totalWidth += width;
}
totalWidth += margin * (n - 1);
@@ -38,11 +38,11 @@ public class MultipleMonitorLayouter : MonoBehaviour
var x = -totalWidth / 2;
foreach (var info in monitors) {
var monitor = info.uddTexture.monitor;
x += (monitor.widthMeter * info.mesh.bounds.extents.x);
var width = info.gameObject.transform.localEulerAngles.x;
x += (width * info.mesh.bounds.extents.x);
info.gameObject.transform.localPosition = new Vector3(x, 0f, 0f);
info.gameObject.transform.localRotation = info.originalRotation;
x += (monitor.widthMeter * info.mesh.bounds.extents.x) + margin;
x += (width * info.mesh.bounds.extents.x) + margin;
}
foreach (var info in monitors) {
@@ -19,7 +19,7 @@ public class MultipleMonitorRoundLayouter : MultipleMonitorLayouter
var totalWidth = 0f;
foreach (var info in monitors) {
var width = info.uddTexture.monitor.widthMeter * (info.mesh.bounds.extents.x * 2f);
var width = info.gameObject.transform.localScale.x * (info.mesh.bounds.extents.x * 2f);
totalWidth += width;
}
totalWidth += margin * (n - 1);
@@ -30,7 +30,7 @@ public class MultipleMonitorRoundLayouter : MultipleMonitorLayouter
float angle = -totalAngle / 2 + offsetAngle * Mathf.Deg2Rad;
foreach (var info in monitors) {
var uddTex = info.uddTexture;
var width = uddTex.monitor.widthMeter * (info.mesh.bounds.extents.x * 2f);
var width = info.gameObject.transform.localScale.x * (info.mesh.bounds.extents.x * 2f);
angle += (width / radius) * 0.5f;
uddTex.transform.localPosition = radius * new Vector3(Mathf.Sin(angle), 0f, Mathf.Cos(angle) - 1f);