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/CycleTimer.gd
T
fallingshrimp f5f63ee602 fix(Statemachine): 在子弹过滤中添加实例有效性检查
确保在过滤子弹时检查实例是否有效,避免因无效实例导致的错误
2026-05-10 22:51:03 +08:00

37 lines
1015 B
GDScript

class_name CycleTimer
@export var period: float = 1
var startTime: float = 0
var running: bool = false
var distance: float = 200
var bullets: Array[BulletBase] = []
func start():
startTime = WorldManager.getTime()
running = true
func lifetime():
return WorldManager.getTime() - startTime
func getStateAngle(index: int):
return lifetime() / period * deg_to_rad(360) - deg_to_rad(360.0 * index / len(bullets))
func forceFilter():
bullets = bullets.filter(
func(b):
if is_instance_valid(b) && b is BulletBase:
return !b.destroying
else:
return false
)
func apply(where: Vector2):
forceFilter()
for index in len(bullets):
var bullet = bullets[index]
var newStateAngle = lerp_angle(bullet.cycleStateAngle, getStateAngle(index), 0.1)
var offset = Vector2.from_angle(newStateAngle)
bullet.cycleStateAngle = newStateAngle
offset.y *= 0.25
bullet.position = where + offset * distance
bullet.scale = Vector2.ONE * (1 + offset.y)
func host(bullet: BulletBase):
bullets.append(bullet)