Danro/Assets/Scripts/Behaviour/MessageController.cs

79 lines
3.2 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System.Collections;
using UnityEngine;
namespace RR.Common.Behaviour
{
public class MessageController : Sequencer
{
[Header("Настройки взаимодействия")]
[SerializeField] private bool isOneTime;
[Header("Префабы для сообщений")]
[SerializeField] private GameObject messagePlaceholderPrefab;
[SerializeField] private GameObject messageBubblePrefab;
[Header("Смещение сообщения")]
[SerializeField] private Vector3 defaultMessageOffset = new(0, 0.5f, 0);
private bool _isTriggered;
private void OnTriggerEnter2D(Collider2D other)
{
if (IsExecuting || _isTriggered || !other.CompareTag("Player")) return;
InitializeSequence(other.gameObject);
if (isOneTime) _isTriggered = true;
}
public void Add(GameObject targetObject, string text, Vector3 customOffset = default)
{
// Ищем объект "Message Placeholder" среди дочерних объектов
Transform placeholder = targetObject.transform.Find("Message Placeholder");
// Если placeholder не найден, создаем его
if (!placeholder)
{
GameObject placeholderInstance = Instantiate(messagePlaceholderPrefab, targetObject.transform);
Vector3 offset;
if (customOffset != default)
offset = customOffset;
else
offset = defaultMessageOffset;
if (targetObject.transform.localScale != Vector3.one)
placeholderInstance.transform.localScale = Vector3.one / targetObject.transform.localScale.x;
placeholderInstance.name = "Message Placeholder";
// Вычисляем смещение с учетом размера коллайдера объекта
Collider2D targetCollider = targetObject.GetComponent<Collider2D>();
if (targetCollider)
// Если на объекте есть коллайдер, учитываем его высоту
offset = new Vector3(
offset.x,
targetCollider.bounds.size.y + offset.y,
offset.z
);
// Устанавливаем позицию placeholder с учетом смещения
placeholderInstance.transform.position = targetObject.transform.position + offset;
// Сохраняем ссылку на трансформ placeholder
placeholder = placeholderInstance.transform;
}
// Создаем Message и добавляем его в placeholder
GameObject messageInstance = Instantiate(messageBubblePrefab, placeholder);
Message message = messageInstance.GetComponent<Message>();
if (message)
{
message.Initialize(text);
}
}
}
}