diff --git a/Assets/RightController.cs b/Assets/RightController.cs index 58ec443..3c581f1 100755 --- a/Assets/RightController.cs +++ b/Assets/RightController.cs @@ -5,7 +5,25 @@ public class RightController : MonoBehaviour { public GameObject banana; public GameObject viveController; - // Use this for initialization + SteamVR_TrackedController trackedController; + WarehouseColumn warehouse; + + WarehouseRow whRow = null; + Vector3? whScrollStartPos = null; + float whScrollDistance; + float whBaseOffset = 0.0f; + float whScrollOffset = 0.0f; + float whRowBaseOffset = 0.0f; + float whRowScrollOffset = 0.0f; + + void Awake() { + trackedController = GetComponent(); + trackedController.TriggerClicked += triggerClicked; + trackedController.TriggerUnclicked += triggerUnclicked; + + warehouse = GameObject.Find("Warehouse/Shelves/Column").GetComponent(); + } + void Start () { GetComponent().LeaveView += toggleBanana; } @@ -15,7 +33,51 @@ public class RightController : MonoBehaviour { viveController.SetActive(!viveController.activeSelf); } - // Update is called once per frame void Update () { + + // Warehouse scroll + if (whScrollStartPos != null) { + Vector3 curPos = transform.position + (transform.forward * whScrollDistance); + + whScrollOffset = (curPos - whScrollStartPos).Value.y; + whRowScrollOffset = (curPos - whScrollStartPos).Value.x; + + warehouse.Offset = whBaseOffset + (-whScrollOffset); + whRow.Offset = whRowBaseOffset + whRowScrollOffset; + } } + + RaycastHit raycast() { + var ray = new Ray(transform.position, transform.forward); + RaycastHit hit; + bool bHit = Physics.Raycast(ray, out hit); + return hit; + } + + void triggerClicked(object sender, ClickedEventArgs e) { + var ray = new Ray(transform.position, transform.forward); + RaycastHit result; + bool hit = Physics.Raycast(ray, out result); + + if (!hit) { + return; + } + + var item = result.transform.GetComponent(); + if (!item) { + return; + } + + whScrollStartPos = result.point; + whScrollDistance = result.distance; + whRow = item.GetComponentInParent(); + whBaseOffset = warehouse.Offset; + whRowBaseOffset = whRow.Offset; + } + + void triggerUnclicked(object sender, ClickedEventArgs e) { + if (whScrollStartPos != null) { + whScrollStartPos = null; + } + } } diff --git a/Assets/Test.unity b/Assets/Test.unity index 83592ac..31c35fa 100755 Binary files a/Assets/Test.unity and b/Assets/Test.unity differ diff --git a/Assets/Warehouse Row.prefab b/Assets/Warehouse Row.prefab index 16a6097..d9e76d4 100755 Binary files a/Assets/Warehouse Row.prefab and b/Assets/Warehouse Row.prefab differ diff --git a/Assets/WarehouseColumn.cs b/Assets/WarehouseColumn.cs index 6b534b6..667b79d 100755 --- a/Assets/WarehouseColumn.cs +++ b/Assets/WarehouseColumn.cs @@ -8,7 +8,7 @@ public class WarehouseColumn : MonoBehaviour { private BezierCurve curve; private Transform rows; - private float offset = 0.0f; + public float Offset { get; set; } void Awake() { curve = transform.Find("Curve").GetComponent(); @@ -21,12 +21,12 @@ public class WarehouseColumn : MonoBehaviour { void Update() { if (Application.isPlaying) { - offset += Time.deltaTime; + //offset += Time.deltaTime; } foreach (Transform row in rows) { var i = row.GetSiblingIndex(); - var distance = (float)i / (rows.childCount) * curve.length + offset; + var distance = (float)i / (rows.childCount) * curve.length + Offset; distance = Mathf.Repeat(distance, curve.length); var pos = curve.GetPointAtDistance(distance); row.position = pos; diff --git a/Assets/WarehouseRow.cs b/Assets/WarehouseRow.cs index ccd9eef..110a6e1 100755 --- a/Assets/WarehouseRow.cs +++ b/Assets/WarehouseRow.cs @@ -7,11 +7,11 @@ using UnityEditor; public class WarehouseRow : MonoBehaviour { public string Category; + public float Offset { get; set; } + BezierCurve curve; Transform furniture; - float offset = 0; - void Awake() { curve = transform.Find("Curve").GetComponent(); furniture = transform.Find("Furniture"); @@ -43,7 +43,7 @@ public class WarehouseRow : MonoBehaviour { foreach (Transform t in furniture) { var i = t.GetSiblingIndex(); - var distance = (float)i / (furniture.childCount) * curve.length + offset; + var distance = (float)i / (furniture.childCount) * curve.length + Offset; distance = Mathf.Repeat(distance, curve.length); var pos = curve.GetPointAtDistance(distance); t.position = pos;