90 lines
2.6 KiB
C#
90 lines
2.6 KiB
C#
using UnityEngine;
|
|
|
|
namespace Vanguard.Board3D
|
|
{
|
|
/// <summary>Плоская зона стола: общий круг защиты, урон, душа.</summary>
|
|
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<BoardZoneView>();
|
|
view._baseColor = color;
|
|
view._highlightColor = highlightColor;
|
|
view._block = new MaterialPropertyBlock();
|
|
|
|
var filter = go.AddComponent<MeshFilter>();
|
|
filter.sharedMesh = BoardMeshLibrary.Frame(width, depth, border);
|
|
|
|
var renderer = go.AddComponent<MeshRenderer>();
|
|
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);
|
|
}
|
|
}
|
|
}
|