Update docs/cleanup
This commit is contained in:
parent
ae1e43a332
commit
f611a0755c
@ -2,54 +2,77 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace RoboidControl.Unity {
|
||||
|
||||
/// <summary>
|
||||
/// The Unity representation of a Roboid Control differential drive
|
||||
/// </summary>
|
||||
public class DifferentialDrive : Thing {
|
||||
|
||||
public Wheel leftWheel;
|
||||
public Wheel rightWheel;
|
||||
public SphereCollider casterWheel;
|
||||
|
||||
protected RoboidControl.DifferentialDrive coreDrive => core as RoboidControl.DifferentialDrive;
|
||||
/// <summary>
|
||||
/// The core differential drive
|
||||
/// </summary>
|
||||
public RoboidControl.DifferentialDrive coreDrive => core as RoboidControl.DifferentialDrive;
|
||||
|
||||
/// <summary>
|
||||
/// Create the Unity representation
|
||||
/// </summary>
|
||||
/// <param name="core">The core touch sensor</param>
|
||||
/// <param name="coreDrive">The core touch sensor</param>
|
||||
/// <returns>The Unity representation of the touch sensor</returns>
|
||||
public static DifferentialDrive Create(RoboidControl.DifferentialDrive core) {
|
||||
DifferentialDrive component = null;
|
||||
Rigidbody rb = null;
|
||||
/// This uses a 'DifferentialDrive' resource when available for the Unity representation.
|
||||
/// If this is not available, a default representation is created.
|
||||
public static DifferentialDrive Create(RoboidControl.DifferentialDrive coreDrive) {
|
||||
DifferentialDrive differentialDrive;
|
||||
GameObject prefab = (GameObject)Resources.Load("DifferentialDrive");
|
||||
if (prefab != null) {
|
||||
// Use resource prefab when available
|
||||
GameObject gameObj = Instantiate(prefab);
|
||||
component = gameObj.GetComponent<DifferentialDrive>();
|
||||
if (component != null)
|
||||
component.core = core;
|
||||
|
||||
rb = component.GetComponent<Rigidbody>();
|
||||
differentialDrive = gameObj.GetComponent<DifferentialDrive>();
|
||||
differentialDrive.Init(coreDrive);
|
||||
}
|
||||
else {
|
||||
// Fallback implementation
|
||||
GameObject gameObj = new(core.name);
|
||||
component = gameObj.AddComponent<DifferentialDrive>();
|
||||
component.Init(core);
|
||||
// Default implementation
|
||||
GameObject gameObj = new(coreDrive.name);
|
||||
differentialDrive = gameObj.AddComponent<DifferentialDrive>();
|
||||
differentialDrive.Init(coreDrive);
|
||||
|
||||
rb = gameObj.AddComponent<Rigidbody>();
|
||||
Rigidbody rb = gameObj.AddComponent<Rigidbody>();
|
||||
rb.isKinematic = false;
|
||||
rb.mass = 0.1f;
|
||||
}
|
||||
return component;
|
||||
return differentialDrive;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The left wheel of the differential drive
|
||||
/// </summary>
|
||||
public Wheel leftWheel;
|
||||
/// <summary>
|
||||
/// The right wheel of the differential drive
|
||||
/// </summary>
|
||||
public Wheel rightWheel;
|
||||
/// <summary>
|
||||
/// The caster wheel to keep the differential drive horizontal
|
||||
/// </summary>
|
||||
public SphereCollider casterWheel;
|
||||
|
||||
/// <summary>
|
||||
/// The rigidbody of the differential drive
|
||||
/// </summary>
|
||||
private Rigidbody rb = null;
|
||||
|
||||
/// <summary>
|
||||
/// Start the Unity representation
|
||||
/// </summary>
|
||||
protected virtual void Start() {
|
||||
rb = GetComponent<Rigidbody>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Handle the binary event indicating a configuration change
|
||||
/// </summary>
|
||||
protected override void HandleBinary() {
|
||||
Debug.Log("Diff drive handle Binary");
|
||||
if (coreDrive.wheelRadius <= 0) // || coreDrive.wheelSeparation <= 0)
|
||||
// Ignore it when the wheel radius is not set
|
||||
if (coreDrive.wheelRadius <= 0)
|
||||
return;
|
||||
|
||||
// Destroy any (generic) thing with the same id
|
||||
@ -66,7 +89,6 @@ namespace RoboidControl.Unity {
|
||||
leftWheel.core ??= coreDrive.leftWheel;
|
||||
SphereCollider leftWheelCollider = leftWheel.GetComponent<SphereCollider>();
|
||||
leftWheelCollider.radius = coreDrive.wheelRadius;
|
||||
// leftWheelCollider.center = new Vector3(-coreDrive.wheelSeparation / 2, 0, 0);
|
||||
}
|
||||
|
||||
// Destroy any (generic) thing with the same id
|
||||
@ -83,7 +105,6 @@ namespace RoboidControl.Unity {
|
||||
rightWheel.core ??= coreDrive.rightWheel;
|
||||
SphereCollider rightWheelCollider = rightWheel.GetComponent<SphereCollider>();
|
||||
rightWheelCollider.radius = coreDrive.wheelRadius;
|
||||
// rightWheelCollider.center = new Vector3(coreDrive.wheelSeparation / 2, 0, 0);
|
||||
}
|
||||
|
||||
if (casterWheel == null) {
|
||||
@ -99,6 +120,9 @@ namespace RoboidControl.Unity {
|
||||
casterWheel.center = new Vector3(0, 0, -wheelSeparation);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Update the Unity representation state
|
||||
/// </summary>
|
||||
protected override void FixedUpdate() {
|
||||
base.FixedUpdate();
|
||||
|
||||
|
@ -5,42 +5,45 @@ using UnityEngine;
|
||||
namespace RoboidControl.Unity {
|
||||
|
||||
/// <summary>
|
||||
/// The Unity representation of a distance sensor
|
||||
/// The Unity representation of a Roboid Control distance sensor
|
||||
/// </summary>
|
||||
public class DistanceSensor : Thing {
|
||||
|
||||
/// <summary>
|
||||
/// The core distance sensor
|
||||
/// </summary>
|
||||
public new RoboidControl.DistanceSensor core {
|
||||
get => (RoboidControl.DistanceSensor)base.core;
|
||||
set => base.core = value;
|
||||
}
|
||||
public RoboidControl.DistanceSensor coreSensor => base.core as RoboidControl.DistanceSensor;
|
||||
|
||||
/// <summary>
|
||||
/// Start the Unity representation
|
||||
/// </summary>
|
||||
protected virtual void Start() {
|
||||
if (core == null) {
|
||||
SiteServer siteServer = FindAnyObjectByType<SiteServer>();
|
||||
SetCoreThing(new RoboidControl.DistanceSensor(siteServer.site));
|
||||
}
|
||||
|
||||
StartCoroutine(MeasureDistance());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Create the Unity representation of the distance sensor
|
||||
/// </summary>
|
||||
/// <param name="parent">The parent of the core distance sensor</param>
|
||||
/// <param name="core">The core distance sensor</param>
|
||||
/// <returns>The Unity representation of the distance sensor</returns>
|
||||
public static DistanceSensor Create(RoboidControl.DistanceSensor core) {
|
||||
GameObject distanceObj = new("Distance sensor");
|
||||
DistanceSensor component = distanceObj.AddComponent<DistanceSensor>();
|
||||
if (core.parent != null && core.parent.component != null)
|
||||
distanceObj.transform.SetParent(core.parent.component.transform, false);
|
||||
|
||||
return component;
|
||||
/// This uses a 'DistanceSensor' resource when available for the Unity representation.
|
||||
/// If this is not available, a default representation is created.
|
||||
public static DistanceSensor Create(RoboidControl.DistanceSensor coreSensor) {
|
||||
DistanceSensor distanceSensor;
|
||||
GameObject prefab = (GameObject)Resources.Load("DistanceSensor");
|
||||
if (prefab != null) {
|
||||
// Use resource prefab when available
|
||||
GameObject gameObj = Instantiate(prefab);
|
||||
distanceSensor = gameObj.GetComponent<DistanceSensor>();
|
||||
distanceSensor.Init(coreSensor);
|
||||
}
|
||||
else {
|
||||
// Default implementation
|
||||
GameObject distanceObj = new(coreSensor.name);
|
||||
distanceSensor = distanceObj.AddComponent<DistanceSensor>();
|
||||
distanceSensor.Init(coreSensor);
|
||||
}
|
||||
return distanceSensor;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -53,10 +56,10 @@ namespace RoboidControl.Unity {
|
||||
Thing thing = hitInfo.transform.GetComponentInParent<Thing>();
|
||||
if (thing == null) {
|
||||
// Debug.Log($"collision {hitInfo.transform.name} {hitInfo.distance}");
|
||||
core.distance = hitInfo.distance;
|
||||
coreSensor.distance = hitInfo.distance;
|
||||
}
|
||||
else
|
||||
core.distance = 0;
|
||||
coreSensor.distance = 0;
|
||||
}
|
||||
yield return new WaitForSeconds(0.1f);
|
||||
}
|
||||
|
@ -2,50 +2,73 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace RoboidControl.Unity {
|
||||
/// <summary>
|
||||
/// The Unity representation of a Roboid Control motor
|
||||
/// </summary>
|
||||
public class Motor : Thing {
|
||||
|
||||
public float maxSpeed = 5;
|
||||
/// <summary>
|
||||
/// Create the Unity representation
|
||||
/// The core motor
|
||||
/// </summary>
|
||||
/// <param name="core">The core motor</param>
|
||||
public RoboidControl.Motor coreMotor => base.core as RoboidControl.Motor;
|
||||
|
||||
/// <summary>
|
||||
/// Create the Unity representation of the motor
|
||||
/// </summary>
|
||||
/// <param name="coreMotor">The core motor</param>
|
||||
/// <returns>The Unity representation of a motor</returns>
|
||||
public static Motor Create(RoboidControl.Motor core) {
|
||||
/// This uses a 'Motor' resource when available for the Unity representation.
|
||||
/// If this is not available, a default representation is created.
|
||||
public static Motor Create(RoboidControl.Motor coreMotor) {
|
||||
Motor motor;
|
||||
GameObject prefab = (GameObject)Resources.Load("Motor");
|
||||
if (prefab != null) {
|
||||
// Use resource prefab when available
|
||||
GameObject gameObj = Instantiate(prefab);
|
||||
Motor component = gameObj.GetComponent<Motor>();
|
||||
if (component != null)
|
||||
component.core = core;
|
||||
return component;
|
||||
motor = gameObj.GetComponent<Motor>();
|
||||
motor.Init(coreMotor);
|
||||
}
|
||||
else {
|
||||
// Fallback implementation
|
||||
GameObject gameObj = new(core.name);
|
||||
Motor component = gameObj.AddComponent<Motor>();
|
||||
component.Init(core);
|
||||
// Default implementation
|
||||
GameObject gameObj = new(coreMotor.name);
|
||||
motor = gameObj.AddComponent<Motor>();
|
||||
motor.Init(coreMotor);
|
||||
|
||||
Rigidbody rb = gameObj.AddComponent<Rigidbody>();
|
||||
rb.isKinematic = true;
|
||||
return component;
|
||||
}
|
||||
return motor;
|
||||
}
|
||||
|
||||
public float rotationSpeed = 0.0f;
|
||||
/// <summary>
|
||||
/// The maximum rotation speed of the motor in rotations per second
|
||||
/// </summary>
|
||||
public float maxSpeed = 5;
|
||||
|
||||
/// <summary>
|
||||
/// The actual rotation speed in rotations per second
|
||||
/// </summary>
|
||||
public float rotationSpeed { get; protected set; }
|
||||
|
||||
/// <summary>
|
||||
/// Update the Unity state
|
||||
/// </summary>
|
||||
protected override void FixedUpdate() {
|
||||
base.FixedUpdate();
|
||||
// We rotate the first child of the motor, which should be the axle.
|
||||
float rotation = 360 * this.rotationSpeed * Time.fixedDeltaTime;
|
||||
if (this.transform.childCount > 0)
|
||||
this.transform.GetChild(0).Rotate(rotation, 0, 0);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Handle the binary event containing the rotation speed
|
||||
/// </summary>
|
||||
protected override void HandleBinary() {
|
||||
RoboidControl.Motor coreMotor = core as RoboidControl.Motor;
|
||||
this.rotationSpeed = coreMotor.targetSpeed * maxSpeed;
|
||||
}
|
||||
|
||||
protected override void Update() {
|
||||
base.Update();
|
||||
// We rotate the first child of the motor, which should be the axle.
|
||||
float rotation = 360 * this.rotationSpeed * Time.deltaTime;
|
||||
if (this.transform.childCount > 0)
|
||||
this.transform.GetChild(0).Rotate(rotation, 0, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
@ -6,35 +6,25 @@ using UnityEngine.Networking;
|
||||
namespace RoboidControl.Unity {
|
||||
|
||||
/// <summary>
|
||||
/// The representation of a Thing in Unity
|
||||
/// The Unity representation fo a Roboid Control Thing
|
||||
/// </summary>
|
||||
public class Thing : MonoBehaviour {
|
||||
|
||||
/// <summary>
|
||||
/// The core C# thing
|
||||
/// </summary>
|
||||
//[field: SerializeField]
|
||||
public RoboidControl.Thing core { get; set; }
|
||||
|
||||
public SiteServer participant;
|
||||
|
||||
private string modelUrl = null;
|
||||
/// <summary>
|
||||
/// The owner of this thing
|
||||
/// </summary>
|
||||
public Participant owner;
|
||||
|
||||
/// <summary>
|
||||
/// Set the core C# thing
|
||||
/// Create a Unity representation of a Thing
|
||||
/// </summary>
|
||||
protected void SetCoreThing(RoboidControl.Thing thing) {
|
||||
core = thing;
|
||||
core.component = this;
|
||||
|
||||
SiteServer siteServer = FindAnyObjectByType<SiteServer>();
|
||||
if (siteServer == null || siteServer.site == null) {
|
||||
Debug.LogWarning("No site server found");
|
||||
return;
|
||||
}
|
||||
siteServer.site.Add(thing);
|
||||
}
|
||||
|
||||
/// <param name="core">The core of the thing</param>
|
||||
/// <returns>The created thing</returns>
|
||||
public static Thing Create(RoboidControl.Thing core) {
|
||||
// Debug.Log("Creating new Unity thing");
|
||||
GameObject gameObj = string.IsNullOrEmpty(core.name) ?
|
||||
@ -45,11 +35,17 @@ namespace RoboidControl.Unity {
|
||||
return component;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Initialize the Thing
|
||||
/// </summary>
|
||||
/// <param name="core">The core of the thing</param>
|
||||
/// This affects the parent and pose of the thing
|
||||
protected void Init(RoboidControl.Thing core) {
|
||||
this.core = core;
|
||||
this.core.component = this;
|
||||
this.participant = FindAnyObjectByType<SiteServer>();
|
||||
core.owner = this.participant.coreParticipant;
|
||||
this.owner = FindAnyObjectByType<SiteServer>();
|
||||
core.owner = this.owner.coreParticipant;
|
||||
|
||||
if (core.parent != null && core.parent.component != null) {
|
||||
this.transform.SetParent(core.parent.component.transform, false);
|
||||
this.transform.localPosition = Vector3.zero;
|
||||
@ -62,7 +58,7 @@ namespace RoboidControl.Unity {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Update the Unity representation
|
||||
/// Update the Unity rendering
|
||||
/// </summary>
|
||||
protected virtual void Update() {
|
||||
if (core == null)
|
||||
@ -79,10 +75,16 @@ namespace RoboidControl.Unity {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Update the Unity state (just calls UpdateThing)
|
||||
/// </summary>
|
||||
protected virtual void FixedUpdate() {
|
||||
UpdateThing();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Update the Unity state
|
||||
/// </summary>
|
||||
public void UpdateThing() {
|
||||
if (core == null) {
|
||||
Debug.Log($"{this} core thing is gone, self destruct in 0 seconds...");
|
||||
@ -90,12 +92,16 @@ namespace RoboidControl.Unity {
|
||||
return;
|
||||
}
|
||||
|
||||
if (core.updateQueue.TryDequeue(out RoboidControl.Thing.UpdateEvent e))
|
||||
HandleUpdateEvent(e);
|
||||
while (core.updateQueue.TryDequeue(out RoboidControl.Thing.CoreEvent e))
|
||||
HandleCoreEvent(e);
|
||||
}
|
||||
|
||||
private void HandleUpdateEvent(RoboidControl.Thing.UpdateEvent e) {
|
||||
switch (e.messageId) {
|
||||
/// <summary>
|
||||
/// Handle events from the core thing
|
||||
/// </summary>
|
||||
/// <param name="coreEvent">The core event to handle</param>
|
||||
private void HandleCoreEvent(RoboidControl.Thing.CoreEvent coreEvent) {
|
||||
switch (coreEvent.messageId) {
|
||||
case ThingMsg.id:
|
||||
Debug.Log($"{this.core.id} Handle Thing");
|
||||
if (core.parent == null)
|
||||
@ -113,7 +119,6 @@ namespace RoboidControl.Unity {
|
||||
if (extension == ".jpg" || extension == ".png")
|
||||
StartCoroutine(LoadJPG());
|
||||
|
||||
this.modelUrl = core.modelUrl;
|
||||
break;
|
||||
case PoseMsg.Id:
|
||||
Debug.Log($"{this.core.id} Handle Pose");
|
||||
@ -126,6 +131,10 @@ namespace RoboidControl.Unity {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Load and attach a JPG sprite visualization of the thing
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
private IEnumerator LoadJPG() {
|
||||
UnityWebRequest request = UnityWebRequestTexture.GetTexture(core.modelUrl);
|
||||
yield return request.SendWebRequest();
|
||||
@ -153,6 +162,11 @@ namespace RoboidControl.Unity {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Handle a Pose event
|
||||
/// </summary>
|
||||
/// This can update the position and/or orientation when the velocity of the thing is zero.
|
||||
/// If a velocity is not zero, the position and/or orientation update will be ignored
|
||||
protected virtual void HandlePose() {
|
||||
if (core.linearVelocity.distance == 0)
|
||||
this.transform.localPosition = core.position.ToVector3();
|
||||
@ -160,6 +174,10 @@ namespace RoboidControl.Unity {
|
||||
this.transform.localRotation = core.orientation.ToQuaternion();
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Handle a Binary event
|
||||
/// </summary>
|
||||
protected virtual void HandleBinary() { }
|
||||
|
||||
}
|
||||
|
@ -4,52 +4,36 @@ using UnityEngine;
|
||||
namespace RoboidControl.Unity {
|
||||
|
||||
/// <summary>
|
||||
/// The Unity representation of the TouchSensor
|
||||
/// The Unity representation of a Roboid Control touch sensor
|
||||
/// </summary>
|
||||
public class TouchSensor : Thing {
|
||||
|
||||
// public SiteServer participant;
|
||||
/// <summary>
|
||||
/// The core touch sensor
|
||||
/// </summary>
|
||||
public RoboidControl.TouchSensor coreSensor {
|
||||
get => base.core as RoboidControl.TouchSensor;
|
||||
set => base.core = value;
|
||||
}
|
||||
|
||||
SphereCollider touchCollider = null;
|
||||
public RoboidControl.TouchSensor coreSensor => base.core as RoboidControl.TouchSensor;
|
||||
|
||||
/// <summary>
|
||||
/// Start the Unity represention
|
||||
/// Create the Unity representation of the touch sensor
|
||||
/// </summary>
|
||||
protected virtual void Start() {
|
||||
if (core == null) {
|
||||
participant = FindAnyObjectByType<SiteServer>();
|
||||
SetCoreThing(new RoboidControl.TouchSensor(participant.site));
|
||||
}
|
||||
touchCollider = GetComponent<SphereCollider>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Create the Unity representation
|
||||
/// </summary>
|
||||
/// <param name="core">The core touch sensor</param>
|
||||
/// <param name="coreSensor">The core touch sensor</param>
|
||||
/// <returns>The Unity representation of the touch sensor</returns>
|
||||
public static TouchSensor Create(RoboidControl.TouchSensor core) {
|
||||
/// This uses a 'TouchSensor' resource when available for the Unity representation.
|
||||
/// If this is not available, a default representation is created.
|
||||
public static TouchSensor Create(RoboidControl.TouchSensor coreSensor) {
|
||||
TouchSensor touchSensor;
|
||||
GameObject prefab = (GameObject)Resources.Load("TouchSensor");
|
||||
if (prefab != null) {
|
||||
// Use resource prefab when available
|
||||
GameObject gameObj = Instantiate(prefab);
|
||||
TouchSensor component = gameObj.GetComponent<TouchSensor>();
|
||||
if (component != null)
|
||||
component.core = core;
|
||||
return component;
|
||||
touchSensor = gameObj.GetComponent<TouchSensor>();
|
||||
touchSensor.Init(coreSensor);
|
||||
}
|
||||
else {
|
||||
// Fallback implementation
|
||||
GameObject gameObj = new(core.name);
|
||||
TouchSensor component = gameObj.AddComponent<TouchSensor>();
|
||||
component.Init(core);
|
||||
// Default implementation
|
||||
GameObject gameObj = new(coreSensor.name);
|
||||
touchSensor = gameObj.AddComponent<TouchSensor>();
|
||||
touchSensor.Init(coreSensor);
|
||||
|
||||
Rigidbody rb = gameObj.AddComponent<Rigidbody>();
|
||||
rb.isKinematic = true;
|
||||
@ -57,30 +41,33 @@ namespace RoboidControl.Unity {
|
||||
SphereCollider collider = gameObj.AddComponent<SphereCollider>();
|
||||
collider.radius = 0.01f;
|
||||
collider.isTrigger = true;
|
||||
return component;
|
||||
}
|
||||
return touchSensor;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Handle touch trigger collider enter event
|
||||
/// </summary>
|
||||
/// <param name="other">The collider which entered our trigger collider</param>
|
||||
private void OnTriggerEnter(Collider other) {
|
||||
// Debug.Log("Touch?");
|
||||
if (other.isTrigger) {
|
||||
// Debug.Log($" was trigger {other.name}");
|
||||
// Don't detect trigger colliders
|
||||
if (other.isTrigger)
|
||||
return;
|
||||
}
|
||||
if (this.transform.root == other.transform.root) {
|
||||
Debug.Log($" was myself {other.name}");
|
||||
// Don't touch yourself
|
||||
if (this.transform.root == other.transform.root)
|
||||
return;
|
||||
}
|
||||
|
||||
Debug.Log($"*** {this} Touch");
|
||||
this.coreSensor.touchedSomething = true;
|
||||
this.core.updateQueue.Enqueue(new RoboidControl.Thing.UpdateEvent(BinaryMsg.Id));
|
||||
this.core.updateQueue.Enqueue(new RoboidControl.Thing.CoreEvent(BinaryMsg.Id));
|
||||
}
|
||||
/// <summary>
|
||||
/// Handl touch trigger collider exit event
|
||||
/// </summary>
|
||||
/// <param name="other">The collider which exited our trigger collider </param>
|
||||
private void OnTriggerExit(Collider other) {
|
||||
if (other.isTrigger)
|
||||
return;
|
||||
|
||||
Debug.Log($"*** {this} Touch end");
|
||||
this.coreSensor.touchedSomething = false;
|
||||
}
|
||||
}
|
||||
|
@ -2,6 +2,10 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace RoboidControl.Unity {
|
||||
|
||||
/// <summary>
|
||||
/// The Unity representation of a Roboid Control wheel
|
||||
/// </summary>
|
||||
public class Wheel : Motor {
|
||||
/// <summary>
|
||||
/// Create the Unity representation
|
||||
|
18
src/Thing.cs
18
src/Thing.cs
@ -138,7 +138,7 @@ namespace RoboidControl {
|
||||
if (_name != value) {
|
||||
_name = value;
|
||||
nameChanged = true;
|
||||
this.updateQueue.Enqueue(new UpdateEvent(NameMsg.Id));
|
||||
this.updateQueue.Enqueue(new CoreEvent(NameMsg.Id));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -153,7 +153,7 @@ namespace RoboidControl {
|
||||
set {
|
||||
if (_modelUrl != value) {
|
||||
_modelUrl = value;
|
||||
this.updateQueue.Enqueue(new UpdateEvent(ModelUrlMsg.Id));
|
||||
this.updateQueue.Enqueue(new CoreEvent(ModelUrlMsg.Id));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -188,7 +188,7 @@ namespace RoboidControl {
|
||||
value.AddChild(this);
|
||||
}
|
||||
this.hierarchyChanged = true;
|
||||
this.updateQueue.Enqueue(new UpdateEvent(ThingMsg.id));
|
||||
this.updateQueue.Enqueue(new CoreEvent(ThingMsg.id));
|
||||
}
|
||||
}
|
||||
|
||||
@ -283,7 +283,7 @@ namespace RoboidControl {
|
||||
if (_position != value) {
|
||||
_position = value;
|
||||
positionUpdated = true;
|
||||
updateQueue.Enqueue(new UpdateEvent(PoseMsg.Id));
|
||||
updateQueue.Enqueue(new CoreEvent(PoseMsg.Id));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -321,7 +321,7 @@ namespace RoboidControl {
|
||||
if (_linearVelocity != value) {
|
||||
_linearVelocity = value;
|
||||
linearVelocityUpdated = true;
|
||||
updateQueue.Enqueue(new UpdateEvent(PoseMsg.Id));
|
||||
updateQueue.Enqueue(new CoreEvent(PoseMsg.Id));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -340,7 +340,7 @@ namespace RoboidControl {
|
||||
if (_angularVelocity != value) {
|
||||
_angularVelocity = value;
|
||||
angularVelocityUpdated = true;
|
||||
updateQueue.Enqueue(new UpdateEvent(PoseMsg.Id));
|
||||
updateQueue.Enqueue(new CoreEvent(PoseMsg.Id));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -396,13 +396,13 @@ namespace RoboidControl {
|
||||
}
|
||||
}
|
||||
|
||||
public class UpdateEvent {
|
||||
public UpdateEvent(int messageId) {
|
||||
public class CoreEvent {
|
||||
public CoreEvent(int messageId) {
|
||||
this.messageId = messageId;
|
||||
}
|
||||
public int messageId; // see the communication messages
|
||||
};
|
||||
public ConcurrentQueue<UpdateEvent> updateQueue = new();
|
||||
public ConcurrentQueue<CoreEvent> updateQueue = new();
|
||||
|
||||
#endregion Update
|
||||
|
||||
|
@ -76,7 +76,7 @@ namespace RoboidControl {
|
||||
// this.rightWheel.position = new Spherical(distance, Direction.right);
|
||||
|
||||
owner.Send(new BinaryMsg(owner.networkId, this));
|
||||
this.updateQueue.Enqueue(new UpdateEvent(BinaryMsg.Id));
|
||||
this.updateQueue.Enqueue(new CoreEvent(BinaryMsg.Id));
|
||||
}
|
||||
|
||||
/// @brief Directly specify the speeds of the motors
|
||||
@ -165,7 +165,7 @@ namespace RoboidControl {
|
||||
this.rightWheel = this.owner.Get(rightWheelId) as Motor;
|
||||
this._wheelRadius = LowLevelMessages.ReceiveFloat16(data, ref ix);
|
||||
//this._wheelSeparation = LowLevelMessages.ReceiveFloat16(data, ref ix);
|
||||
this.updateQueue.Enqueue(new UpdateEvent(BinaryMsg.Id));
|
||||
this.updateQueue.Enqueue(new CoreEvent(BinaryMsg.Id));
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -37,7 +37,7 @@ namespace RoboidControl {
|
||||
set {
|
||||
if (value != this._targetAngularSpeed) {
|
||||
this._targetAngularSpeed = value;
|
||||
updateQueue.Enqueue(new UpdateEvent(BinaryMsg.Id));
|
||||
updateQueue.Enqueue(new CoreEvent(BinaryMsg.Id));
|
||||
owner.Send(new BinaryMsg(this));
|
||||
}
|
||||
}
|
||||
|
@ -25,7 +25,7 @@ namespace RoboidControl {
|
||||
set {
|
||||
if (value != _targetSpeed) {
|
||||
_targetSpeed = Float.Clamp(value, -1, 1);
|
||||
updateQueue.Enqueue(new UpdateEvent(BinaryMsg.Id));
|
||||
updateQueue.Enqueue(new CoreEvent(BinaryMsg.Id));
|
||||
owner.Send(new BinaryMsg(this));
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user