#if UNITY_5_3_OR_NEWER
using UnityEngine;
namespace RoboidControl.Unity {
public class Motor : Thing {
public float maxSpeed = 5;
///
/// Create the Unity representation
///
/// The core motor
/// The Unity representation of a motor
public static Motor Create(RoboidControl.Motor core) {
GameObject prefab = (GameObject)Resources.Load("Motor");
if (prefab != null) {
// Use resource prefab when available
GameObject gameObj = Instantiate(prefab);
Motor component = gameObj.GetComponent();
if (component != null)
component.core = core;
return component;
}
else {
// Fallback implementation
GameObject gameObj = new(core.name);
Motor component = gameObj.AddComponent();
component.Init(core);
Rigidbody rb = gameObj.AddComponent();
rb.isKinematic = true;
return component;
}
}
public float rotationSpeed = 0.0f;
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