Script dat de Kat bestuurd in de minigame

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class MoveCharachterScript : MonoBehaviour
{
 
    [SerializeField]
    private GameObject CodeManager;
    [SerializeField]
    private GameObject Player;
 
    private List<string> objectTags = new List<string>();
 
    [SerializeField]
    private float movementDuration = 0.5f;
    [SerializeField]
    private float movementMultiplier = 1f;
    [SerializeField]
    private float rotationDuration = 0.3f;
    [SerializeField]
    private float jumpHeight = 4f;
 
    [SerializeField]
    private Animator animator;
 
    public bool isMoving = false;
    public bool canPlay = true;
 
    private float lookDirection = 0f;
 
 
    void Start()
    {
        if (CodeManager == null)
        {
            CodeManager = GameObject.FindGameObjectWithTag("PlayableCode");
        }
    }
 
 
    public void PlayGame()
    {
        if (canPlay)
        {
            canPlay = false;
            objectTags.Clear();
            foreach (Transform transform in CodeManager.transform)
            {
                objectTags.Add(transform.tag);
            }
 
 
            StartCoroutine(ExecuteMethodsSequentially(objectTags));
        }
    }
 
    private IEnumerator ExecuteMethodsSequentially(List<string> tagsToExecute)
    {
        for (int i = 0; i < tagsToExecute.Count; i++)
        {
            string tag = tagsToExecute[i];
            GameObject obj = CodeManager.transform.GetChild(i).gameObject;
            ChangeMaterialScript changeMaterialScript = obj.GetComponent<ChangeMaterialScript>();
            if (obj != null && changeMaterialScript != null)
            {
                changeMaterialScript.SetMaterialActive();
            }
 
            Invoke(tag, 0f);
            yield return new WaitForSeconds(1.5f);
 
            if (obj != null && changeMaterialScript != null)
            {
                changeMaterialScript.SetMaterialUnactive();
            }
        }
        canPlay = true;
    }
 
    private void Left()
    {
        if (!isMoving)
        {
            // Rotate the lookDirection 90 degrees to the left
            lookDirection -= 90f;
            StartCoroutine(SmoothMove(Quaternion.Euler(0, lookDirection, 0) * Vector3.forward * movementMultiplier));
        }
    }
 
    private void Right()
    {
        if (!isMoving)
        {
            // Rotate the lookDirection 90 degrees to the right
            lookDirection += 90f;
            StartCoroutine(SmoothMove(Quaternion.Euler(0, lookDirection, 0) * Vector3.forward * movementMultiplier));
        }
    }
 
    private void Backward()
    {
        if (!isMoving)
        {
            // Rotate the lookDirection 180 degrees
            lookDirection = (lookDirection + 180f) % 360f;
            StartCoroutine(SmoothMove(Quaternion.Euler(0, lookDirection, 0) * Vector3.forward * movementMultiplier));
        }
    }
 
    private void Forward()
    {
        if (!isMoving)
        {
            StartCoroutine(SmoothMove(Quaternion.Euler(0, lookDirection, 0) * Vector3.forward * movementMultiplier));
        }
    }
 
    private void Jump()
    {
        if (!isMoving)
        {
            StartCoroutine(JumpAndMove());
        }
    }
 
    private IEnumerator JumpAndMove()
    {
        isMoving = true;
 
        Vector3 startPosition = Player.transform.position;
        Vector3 endPosition = startPosition + (Quaternion.Euler(0, lookDirection, 0) * Vector3.forward * movementMultiplier * 2);
        float elapsedTime = 0f;
 
        animator.SetBool("isWalking", true);
        while (elapsedTime < movementDuration)
        {
            float normalizedTime = elapsedTime / movementDuration;
            Vector3 currentPosition = Vector3.Lerp(startPosition, endPosition, normalizedTime);
            float heightOffset = Mathf.Sin(normalizedTime * Mathf.PI) * jumpHeight;
            currentPosition.y = startPosition.y + heightOffset;
            Player.transform.position = currentPosition;
            elapsedTime += Time.deltaTime;
            yield return null;
        }
 
        Player.transform.position = endPosition;
        isMoving = false;
        animator.SetBool("isWalking", false);
    }
 
    private IEnumerator SmoothMove(Vector3 moveDirection)
    {
        isMoving = true;
 
        // Rotation
        Quaternion startRotation = Player.transform.rotation;
        Quaternion targetRotation = Quaternion.Euler(0, lookDirection, 0);
 
        float rotationElapsedTime = 0f;
 
        while (rotationElapsedTime < rotationDuration)
        {
            Player.transform.rotation = Quaternion.Slerp(startRotation, targetRotation, rotationElapsedTime / rotationDuration);
            rotationElapsedTime += Time.deltaTime;
            yield return null;
        }
 
        Player.transform.rotation = targetRotation;
 
        // Movement
        Vector3 startPosition = Player.transform.position;
        Vector3 endPosition = startPosition + moveDirection;
        float moveElapsedTime = 0f;
 
        animator.SetBool("isWalking", true);
 
        while (moveElapsedTime < movementDuration)
        {
            Player.transform.position = Vector3.Lerp(startPosition, endPosition, moveElapsedTime / movementDuration);
            moveElapsedTime += Time.deltaTime;
            yield return null;
        }
 
        Player.transform.position = endPosition;
 
        isMoving = false;
        animator.SetBool("isWalking", false);
    }
 
    public void ResetPlayer()
    {
        lookDirection = 0f;
    }
}