1
1
mirror of https://github.com/Rundll86/Dog-Lynx-And-HCN.git synced 2026-05-28 06:51:54 +08:00
Files
Dog-Lynx-And-HCN/scripts/Statemachine/Circle.gd
T

48 lines
1.6 KiB
GDScript
Raw Normal View History

@tool
extends Control
class_name Circle
@export var cyclotomy: int = 32
@export var avatar: Texture2D = null
@export var backgroundColor: Color = Color(0, 0, 0, 0.5)
@export var borderColor: Color = Color(0.2, 0.2, 0.2)
@export var borderWidth: int = 5
@onready var polygon: Polygon2D = $"%polygon"
@onready var texture: TextureRect = $"%texture"
@onready var background: PanelContainer = $"%background"
var backgroundBox: StyleBoxFlat = null
func _ready():
backgroundBox = StyleBoxFlat.new()
background.add_theme_stylebox_override("panel", backgroundBox)
func _process(_delta):
var radius = max(size.x, size.y) / 2
size = Vector2(radius * 2, radius * 2)
polygon.polygon = getPolygon(radius)
polygon.position = size / 2
backgroundBox.bg_color = backgroundColor
backgroundBox.border_color = borderColor
backgroundBox.corner_radius_top_left = radius
backgroundBox.corner_radius_top_right = radius
backgroundBox.corner_radius_bottom_left = radius
backgroundBox.corner_radius_bottom_right = radius
backgroundBox.border_width_top = borderWidth
backgroundBox.border_width_bottom = borderWidth
backgroundBox.border_width_left = borderWidth
backgroundBox.border_width_right = borderWidth
background.size = size
texture.size = Vector2(radius * 2, radius * 2)
texture.position = - Vector2(radius, radius)
if avatar:
texture.texture = avatar
func getPolygon(radius: float):
var result: Array[Vector2] = []
for i in cyclotomy:
var angle = i * (TAU / cyclotomy)
var x = (radius - borderWidth) * cos(angle)
var y = (radius - borderWidth) * sin(angle)
result.append(Vector2(x, y))
return result