108 lines
2.5 KiB
C#
108 lines
2.5 KiB
C#
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<CharacterController>();
|
|
animator = GetComponent<Animator>();
|
|
}
|
|
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 = "";
|
|
}
|
|
}
|
|
}
|
|
|