i3e-asg2/Assets/Scripts/spaceshipSlidingdoor.cs
Sc0rch-thinks b0364a3dbf final commit yay
commented abit then built the game
2024-07-05 23:30:15 +08:00

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();
}
}
}