using UnityEngine; namespace Vanguard.Board3D { /// Плоская зона стола: общий круг защиты, урон, душа. public sealed class BoardZoneView : MonoBehaviour { private MeshRenderer _renderer; private MaterialPropertyBlock _block; private Color _baseColor; private Color _highlightColor; private TextMesh _label; public static BoardZoneView Create( Transform parent, string name, Vector3 position, float width, float depth, float border, Color color, string label, float labelSize, float labelOffsetZ, Color labelColor, Color highlightColor) { var go = new GameObject(name); go.transform.SetParent(parent, false); go.transform.localPosition = position; var view = go.AddComponent(); view._baseColor = color; view._highlightColor = highlightColor; view._block = new MaterialPropertyBlock(); var filter = go.AddComponent(); filter.sharedMesh = BoardMeshLibrary.Frame(width, depth, border); var renderer = go.AddComponent(); renderer.sharedMaterial = BoardMaterials.Highlight; BoardMaterials.SetShadows(renderer, false); view._renderer = renderer; view.ApplyColor(false); if (!string.IsNullOrEmpty(label)) { view._label = BoardText.Create( go.transform, label, labelSize, labelColor, new Vector3(0f, 0.002f, labelOffsetZ)); } return view; } public void SetLabel(string text) { BoardText.SetText(_label, text); } public void SetHighlighted(bool highlighted) { ApplyColor(highlighted); } public void SetColor(Color color) { _baseColor = color; ApplyColor(false); } private void ApplyColor(bool highlighted) { if (_renderer == null) return; _renderer.GetPropertyBlock(_block); _block.Clear(); BoardMaterials.SetColor( _block, _renderer.sharedMaterial, highlighted ? _highlightColor : _baseColor); _renderer.SetPropertyBlock(_block); } } }