69 lines
1.3 KiB
C#
69 lines
1.3 KiB
C#
using UnityEngine;
|
|
|
|
namespace Cryville.EEW.Unity.Map {
|
|
sealed class RegionView : MonoBehaviour {
|
|
[SerializeField]
|
|
SpriteRenderer m_spriteRenderer;
|
|
|
|
Color _color;
|
|
|
|
bool m_isHovered;
|
|
public bool IsHovered {
|
|
get => m_isHovered;
|
|
set {
|
|
m_isHovered = value;
|
|
UpdateColor();
|
|
}
|
|
}
|
|
|
|
bool m_isSelected;
|
|
public bool IsSelected {
|
|
get => m_isSelected;
|
|
set {
|
|
m_isSelected = value;
|
|
UpdateColor();
|
|
}
|
|
}
|
|
|
|
bool m_isLeaf = true;
|
|
public bool IsLeaf {
|
|
get => m_isLeaf;
|
|
set {
|
|
m_isLeaf = value;
|
|
UpdateColor();
|
|
}
|
|
}
|
|
|
|
string m_id;
|
|
public string Id {
|
|
get => m_id;
|
|
set {
|
|
m_id = value;
|
|
unchecked {
|
|
uint hash = (uint)value.GetHashCode();
|
|
_color = Color.HSVToRGB(((hash >> 24) ^ ((hash >> 16) & 0xff) ^ ((hash >> 8) & 0xff) ^ (hash & 0xff)) / (float)0xff, 1, 1);
|
|
}
|
|
UpdateColor();
|
|
}
|
|
}
|
|
|
|
public void Init(int x, int y, int z) {
|
|
float scale = 1f / (1 << z);
|
|
transform.localScale = new Vector3(scale, scale, 1);
|
|
transform.localPosition = new Vector3(x * scale, y * scale - 1, -1 - z / 100f);
|
|
}
|
|
|
|
void UpdateColor() {
|
|
if (!m_isLeaf)
|
|
_color.a = 0.0f;
|
|
else if (m_isSelected)
|
|
_color.a = 0.6f;
|
|
else if (m_isHovered)
|
|
_color.a = 0.4f;
|
|
else
|
|
_color.a = 0.2f;
|
|
m_spriteRenderer.color = _color;
|
|
}
|
|
}
|
|
}
|