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);
}
}
}