using System.Collections; using System.Collections.Generic; using UnityEngine; public class NoteBookController : MonoBehaviour { [SerializeField] private Transform _camera; [SerializeField] private HeroCameraController _cameraController; [SerializeField] private NoteBookUI _noteBookUI; [SerializeField] private float _distanceFromCamera = 0.5f; [SerializeField] private float _animationSpeed = 3f; private bool _isOpen = false; private Vector3 _originalPosition; private Quaternion _originalRotation; private Rigidbody _rb; private Collider _col; public bool IsOpen => _isOpen; private void Start() { _originalPosition = transform.position; _originalRotation = transform.rotation; _rb = GetComponent(); _col = GetComponent(); } public void OpenNotebook() { if (_isOpen) return; _isOpen = true; if (_rb != null) { _rb.useGravity = false; _rb.velocity = Vector3.zero; _rb.angularVelocity = Vector3.zero; } if (_col != null) _col.enabled = false; if (_cameraController != null) _cameraController.SetCameraActive(false); StopAllCoroutines(); StartCoroutine(AnimateOpen()); } public void CloseNotebook() { if (!_isOpen) return; _isOpen = false; if (_noteBookUI != null) _noteBookUI.Hide(); if (_cameraController != null) _cameraController.SetCameraActive(true); StopAllCoroutines(); StartCoroutine(AnimateClose()); } private IEnumerator AnimateOpen() { Vector3 targetPos = _camera.position + _camera.forward * _distanceFromCamera + Vector3.up * 0.01f; Quaternion targetRot = Quaternion.LookRotation(-_camera.up) * Quaternion.Euler(0f, 0f, 0f); float t = 0f; Vector3 startPos = transform.position; Quaternion startRot = transform.rotation; while (t < 1f) { t += Time.deltaTime * _animationSpeed; transform.position = Vector3.Lerp(startPos, targetPos, t); transform.rotation = Quaternion.Slerp(startRot, targetRot, t); yield return null; } transform.position = targetPos; transform.rotation = targetRot; if (_noteBookUI != null) _noteBookUI.Show(); } private IEnumerator AnimateClose() { float t = 0f; Vector3 startPos = transform.position; Quaternion startRot = transform.rotation; while (t < 1f) { t += Time.deltaTime * _animationSpeed; transform.position = Vector3.Lerp(startPos, _originalPosition, t); transform.rotation = Quaternion.Slerp(startRot, _originalRotation, t); yield return null; } transform.position = _originalPosition; transform.rotation = _originalRotation; if (_rb != null) { _rb.useGravity = true; _rb.WakeUp(); } if (_col != null) _col.enabled = true; } }