From 0606f8ab3728c4a13977340c62d8dd4da3a110d5 Mon Sep 17 00:00:00 2001 From: vladislove Date: Tue, 11 Aug 2026 20:38:39 +0300 Subject: [PATCH] =?UTF-8?q?=D1=81=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=B4=20=D0=B4=D0=BB=D1=8F=20=D1=80=D0=B0=D0=B7=D0=BC?= =?UTF-8?q?=D0=B5=D1=89=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B2=D1=8B=D0=B1=D0=BE?= =?UTF-8?q?=D1=80=D0=B0=20=D1=86=D0=B2=D0=B5=D1=82=D0=BE=D0=B2=20=D0=BD?= =?UTF-8?q?=D0=BE=20=D0=BF=D0=BE=D0=BA=D0=B0=20=D0=BD=D0=B5=20=D0=B4=D0=BE?= =?UTF-8?q?=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20=D0=B2=20=D0=B8=D0=B3=D1=80?= =?UTF-8?q?=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Scripts/MetaPart/FurnitureController.cs | 15 ++++- .../Scripts/MetaPart/FurnitureObject.cs | 2 +- .../Scripts/MetaPart/FurniturePaletteUI.cs | 65 +++++++++++++++++++ .../MetaPart/FurniturePaletteUI.cs.meta | 3 + 4 files changed, 82 insertions(+), 3 deletions(-) create mode 100644 Assets/_Project/Scripts/MetaPart/FurniturePaletteUI.cs create mode 100644 Assets/_Project/Scripts/MetaPart/FurniturePaletteUI.cs.meta diff --git a/Assets/_Project/Scripts/MetaPart/FurnitureController.cs b/Assets/_Project/Scripts/MetaPart/FurnitureController.cs index cb13562..35d0d57 100644 --- a/Assets/_Project/Scripts/MetaPart/FurnitureController.cs +++ b/Assets/_Project/Scripts/MetaPart/FurnitureController.cs @@ -34,7 +34,8 @@ public class FurnitureController : MonoBehaviour private bool _isInteracting = false; private Vector3 _lastInputPos; private Vector3 _dragOffset; - + [Header("Связь с UI Цветов")] + public FurniturePaletteUI paletteUI; // Ссылка на новый скрипт private float _lastClickTime = 0f; private void Start() @@ -203,6 +204,9 @@ public class FurnitureController : MonoBehaviour _currentTool = EditTool.Move; if (rotate90Button != null) rotate90Button.SetActive(false); + // Показываем панель цветов при выборе предмета + if (paletteUI != null) paletteUI.ShowColors(_activeFurnitureScript); + _isInteracting = false; LockCamera(false); UpdateUIPosition(); @@ -273,12 +277,17 @@ public class FurnitureController : MonoBehaviour _activeFurnitureScript = _activeFurniture.GetComponent(); // --- МАГИЯ АРХИТЕКТУРЫ --- - // Находим скрипт визуала и применяем базовый цвет (Preset 0) + // Инъекция карточки товара в объект на сцене! + _activeFurnitureScript.runtimeItemData = currentItemData; + FurnitureVisuals visuals = _activeFurniture.GetComponent(); if (visuals != null && currentItemData.availablePresets != null && currentItemData.availablePresets.Count > 0) { visuals.ApplyPreset(currentItemData.availablePresets[0]); } + + // Показываем панель цветов для только что заспавненного объекта + if (paletteUI != null) paletteUI.ShowColors(_activeFurnitureScript); // ------------------------- _activeFurnitureScript.SetEditMode(true); @@ -328,6 +337,7 @@ public class FurnitureController : MonoBehaviour _activeFurniture = null; _activeFurnitureScript = null; editPanel.SetActive(false); + if (paletteUI != null) paletteUI.HideColors(); LockCamera(false); } } @@ -342,6 +352,7 @@ public class FurnitureController : MonoBehaviour _activeFurniture = null; _activeFurnitureScript = null; editPanel.SetActive(false); + if (paletteUI != null) paletteUI.HideColors(); LockCamera(false); } } diff --git a/Assets/_Project/Scripts/MetaPart/FurnitureObject.cs b/Assets/_Project/Scripts/MetaPart/FurnitureObject.cs index 565090c..c26de70 100644 --- a/Assets/_Project/Scripts/MetaPart/FurnitureObject.cs +++ b/Assets/_Project/Scripts/MetaPart/FurnitureObject.cs @@ -7,7 +7,7 @@ public class FurnitureObject : MonoBehaviour public bool isWallObject; private int _obstaclesCount = 0; public bool IsPlacementValid => _obstaclesCount == 0; - + [HideInInspector] public FurnitureItemSO runtimeItemData; private GameObject _highlightBox; private Material _highlightMaterial; diff --git a/Assets/_Project/Scripts/MetaPart/FurniturePaletteUI.cs b/Assets/_Project/Scripts/MetaPart/FurniturePaletteUI.cs new file mode 100644 index 0000000..c8200b2 --- /dev/null +++ b/Assets/_Project/Scripts/MetaPart/FurniturePaletteUI.cs @@ -0,0 +1,65 @@ +using UnityEngine; +using UnityEngine.UI; + +public class FurniturePaletteUI : MonoBehaviour +{ + [Header("UI Элементы")] + public GameObject palettePanel; // Панель, которая выезжает с цветами + public Transform contentContainer; // Объект с Horizontal/Grid Layout Group + public GameObject colorBtnTemplate; // Префаб кнопки цвета + + private FurnitureVisuals _currentVisuals; + + public void ShowColors(FurnitureObject furniture) + { + // Проверяем, есть ли карточка и скрипт визуала + if (furniture == null || furniture.runtimeItemData == null) return; + + _currentVisuals = furniture.GetComponent(); + if (_currentVisuals == null || furniture.runtimeItemData.availablePresets.Count <= 1) + { + // Если цвет всего один или нет визуала - не показываем панель + palettePanel.SetActive(false); + return; + } + + palettePanel.SetActive(true); + + // 1. Очищаем старые кнопки + foreach (Transform child in contentContainer) + { + Destroy(child.gameObject); + } + + // 2. Создаем новые кнопки цветов + foreach (FurniturePreset preset in furniture.runtimeItemData.availablePresets) + { + GameObject btnObj = Instantiate(colorBtnTemplate, contentContainer); + + // Ставим иконку цвета (которую вы настраивали в SO) + Image img = btnObj.GetComponent(); + if (img != null && preset.presetIcon != null) + { + img.sprite = preset.presetIcon; + } + + // Настраиваем клик по кнопке + Button btn = btnObj.GetComponent