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

49 lines
1.7 KiB
GDScript
Raw Normal View History

2025-08-26 09:24:09 +08:00
@tool
extends Control
2025-08-26 11:39:47 +08:00
class_name ColorBar
2025-08-26 09:24:09 +08:00
@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
2025-08-26 09:24:09 +08:00
@export var speed2: float = 0.01
var middleValue = 0
var frontValue = 0
var forwardDirection = -1
var lastChangeTime = 0
2025-08-26 09:24:09 +08:00
func getPercent(value: float):
return (value - minValue) / (maxValue - minValue)
func setCurrent(value: float):
if value == currentValue:
return
2025-08-26 09:24:09 +08:00
forwardDirection = sign(value - currentValue)
currentValue = clamp(value, minValue, maxValue)
lastChangeTime = WorldManager.getTime()
func forceSync():
2025-08-26 09:24:09 +08:00
middleValue = currentValue
frontValue = currentValue
func _ready():
forceSync()
lastChangeTime = WorldManager.getTime()
2025-08-26 09:24:09 +08:00
func _draw():
draw_style_box(backBox, Rect2(0, 0, size.x, size.y))
2025-09-06 17:13:34 +08:00
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:
2025-09-06 17:53:11 +08:00
if forwardDirection > 0:
2025-09-06 17:13:34 +08:00
middleValue = lerpf(middleValue, currentValue, speed1 if forwardDirection > 0 else speed2)
2025-09-06 17:53:11 +08:00
if WorldManager.getTime() - lastChangeTime > GameRule.detainTime:
frontValue = lerpf(frontValue, currentValue, speed1 if forwardDirection < 0 else speed2)
else:
if WorldManager.getTime() - lastChangeTime > GameRule.detainTime:
middleValue = lerpf(middleValue, currentValue, speed1 if forwardDirection > 0 else speed2)
frontValue = lerpf(frontValue, currentValue, speed1 if forwardDirection < 0 else speed2)
2025-08-26 09:24:09 +08:00
queue_redraw()