102 lines
2.8 KiB
C#
102 lines
2.8 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using Unity.PlasticSCM.Editor.WebApi;
|
|
using Unity.VisualScripting;
|
|
using UnityEngine;
|
|
|
|
public class SlideDoor : Interactable
|
|
{
|
|
bool IsOpen = false;
|
|
bool opening = false;
|
|
bool closing = false;
|
|
float currentDuration;
|
|
|
|
[SerializeField]
|
|
private GameObject rightDoor;
|
|
Vector3 rightDoorStart;
|
|
Vector3 rightDoorEnd;
|
|
|
|
[SerializeField]
|
|
private GameObject leftDoor;
|
|
Vector3 leftDoorStart;
|
|
Vector3 leftDoorEnd;
|
|
|
|
[SerializeField]
|
|
private float lerpTime;
|
|
[SerializeField]
|
|
private AnimationCurve Curve;
|
|
|
|
|
|
|
|
public void Start()
|
|
{
|
|
rightDoorStart = rightDoor.transform.position;
|
|
Debug.Log(rightDoorStart);
|
|
rightDoorEnd = rightDoor.transform.position;
|
|
rightDoorEnd.z += 2;
|
|
Debug.Log(rightDoorEnd);
|
|
leftDoorStart = leftDoor.transform.position;
|
|
Debug.Log(leftDoorStart);
|
|
leftDoorEnd = leftDoor.transform.position;
|
|
leftDoorEnd.z -= 2;
|
|
Debug.Log(leftDoorEnd);
|
|
}
|
|
|
|
void Update()
|
|
{
|
|
if (opening)
|
|
{
|
|
currentDuration += Time.deltaTime;
|
|
float t = currentDuration / lerpTime;
|
|
rightDoor.transform.position = Vector3.Lerp(rightDoorStart, rightDoorEnd, Curve.Evaluate(t));
|
|
leftDoor.transform.position = Vector3.Lerp(leftDoorStart, leftDoorEnd, Curve.Evaluate(t));
|
|
|
|
if (currentDuration >= lerpTime)
|
|
{
|
|
currentDuration = 0;
|
|
opening = false;
|
|
rightDoor.transform.position = rightDoorEnd;
|
|
leftDoor.transform.position = leftDoorEnd;
|
|
IsOpen = true;
|
|
Debug.Log("Door opened");
|
|
}
|
|
}
|
|
else if (closing)
|
|
{
|
|
currentDuration += Time.deltaTime;
|
|
float t = currentDuration / lerpTime;
|
|
rightDoor.transform.position = Vector3.Lerp(rightDoorEnd, rightDoorStart, Curve.Evaluate(t));
|
|
leftDoor.transform.position = Vector3.Lerp(leftDoorEnd, leftDoorStart, Curve.Evaluate(t));
|
|
|
|
if (currentDuration >= lerpTime)
|
|
{
|
|
currentDuration = 0;
|
|
closing = false;
|
|
rightDoor.transform.position = rightDoorStart;
|
|
leftDoor.transform.position = leftDoorStart;
|
|
IsOpen = false;
|
|
Debug.Log("Door closed");
|
|
}
|
|
}
|
|
}
|
|
|
|
public override void Interact()
|
|
{
|
|
if (!closing && !opening && !IsOpen)
|
|
{
|
|
opening = true;
|
|
}
|
|
else if (!closing && !opening && IsOpen)
|
|
{
|
|
closing = true;
|
|
}
|
|
}
|
|
void OnTriggerExit(Collider other)
|
|
{
|
|
if(other.tag == "Player"&& IsOpen&& !opening)
|
|
{
|
|
closing=true;
|
|
}
|
|
}
|
|
}
|