using UnityEngine; using UnityEngine.EventSystems; public class FurnitureBuilder : MonoBehaviour { public enum EditTool { Move, Rotate } [Header("Настройки")] public GameObject currentPrefab; public LayerMask floorLayer; [SerializeField] private GameObject shopPanel; [Header("Режим редактирования (UI)")] [SerializeField] private GameObject editPanel; public float rotationSpeed = 5f; // Внутренние переменные состояния private GameObject _activeFurniture; private FurnitureObject _activeFurnitureScript; // <--- ИЗМЕНИЛИ ИМЯ ЗДЕСЬ private EditTool _currentTool = EditTool.Move; private Camera _cam; private void Start() { _cam = Camera.main; currentPrefab = null; editPanel.SetActive(false); } void Update() { if (_activeFurniture != null) { HandleEditing(); } else if (currentPrefab != null) { if (Input.GetMouseButtonDown(0) && !shopPanel.activeSelf && !IsPointerOverUI()) { TryPlaceFurniture(); } } } private void HandleEditing() { Vector3 screenPos = _cam.WorldToScreenPoint(_activeFurniture.transform.position); editPanel.transform.position = screenPos + new Vector3(0, 100, 0); if (Input.GetMouseButton(0) && !IsPointerOverUI()) { if (_currentTool == EditTool.Move) { Ray ray = _cam.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray, out RaycastHit hit, 100f, floorLayer)) { _activeFurniture.transform.position = hit.point; } } else if (_currentTool == EditTool.Rotate) { float rotX = Input.GetAxis("Mouse X"); _activeFurniture.transform.Rotate(Vector3.up, -rotX * rotationSpeed); } } } void TryPlaceFurniture() { Ray ray = _cam.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray, out RaycastHit hit, 100f, floorLayer)) { _activeFurniture = Instantiate(currentPrefab, hit.point, Quaternion.identity); // <--- ИЗМЕНИЛИ ИМЯ ЗДЕСЬ _activeFurnitureScript = _activeFurniture.GetComponent(); _activeFurnitureScript.SetEditMode(true); editPanel.SetActive(true); _currentTool = EditTool.Move; currentPrefab = null; } } public void SelectMoveTool() { _currentTool = EditTool.Move; } public void SelectRotateTool() { _currentTool = EditTool.Rotate; } public void ConfirmPlacement() { if (_activeFurnitureScript != null && _activeFurnitureScript.IsPlacementValid) { _activeFurnitureScript.SetEditMode(false); _activeFurniture = null; _activeFurnitureScript = null; editPanel.SetActive(false); } else { Debug.Log("Нельзя поставить сюда! Мебель пересекается с препятствием."); } } public void SelectFurnitureAndCloseShop(GameObject prefabToSelect) { currentPrefab = prefabToSelect; shopPanel.SetActive(false); } private bool IsPointerOverUI() { if (EventSystem.current != null) { if (EventSystem.current.IsPointerOverGameObject()) return true; if (Input.touchCount > 0 && EventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId)) return true; } return false; } }