UnityGameProjectsCode / InTheDarkGame / Level / Door Mech / BrokenDoor.cs
BrokenDoor.cs
Raw
using UnityEngine;
using UnityEngine.Experimental.Rendering.Universal;

public class BrokenDoor : MonoBehaviour
{
    public Light2D doorStatusLight;
    public float xMovement, yMovement;
    public float speedMin, speedMax;
    private float currentSpeed;
    private Vector3 moveTarget, startingPos;
    private float startTime, journeyLength;
    private AudioSource aSource;

    private void Awake()
    {
        aSource = GetComponent<AudioSource>();
    }

    private void Start()
    {
        moveTarget = transform.position;
        moveTarget = new Vector3(transform.position.x + xMovement, transform.position.y + yMovement, transform.position.z);
        startingPos = transform.position;
        currentSpeed = speedMin;
        doorStatusLight.color = Color.green;

        startTime = Time.time;
        journeyLength = Vector3.Distance(startingPos, moveTarget);
    }

    private void Update()
    {
        float distCovered = (Time.time - startTime) * currentSpeed;
        float fracJourney = distCovered / journeyLength;
        transform.position = Vector3.LerpUnclamped(transform.position, moveTarget, fracJourney);

        if (transform.position == moveTarget)
        {
            aSource.Play();

            if (doorStatusLight.color == Color.red)
                doorStatusLight.color = Color.green;
            else
                doorStatusLight.color = Color.red;

            Vector3 tempPos = startingPos;
            startingPos = moveTarget;
            moveTarget = tempPos;
            startTime = Time.time;
            currentSpeed = Random.Range(speedMin, speedMax);
        }
    }
}