Init
This commit is contained in:
59
hat_cycler.gd
Normal file
59
hat_cycler.gd
Normal file
@@ -0,0 +1,59 @@
|
||||
extends Marker3D
|
||||
|
||||
@onready var hat_anchor = self
|
||||
var current_hat: Node3D
|
||||
var hat_index := 0
|
||||
var hat_scenes: Array[PackedScene] = []
|
||||
|
||||
@export var hats_folder := "res://hat_scenes/"
|
||||
@export var cycle_interval := 3.0
|
||||
|
||||
func _ready():
|
||||
load_hat_scenes(hats_folder)
|
||||
if hat_scenes.size() > 0:
|
||||
equip_hat(hat_scenes[hat_index])
|
||||
start_cycling()
|
||||
else:
|
||||
push_warning("No hat scenes found in: " + hats_folder)
|
||||
|
||||
func load_hat_scenes(path: String):
|
||||
var dir := DirAccess.open(path)
|
||||
if dir == null:
|
||||
push_error("Could not open hat folder: " + path)
|
||||
return
|
||||
|
||||
dir.list_dir_begin()
|
||||
while true:
|
||||
var file_name = dir.get_next()
|
||||
if file_name == "":
|
||||
break
|
||||
if dir.current_is_dir():
|
||||
continue
|
||||
if file_name.ends_with(".tscn"):
|
||||
var scene_path = path.path_join(file_name)
|
||||
var hat_scene = load(scene_path)
|
||||
if hat_scene is PackedScene:
|
||||
hat_scenes.append(hat_scene)
|
||||
dir.list_dir_end()
|
||||
hat_scenes.sort_custom(func(a, b): return a.resource_path < b.resource_path)
|
||||
|
||||
func start_cycling():
|
||||
var timer = Timer.new()
|
||||
timer.wait_time = cycle_interval
|
||||
timer.autostart = true
|
||||
timer.one_shot = false
|
||||
timer.timeout.connect(_on_cycle_timeout)
|
||||
add_child(timer)
|
||||
|
||||
func _on_cycle_timeout():
|
||||
if hat_scenes.size() == 0:
|
||||
return
|
||||
hat_index = (hat_index + 1) % hat_scenes.size()
|
||||
equip_hat(hat_scenes[hat_index])
|
||||
|
||||
func equip_hat(scene: PackedScene):
|
||||
if current_hat:
|
||||
current_hat.queue_free()
|
||||
var hat = scene.instantiate()
|
||||
hat_anchor.add_child(hat)
|
||||
current_hat = hat
|
||||
Reference in New Issue
Block a user