game(assets): added info collecting script and fixed old scripts
This commit is contained in:
parent
396d787b69
commit
1b18ab67b7
5 changed files with 172 additions and 19 deletions
|
@ -9,24 +9,37 @@ using System.Collections.Generic;
|
|||
using UnityEngine;
|
||||
using UnityEngine.ProBuilder.Shapes;
|
||||
using UnityEngine.XR.Interaction.Toolkit.Interactables;
|
||||
using UnityEngine.XR.Interaction.Toolkit;
|
||||
|
||||
public class BedroomTask : MonoBehaviour
|
||||
{
|
||||
public int trashCollected = 0;
|
||||
public int trashToUnlock = 1;
|
||||
public GameObject door;
|
||||
public XRGrabInteractable doorInteractable;
|
||||
public int trashRequired = 10;
|
||||
public GameObject door; // The VR swingable door object
|
||||
private XRGrabInteractable grabInteractable;
|
||||
private Collider doorCollider;
|
||||
private Rigidbody doorRigidbody;
|
||||
public GameObject lockedDoorUI;
|
||||
public GameObject unlockedDoorUI;
|
||||
|
||||
// Start is called before the first frame update
|
||||
void Start()
|
||||
{
|
||||
lockedDoorUI.SetActive(false);
|
||||
unlockedDoorUI.SetActive(false);
|
||||
if (door != null)
|
||||
{
|
||||
doorInteractable = door.GetComponent<XRGrabInteractable>();
|
||||
if (doorInteractable != null)
|
||||
grabInteractable = door.GetComponent<XRGrabInteractable>();
|
||||
doorCollider = door.GetComponent<Collider>();
|
||||
doorRigidbody = door.GetComponent<Rigidbody>();
|
||||
|
||||
if (grabInteractable != null)
|
||||
{
|
||||
doorInteractable.enabled = false;
|
||||
Debug.Log("Room is not cleaned! Door is locked");
|
||||
grabInteractable.selectEntered.AddListener(OnDoorGrabAttempt);
|
||||
}
|
||||
|
||||
if (doorRigidbody != null)
|
||||
{
|
||||
LockDoor();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -34,18 +47,62 @@ public class BedroomTask : MonoBehaviour
|
|||
public void CollectTrash()
|
||||
{
|
||||
trashCollected++;
|
||||
Debug.Log("Trash Collected: " + trashCollected + "/" + trashToUnlock);
|
||||
Debug.Log($"🗑️ Trash collected: {trashCollected}/{trashRequired}");
|
||||
|
||||
if (trashCollected >= trashToUnlock)
|
||||
if (trashCollected >= trashRequired)
|
||||
{
|
||||
UnlockDoor();
|
||||
Debug.Log("Cleaning task completed! Unlocking door...");
|
||||
}
|
||||
}
|
||||
|
||||
private void LockDoor()
|
||||
{
|
||||
if (doorRigidbody != null)
|
||||
{
|
||||
doorRigidbody.isKinematic = true; // Stops movement
|
||||
doorRigidbody.constraints = RigidbodyConstraints.FreezeAll; // Completely freezes door
|
||||
}
|
||||
|
||||
if (doorCollider != null)
|
||||
{
|
||||
doorCollider.enabled = false; // Prevents grabbing
|
||||
}
|
||||
}
|
||||
|
||||
private void UnlockDoor()
|
||||
{
|
||||
doorInteractable.enabled = true;
|
||||
Debug.Log("Room is cleaned! Door unlocked");
|
||||
if (doorRigidbody != null)
|
||||
{
|
||||
doorRigidbody.isKinematic = false; // Allows movement
|
||||
doorRigidbody.constraints = RigidbodyConstraints.None; // Removes restrictions
|
||||
}
|
||||
|
||||
if (doorCollider != null)
|
||||
{
|
||||
doorCollider.enabled = true; // Enables grabbing
|
||||
}
|
||||
|
||||
StartCoroutine(HideMessageAfterSeconds(unlockedDoorUI, 5f));
|
||||
Debug.Log("Room is clean! The door is now unlocked.");
|
||||
}
|
||||
|
||||
private void OnDoorGrabAttempt(SelectEnterEventArgs args)
|
||||
{
|
||||
if (trashCollected < trashRequired)
|
||||
{
|
||||
StartCoroutine(HideMessageAfterSeconds(lockedDoorUI, 5f));
|
||||
Debug.Log("The door is locked! Clean the room first.");
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsTaskCompleted()
|
||||
{
|
||||
return trashCollected >= trashRequired;
|
||||
}
|
||||
|
||||
private IEnumerator HideMessageAfterSeconds(GameObject uiElement, float delay)
|
||||
{
|
||||
yield return new WaitForSeconds(delay);
|
||||
uiElement.SetActive(false);
|
||||
}
|
||||
}
|
66
Game/Assets/Scripts/InfoCollector.cs
Normal file
66
Game/Assets/Scripts/InfoCollector.cs
Normal file
|
@ -0,0 +1,66 @@
|
|||
/*
|
||||
Author: Reza
|
||||
Date: 7/2/25
|
||||
Description: Collects information when a player looks at objects long enough
|
||||
*/
|
||||
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using TMPro;
|
||||
|
||||
public class InfoCollector : MonoBehaviour
|
||||
{
|
||||
public float detectionRange = 5f;
|
||||
public TMP_Text infoText; // Reference to a UI Text (TextMeshPro)
|
||||
private Camera vrCamera;
|
||||
private bool isDisplaying = false;
|
||||
|
||||
void Start()
|
||||
{
|
||||
vrCamera = Camera.main;
|
||||
infoText.text = ""; // Clear text initially
|
||||
}
|
||||
|
||||
void Update()
|
||||
{
|
||||
Ray ray = new Ray(vrCamera.transform.position, vrCamera.transform.forward);
|
||||
RaycastHit hit;
|
||||
|
||||
if (Physics.Raycast(ray, out hit, detectionRange))
|
||||
{
|
||||
if (hit.collider.CompareTag("InfoObject") && !isDisplaying)
|
||||
{
|
||||
CollectInfo(hit.collider.gameObject);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CollectInfo(GameObject obj)
|
||||
{
|
||||
isDisplaying = true;
|
||||
infoText.text = "Info Collected: " + obj.name + "\n" + GetObjectInfo(obj);
|
||||
Debug.Log("Collected information from: " + obj.name);
|
||||
|
||||
// Hide text after 3 seconds
|
||||
Invoke("ClearText", 3f);
|
||||
}
|
||||
|
||||
void ClearText()
|
||||
{
|
||||
infoText.text = "";
|
||||
isDisplaying = false;
|
||||
}
|
||||
|
||||
string GetObjectInfo(GameObject obj)
|
||||
{
|
||||
// Define object descriptions here
|
||||
if (obj.name == "AncientArtifact")
|
||||
return "This artifact was used by an old civilization...";
|
||||
|
||||
if (obj.name == "HologramTerminal")
|
||||
return "A futuristic data console storing historical records.";
|
||||
|
||||
return "An unknown object with mysterious origins.";
|
||||
}
|
||||
}
|
11
Game/Assets/Scripts/InfoCollector.cs.meta
Normal file
11
Game/Assets/Scripts/InfoCollector.cs.meta
Normal file
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 6cb4698acb16cc94e8caf48cad7156c4
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -12,6 +12,7 @@ using UnityEngine.UIElements;
|
|||
public class Letter : MonoBehaviour
|
||||
{
|
||||
public GameObject letterUI;
|
||||
public AudioClip scribble;
|
||||
|
||||
private void Start()
|
||||
{
|
||||
|
|
|
@ -12,13 +12,31 @@ public class Trash : MonoBehaviour
|
|||
{
|
||||
private BedroomTask bedroomTask;
|
||||
|
||||
private void Start()
|
||||
{
|
||||
// Find the BedroomTask script in the scene
|
||||
bedroomTask = FindObjectOfType<BedroomTask>();
|
||||
|
||||
if (bedroomTask == null)
|
||||
{
|
||||
Debug.LogError("BedroomTask script not found in the scene!");
|
||||
}
|
||||
}
|
||||
|
||||
private void OnTriggerEnter(Collider other)
|
||||
{
|
||||
if (other.CompareTag("TrashBin"))
|
||||
{
|
||||
bedroomTask.CollectTrash();
|
||||
Debug.Log("Trash thrown in the bin! Count: " + bedroomTask.trashCollected);
|
||||
Destroy(gameObject);
|
||||
if (bedroomTask != null)
|
||||
{
|
||||
bedroomTask.CollectTrash();
|
||||
Debug.Log("🗑️ Trash thrown in the bin! Count: " + bedroomTask.trashCollected);
|
||||
Destroy(gameObject);
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogError("BedroomTask reference is missing!");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue