mirror of
https://github.com/BotChain-Robots/ui.git
synced 2026-07-08 15:07:22 +02:00
44 lines
1.3 KiB
C#
44 lines
1.3 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
public class DCMotorModule : ModuleBase
|
|
{
|
|
private static ControlPanel motorControlPanel;
|
|
public Transform motorShaft;
|
|
|
|
public float rotationSpeed = 90f;
|
|
private float targetPosition = 0f;
|
|
public override string moduleType => "DC";
|
|
public override string moduleName => "DC Module";
|
|
|
|
public void Rotate(float degrees, int direction)
|
|
{
|
|
float rotation = degrees * direction;
|
|
targetPosition += rotation;
|
|
this.SendToControlLibrary("DC", targetPosition);
|
|
StartCoroutine(RotateOverTime(rotation));
|
|
}
|
|
|
|
private IEnumerator RotateOverTime(float rotation)
|
|
{
|
|
float currentRotationDegrees = 0f;
|
|
|
|
while (Mathf.Abs(currentRotationDegrees) < Mathf.Abs(rotation))
|
|
{
|
|
float step = rotationSpeed * Time.deltaTime;
|
|
if (Mathf.Abs(currentRotationDegrees + step) > Mathf.Abs(rotation))
|
|
{
|
|
step = Mathf.Abs(rotation) - Mathf.Abs(currentRotationDegrees);
|
|
}
|
|
|
|
motorShaft.Rotate(Vector3.up, step * Mathf.Sign(rotation));
|
|
currentRotationDegrees += step * Mathf.Sign(rotation);
|
|
|
|
yield return null;
|
|
}
|
|
}
|
|
}
|