сделал код для размещения выбора цветов но пока не добавил в игру
This commit is contained in:
parent
eff9613938
commit
0606f8ab37
@ -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<FurnitureObject>();
|
||||
|
||||
// --- МАГИЯ АРХИТЕКТУРЫ ---
|
||||
// Находим скрипт визуала и применяем базовый цвет (Preset 0)
|
||||
// Инъекция карточки товара в объект на сцене!
|
||||
_activeFurnitureScript.runtimeItemData = currentItemData;
|
||||
|
||||
FurnitureVisuals visuals = _activeFurniture.GetComponent<FurnitureVisuals>();
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
|
||||
65
Assets/_Project/Scripts/MetaPart/FurniturePaletteUI.cs
Normal file
65
Assets/_Project/Scripts/MetaPart/FurniturePaletteUI.cs
Normal file
@ -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<FurnitureVisuals>();
|
||||
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<Image>();
|
||||
if (img != null && preset.presetIcon != null)
|
||||
{
|
||||
img.sprite = preset.presetIcon;
|
||||
}
|
||||
|
||||
// Настраиваем клик по кнопке
|
||||
Button btn = btnObj.GetComponent<Button>();
|
||||
FurniturePreset presetToApply = preset; // Замыкание для кнопки
|
||||
|
||||
btn.onClick.AddListener(() =>
|
||||
{
|
||||
if (_currentVisuals != null)
|
||||
{
|
||||
_currentVisuals.ApplyPreset(presetToApply);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
public void HideColors()
|
||||
{
|
||||
palettePanel.SetActive(false);
|
||||
_currentVisuals = null;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a4a4b4004bcb4480a035e8fa992fbb6b
|
||||
timeCreated: 1786469625
|
||||
Loading…
Reference in New Issue
Block a user