b0364a3dbf
commented abit then built the game
129 lines
3.3 KiB
C#
129 lines
3.3 KiB
C#
|
|
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 Vector3 moveDist;
|
|
public AudioSource source;
|
|
|
|
public void Start()
|
|
{
|
|
rightDoorStart = rightDoor.transform.position;
|
|
Debug.Log(rightDoorStart);
|
|
rightDoorEnd = rightDoor.transform.position;
|
|
rightDoorEnd.x += moveDist.x;
|
|
rightDoorEnd.y += moveDist.y;
|
|
rightDoorEnd.z += moveDist.z;
|
|
|
|
Debug.Log(rightDoorEnd);
|
|
leftDoorStart = leftDoor.transform.position;
|
|
Debug.Log(leftDoorStart);
|
|
leftDoorEnd = leftDoor.transform.position;
|
|
leftDoorEnd.x -= moveDist.x;
|
|
leftDoorEnd.y -= moveDist.y;
|
|
leftDoorEnd.z -= moveDist.z;
|
|
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
|
|
&& GameManager.instance.petrolCollected
|
|
&& GameManager.instance.gotGenerator
|
|
)
|
|
{
|
|
opening = true;
|
|
source.Play();
|
|
}
|
|
else if (!closing && !opening && IsOpen)
|
|
{
|
|
closing = true;
|
|
}
|
|
}
|
|
|
|
void OnTriggerExit(Collider other)
|
|
{
|
|
if (other.tag == "Player")
|
|
{
|
|
GameManager.instance.endGame();
|
|
}
|
|
}
|
|
}
|