Files
PIM_Laba4/Assets/Scripts/Note.cs
T
2026-05-25 23:53:50 +03:00

118 lines
2.9 KiB
C#

using UnityEngine;
[RequireComponent(typeof(BoxCollider))]
public class Note : MonoBehaviour
{
[SerializeField] private string noteTitle = "Записка";
[SerializeField] private string noteContent = "Текст записки.";
[SerializeField] private Renderer noteRenderer;
[SerializeField] private Material defaultMaterial;
[SerializeField] private Material highlightMaterial;
private bool playerInRange;
private bool collected;
public void Configure(
string title,
string content,
Renderer targetRenderer,
Material baseMaterial,
Material selectedMaterial)
{
noteTitle = title;
noteContent = content;
noteRenderer = targetRenderer;
defaultMaterial = baseMaterial;
highlightMaterial = selectedMaterial;
}
private void Reset()
{
var boxCollider = GetComponent<BoxCollider>();
boxCollider.isTrigger = true;
}
private void Awake()
{
var boxCollider = GetComponent<BoxCollider>();
boxCollider.isTrigger = true;
if (noteRenderer == null)
{
noteRenderer = GetComponentInChildren<Renderer>();
}
if (defaultMaterial == null && noteRenderer != null)
{
defaultMaterial = noteRenderer.sharedMaterial;
}
SetHighlighted(false);
}
private void Update()
{
if (collected || !playerInRange || GameUIState.IsAnyBlockingUIOpen)
{
return;
}
if (Input.GetKeyDown(KeyCode.E))
{
CollectNote();
}
}
private void OnTriggerEnter(Collider other)
{
if (collected || !other.CompareTag("Player"))
{
return;
}
playerInRange = true;
SetHighlighted(true);
InteractionPromptUI.Instance?.ShowPrompt(this, "Нажмите E");
}
private void OnTriggerExit(Collider other)
{
if (!other.CompareTag("Player"))
{
return;
}
playerInRange = false;
SetHighlighted(false);
InteractionPromptUI.Instance?.HidePrompt(this);
}
private void CollectNote()
{
collected = true;
playerInRange = false;
Inventory.Instance?.AddNote(new NoteData(noteTitle, noteContent));
NoteUI.Instance?.ShowNote(noteTitle, noteContent);
QuestManager.Instance?.NoteCollected();
InteractionPromptUI.Instance?.HidePrompt(this);
gameObject.SetActive(false);
}
private void SetHighlighted(bool highlighted)
{
if (noteRenderer == null)
{
return;
}
var targetMaterial = highlighted && highlightMaterial != null ? highlightMaterial : defaultMaterial;
if (targetMaterial != null)
{
noteRenderer.material = targetMaterial;
}
}
}