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

public class DoorControl : MonoBehaviour
{
    public Light2D doorStatusLight;
    public float doorOpenSpeed, xMovement, yMovement;
    private Vector3 moveTarget, startingPos;
    private bool doorOpened, movementComplete, moveStarted;
    private float startTime, journeyLength;
    private AudioSource aSource;

    public int doorID;

    private void Awake()
    {
        aSource = GetComponent<AudioSource>();
        moveTarget = new Vector3(transform.position.x + xMovement, transform.position.y + yMovement, transform.position.z);
        startingPos = transform.position;
    }

    private void Update()
    {
        if (!movementComplete)
        {
            if (doorOpened)
            {
                OpenDoor();
            }
        }
    }

    public void OpenDoor()
    {
        if (!moveStarted)
        {
            startTime = Time.time;
            journeyLength = Vector3.Distance(startingPos, moveTarget);
            aSource.Play();
            moveStarted = true;
        }

        float distCovered = (Time.time - startTime) * doorOpenSpeed;
        float fracJourney = distCovered / journeyLength;
        transform.position = Vector3.Lerp(transform.position, moveTarget, fracJourney);

        if (transform.position == moveTarget)
        {
            movementComplete = true;
            doorStatusLight.color = Color.green;
        }
    }

    public void SetDoorOpenState(bool state)
    {
        doorOpened = state;
    }

    public int GetDoorID()
    {
        return doorID;
    }
}