Files
Babushka/scripts/CSharp/Common/Minigame/RegionVisual.cs
T

38 lines
1.3 KiB
C#
Raw Normal View History

2025-10-02 01:32:52 +02:00
using Godot;
using System;
2025-10-03 20:02:25 +02:00
using Babushka.scripts.CSharp.Common.Minigame;
using Godot.Collections;
2025-10-02 01:32:52 +02:00
public partial class RegionVisual : Node
{
[Export] private Sprite2D _sliceSprite;
2025-10-03 19:37:54 +02:00
[Export] private Label _textLabel;
[Export] private Node2D _labelPivot;
2025-10-03 20:02:25 +02:00
[Export(PropertyHint.DictionaryType)] private Dictionary<MinigameController.RegionTheme, Color> _fillColors = new();
2025-10-02 01:32:52 +02:00
public override void _EnterTree()
{
//_sliceSprite.Material = new Material()
}
2025-10-03 20:02:25 +02:00
public void Setup(Vector2 normalAngles, Color color, string regionText, MinigameController.RegionTheme regionTheme)
2025-10-02 01:32:52 +02:00
{
var mat = (_sliceSprite.Material as ShaderMaterial)!;
mat.SetShaderParameter("angles", normalAngles);
2025-10-03 20:02:25 +02:00
mat.SetShaderParameter("fillColor", GetFillColor(regionTheme));
2025-10-03 19:37:54 +02:00
var averageAngleRadians = (normalAngles.X + normalAngles.Y) * float.Pi; // '/ 2' from the average and '* 2' from the radians cancel out
_labelPivot.Rotation = averageAngleRadians;
_textLabel.Rotation = -averageAngleRadians;
_textLabel.Text = regionText;
2025-10-02 01:32:52 +02:00
}
2025-10-03 20:02:25 +02:00
private Color GetFillColor(MinigameController.RegionTheme theme)
{
if (_fillColors.TryGetValue(theme, out var color)) return color;
throw new InvalidOperationException($"No fill color for theme {theme}");
}
2025-10-02 01:32:52 +02:00
}