using TMPro; using UnityEngine; [RequireComponent(typeof(CharacterController))] public class AmyRunScript : MonoBehaviour { [Header("Amy Properties")] public float runSpeed = 10f; public float runSpeedOnRadiusOffset = 100f; public float angle = 0f; public float startAngle = 0f; public TMP_Text speedText; private CharacterController characterController; private Animator animator; private bool isRunning = false; [Header("Runline")] public RunlinePlacer runline; private void Awake() { characterController = GetComponent(); animator = GetComponent(); } void Start() { SetAmyRandomSpeed(); } void Update() { if (!gameObject.activeSelf) return; if(isRunning) MoveAmyOnTrack(); animator.SetBool("isRunning", isRunning); } private void MoveAmyOnTrack() { angle += (runSpeed / runSpeedOnRadiusOffset) * Time.deltaTime; float x = Mathf.Cos(angle) * runline.radiusX; float z = Mathf.Sin(angle) * runline.radiusZ; Vector3 targetPos = new Vector3(x, runline.center.y, z); Vector3 direction = targetPos - transform.position; characterController.Move(direction); if (direction != Vector3.zero) { transform.rotation = Quaternion.LookRotation(direction); } } public void StartRun() { isRunning = true; } public void StopRun() { isRunning = false; } public void SetAngle(float newAngle) { angle = newAngle; MoveAmyOnTrack(); StopRun(); } public void PlaceOnStartAngle() { angle = startAngle; transform.rotation = new Quaternion(0f, transform.rotation.y, transform.rotation.z, 0f); SetSpeedText(); MoveAmyOnTrack(); StopRun(); } [ContextMenu("Set Amy random speed")] public void SetAmyRandomSpeed() { runSpeed = Random.Range(8, 15); } private void OnTriggerEnter(Collider collider) { if (collider.gameObject.tag == "Endline" && Lesson1Controller.Instance.activeExperiment == 2) ExperimentChooser.Instance.experiment3Button.interactable = true; } private void SetSpeedText() { if (Lesson1Controller.Instance.activeExperiment != 2) { speedText.text = "SPEED: " + runSpeed.ToString(); } else { speedText.text = ""; } } }