using System;
using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEditor;
using UnityEngine;
using UnityEngine.SceneManagement;
public class Interact : MonoBehaviour
{
public Transform cam;
bool active = false;
[SerializeField] float distance = 2f;
private GameObject pc;
private GameObject computer;
private GameObject menu;
private GameObject player;
private GameObject movimentScript;
private GameObject mouseLookScript;
private GameObject On;
private GameObject Off;
private float animationDuration = 0.5f;
private float timeElapsed;
public static Vector3 player_position = new Vector3(0f, 0f, 0f);
public static Quaternion player_rotation;
public static string target;
public static string location;
public string sceneName;
//private Canvas pc_interact;
public Canvas[] casa;
public Canvas[] npc;
public Canvas[] use;
private void Start()
{
menu = GameObject.Find("EventSystem");
player = GameObject.Find("Player(Clone)");
computer = GameObject.Find("PC");
//pc_interact = GameObject.Find("PC_Interact").GetComponent<Canvas>();
pc = GameObject.Find("PC_UI");
On = computer.transform.GetChild(0).gameObject;
Off = computer.transform.GetChild(1).gameObject;
movimentScript = player.transform.GetChild(0).gameObject;
mouseLookScript = movimentScript.transform.GetChild(2).gameObject;
//use[0] = pc_interact;
Scene currentScene = SceneManager.GetActiveScene();
sceneName = currentScene.name;
}
private void Update()
{
timeElapsed += Time.deltaTime;
RaycastHit hit;
active = Physics.Raycast(cam.position, cam.TransformDirection(Vector3.forward), out hit, distance);
Debug.DrawRay(cam.position, cam.TransformDirection(Vector3.forward) * distance, Color.yellow);
if (Input.GetKeyDown(KeyCode.E) && active)
{
if (hit.transform.name == "PC")
{
pc.SetActive(true);
Off.SetActive(false);
On.SetActive(true);
Cursor.lockState = CursorLockMode.Confined;
movimentScript.GetComponent<PlayerMovement>().enabled = false;
mouseLookScript.GetComponent<MouseLook>().enabled = false;
menu.GetComponent<Menu>().enabled = false;
}
if (hit.transform.name == "Door")
{
SceneManager.LoadScene("Map");
}
else
{
Debug.Log(hit.transform.name);
if (sceneName == "Map")
{
player_position = transform.position;
player_rotation = transform.rotation;
if (hit.transform.GetComponent<Animator>() != null)
{
string door_tag = hit.transform.tag;
hit.transform.GetComponent<Animator>().SetTrigger("Open");
if (door_tag == "LabDoor")
{
StartCoroutine(ChangeSceneAfterDelay(door_tag, "ProfessorOakLab"));
}
else
{
Debug.Log("Porta não configurada");
}
}
}
}
}
if (hit.transform != null)
{
Debug.Log("Hit object: " + hit.transform.name);
string targetName = hit.transform.name;
if (hit.transform.tag == "NPC")
{
NpcsInteract(hit, targetName);
}
if (hit.transform.tag == "Door")
{
DoorsInteract(hit, targetName);
}
if (hit.transform.tag == "USE")
{
UsesInteract(hit, targetName);
}
}
else
{
foreach (var i in npc)
{
i.gameObject.SetActive(false);
}
foreach (var i in casa)
{
i.gameObject.SetActive(false);
}
foreach (var i in use)
{
i.gameObject.SetActive(false);
}
}
}
private IEnumerator ChangeSceneAfterDelay(string tag, string sceneName)
{
if (tag == "LabDoor")
{
location = "LabDoor";
yield return new WaitForSeconds(animationDuration);
SceneManager.LoadScene(sceneName);
}
}
private void NpcsInteract(RaycastHit hit, string name)
{
foreach (var i in npc)
{
if (i.gameObject.name == name)
{
i.gameObject.SetActive(true);
}
else
{
i.gameObject.SetActive(false);
}
}
}
private void DoorsInteract(RaycastHit hit, string name)
{
foreach (var i in casa)
{
if (i.gameObject.name == name)
{
i.gameObject.SetActive(true);
}
else
{
i.gameObject.SetActive(false);
}
}
}
private void UsesInteract(RaycastHit hit, string name)
{
foreach (var i in use)
{
if (i.gameObject.name == name)
{
i.gameObject.SetActive(true);
}
else
{
i.gameObject.SetActive(false);
}
}
}
}