summaryrefslogtreecommitdiff
path: root/Other/NavMeshTest/Assets/Scripts/Prop/Switch.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Other/NavMeshTest/Assets/Scripts/Prop/Switch.cs')
-rw-r--r--Other/NavMeshTest/Assets/Scripts/Prop/Switch.cs63
1 files changed, 63 insertions, 0 deletions
diff --git a/Other/NavMeshTest/Assets/Scripts/Prop/Switch.cs b/Other/NavMeshTest/Assets/Scripts/Prop/Switch.cs
new file mode 100644
index 0000000..1312616
--- /dev/null
+++ b/Other/NavMeshTest/Assets/Scripts/Prop/Switch.cs
@@ -0,0 +1,63 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public abstract class Switchable : MonoBehaviour
+{
+ public virtual void OnSwitch(bool on)
+ { }
+}
+
+
+public class Switch : MonoBehaviour
+{
+ public Switchable target;
+
+ public Transform bar;
+
+ public Vector2 rotationRange;
+
+ private bool m_IsOn;
+
+ private void Start()
+ {
+ m_IsOn = false;
+ OnPressed();
+ }
+
+ private void Update()
+ {
+ if(Input.GetMouseButtonDown(0))
+ {
+ Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
+ RaycastHit info;
+ if (Physics.Raycast(ray, out info))
+ {
+ if(info.collider.gameObject == gameObject)
+ {
+ m_IsOn = !m_IsOn;
+
+ OnPressed();
+
+ if (target != null)
+ {
+ target.OnSwitch(m_IsOn);
+ }
+ }
+ }
+ }
+ }
+
+ void OnPressed()
+ {
+ if(m_IsOn)
+ {
+ bar.localRotation = Quaternion.Euler(0, 0, rotationRange.x);
+ }
+ else
+ {
+ bar.localRotation = Quaternion.Euler(0, 0, rotationRange.y);
+ }
+ }
+
+} \ No newline at end of file