Building out Golf Level and mission states and improved AI

This commit is contained in:
2026-09-01 16:33:49 +01:00
parent 04047ddf57
commit 5f76d7b002
63 changed files with 102312 additions and 1834 deletions

View File

@@ -0,0 +1,79 @@
using UnityEngine;
using System.Collections;
public class GarageDoor : MonoBehaviour
{
[Header("Detection Settings")]
[Tooltip("How close the player needs to be for the door to open.")]
public float openDistance = 50f;
[Header("Movement Settings")]
[Tooltip("The physical door object that moves.")]
public Transform doorMesh;
[Tooltip("How far and in what direction the door slides when open (e.g., Y = 4.5 to slide up).")]
public Vector3 openOffset = new Vector3(0f, 4.5f, 0f);
public float moveSpeed = 3f;
private Transform player;
private Vector3 closedLocalPos;
private Vector3 openLocalPos;
private bool isOpen = false;
private bool isClosedPermanently = false;
void Start()
{
// If they didn't assign a child mesh, assume this object itself is the door
if (doorMesh == null) doorMesh = this.transform;
closedLocalPos = doorMesh.localPosition;
openLocalPos = closedLocalPos + openOffset;
// Automatically find the player
GameObject p = GameObject.FindGameObjectWithTag("Player");
if (p != null) player = p.transform;
}
void Update()
{
// Don't open again if the level has ended!
if (isClosedPermanently || player == null) return;
// Check distance to player
float distance = Vector3.Distance(transform.position, player.position);
if (distance <= openDistance && !isOpen)
{
OpenDoor();
}
}
private void OpenDoor()
{
isOpen = true;
StopAllCoroutines();
StartCoroutine(AnimateDoor(openLocalPos));
}
/// <summary>
/// Called by the SafeHouseTrigger when the player parks inside.
/// </summary>
public void CloseDoor()
{
isClosedPermanently = true; // Locks the door so it doesn't open again
StopAllCoroutines();
StartCoroutine(AnimateDoor(closedLocalPos));
}
private IEnumerator AnimateDoor(Vector3 targetLocalPos)
{
while (Vector3.Distance(doorMesh.localPosition, targetLocalPos) > 0.01f)
{
// Smoothly slide the door to the target position
doorMesh.localPosition = Vector3.Lerp(doorMesh.localPosition, targetLocalPos, Time.deltaTime * moveSpeed);
yield return null;
}
doorMesh.localPosition = targetLocalPos;
}
}