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/ColorBar.gd
T
2025-08-27 20:48:21 +08:00

38 lines
1.2 KiB
GDScript

@tool
extends Control
class_name ColorBar
@export var minValue: float = 0
@export var maxValue: float = 100
@export var currentValue: float = 50
@export var backBox: StyleBox
@export var middleBox1: StyleBox
@export var middleBox2: StyleBox
@export var frontBox: StyleBox
@export var speed1: float = 0.8
@export var speed2: float = 0.01
var middleValue = 0
var frontValue = 0
var forwardDirection = -1
func getPercent(value: float):
return (value - minValue) / (maxValue - minValue)
func setCurrent(value: float):
if value == currentValue:
return
forwardDirection = sign(value - currentValue)
currentValue = clamp(value, minValue, maxValue)
func _ready():
middleValue = currentValue
frontValue = currentValue
func _draw():
draw_style_box(backBox, Rect2(0, 0, size.x, size.y))
draw_style_box(middleBox2 if forwardDirection > 0 else middleBox1, Rect2(0, 0, size.x * getPercent(middleValue), size.y))
draw_style_box(frontBox, Rect2(0, 0, size.x * getPercent(frontValue), size.y))
func _physics_process(_delta: float) -> void:
middleValue = lerpf(middleValue, currentValue, speed1 if forwardDirection > 0 else speed2)
frontValue = lerpf(frontValue, currentValue, speed1 if forwardDirection < 0 else speed2)
queue_redraw()