diff --git a/Sensors/TouchSensor.cs b/Sensors/TouchSensor.cs new file mode 100644 index 0000000..1553ee8 --- /dev/null +++ b/Sensors/TouchSensor.cs @@ -0,0 +1,17 @@ + +namespace Passer.Control.Core { + public class TouchSensor : Thing { + //public Thing touchedThing = null; + public bool touchedSomething = false; + + public TouchSensor(bool invokeEvent = true) : base(invokeEvent) { + } + +#if UNITY_5_3_OR_NEWER + public override void CreateComponent() { + this.component = Unity.TouchSensor.Create(this); + this.component.core = this; + } +#endif + } +} \ No newline at end of file diff --git a/Unity/DistanceSensor.cs b/Unity/DistanceSensor.cs index b7a8d0d..ac74b78 100644 --- a/Unity/DistanceSensor.cs +++ b/Unity/DistanceSensor.cs @@ -7,7 +7,6 @@ namespace Passer.Control.Unity { public class DistanceSensor : Thing { public new Core.DistanceSensor core { - get => (Core.DistanceSensor)base.core; get => (Core.DistanceSensor)base.core; set => base.core = value; } diff --git a/Unity/SiteServer.cs b/Unity/SiteServer.cs index 6431eb3..f809360 100644 --- a/Unity/SiteServer.cs +++ b/Unity/SiteServer.cs @@ -28,9 +28,8 @@ namespace Passer.Control.Unity { protected virtual void Update() { site.Update((ulong)(Time.time * 1000)); - if (thingQueue.TryDequeue(out Core.Thing thing)) { - thing.CreateComponent(); - } + while (thingQueue.TryDequeue(out Core.Thing thing)) + thing.CreateComponent(); } } diff --git a/Unity/TouchSensor.cs b/Unity/TouchSensor.cs new file mode 100644 index 0000000..a666f6b --- /dev/null +++ b/Unity/TouchSensor.cs @@ -0,0 +1,57 @@ +#if UNITY_5_3_OR_NEWER +using UnityEngine; + +namespace Passer.Control.Unity { + + public class TouchSensor : Thing { + + public Core.TouchSensor coreSensor { + get => (Core.TouchSensor)base.core; + } + + protected virtual void Start() { + if (core == null) + SetCoreThing(new Core.TouchSensor()); + + } + + public static TouchSensor Create(Core.TouchSensor core) { + GameObject gameObj = core.name != null ? + new(core.name) : + new("Touch Sensor"); + TouchSensor component = gameObj.AddComponent(); + Rigidbody rb = gameObj.AddComponent(); + rb.isKinematic = true; + + SphereCollider collider = gameObj.AddComponent(); + collider.radius = 0.01F; + collider.isTrigger = true; + + component.core = core; + if (core.parent != null && core.parent.component != null) + gameObj.transform.SetParent(core.parent.component.transform, false); + + if (core.position != null) + gameObj.transform.localPosition = core.position.ToVector3(); + + return component; + } + + private void OnTriggerEnter(Collider other) { + if (other.isTrigger) + return; + if (this.transform.root == other.transform.root) + return; + + Debug.Log($"touched {other.gameObject.name}"); + this.coreSensor.touchedSomething = true; + } + private void OnTriggerExit(Collider other) { + if (other.isTrigger) + return; + + this.coreSensor.touchedSomething = false; + } + } +} +#endif \ No newline at end of file