VanguardReMaster/client/Assets/Vanguard/Runtime/Board3D/View/BoardSlotView.cs

101 lines
3.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using UnityEngine;
namespace Vanguard.Board3D
{
/// <summary>Круг поля: рамка, коллайдер и подпись V/R.</summary>
public sealed class BoardSlotView : MonoBehaviour
{
private MeshRenderer _renderer;
private MaterialPropertyBlock _block;
private Color _baseColor;
private Color _highlightColor;
public int Player { get; private set; }
public int Slot { get; private set; }
public int LocalSeat { get; private set; }
public BoardSlotKey Key => new BoardSlotKey(Player, Slot);
public BoardCardRef Ref => BoardCardRef.EmptySlot(Player, Slot);
public void SetPlayer(int player)
{
Player = player;
}
public static BoardSlotView Create(
Transform parent,
PlaymatLayoutConfig config,
int localSeat,
int player,
int slot,
PlaymatLayout layout)
{
var go = new GameObject("Slot " + PlaymatLayout.SlotLabel(slot));
go.transform.SetParent(parent, false);
go.transform.localPosition = layout.CirclePosition(localSeat, slot);
go.transform.localPosition = new Vector3(
go.transform.localPosition.x,
0.012f,
go.transform.localPosition.z);
var view = go.AddComponent<BoardSlotView>();
view.Player = player;
view.Slot = slot;
view.LocalSeat = localSeat;
view._baseColor = slot == PlaymatLayout.VanguardSlot
? config.vanguardRingColor
: config.ringColor;
view._highlightColor = config.highlightColor;
view._block = new MaterialPropertyBlock();
var filter = go.AddComponent<MeshFilter>();
filter.sharedMesh = BoardMeshLibrary.Frame(
config.cardWidth * 1.34f,
config.cardHeight * 1.34f,
Mathf.Max(0.018f, config.cardWidth * 0.035f));
var renderer = go.AddComponent<MeshRenderer>();
renderer.sharedMaterial = BoardMaterials.Highlight;
BoardMaterials.SetShadows(renderer, false);
view._renderer = renderer;
view.ApplyColor(false);
var collider = go.AddComponent<BoxCollider>();
collider.size = new Vector3(
config.cardWidth * 1.12f,
0.02f,
config.cardHeight * 1.12f);
collider.center = Vector3.zero;
var label = slot == PlaymatLayout.VanguardSlot ? "V" : "R";
var text = BoardText.Create(
go.transform,
label,
0.14f,
new Color(1f, 1f, 1f, 0.34f),
new Vector3(0f, 0.001f, 0f));
text.name = "Slot Label";
return view;
}
public void SetHighlighted(bool highlighted)
{
ApplyColor(highlighted);
}
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);
}
}
}