extends CanvasLayer @export var disable_crawl := false: set(val): disable_crawl = val if disable_crawl and is_node_ready(): down_pressing = false @export var show_cat := false @export var show_cat_duration := 6.0 @onready var cat_fg := $TextureCat as TextureRect func _ready(): offset = Vector2.ZERO visible = true await get_parent().ready # 盒子猫镜头左右各增加边框宽度 var camera = SceneManager.get_camera_marker() camera.limit_left -= 100 camera.limit_right += 100 camera.limit_top -= 50 # camera.limit_bottom += 50 if show_cat and not ArchiveManager.get_global_value(&"c02_boxcat_skip_intro"): cat_fg.visible = true var tween = create_tween() tween.tween_interval(2.5) tween.tween_property(cat_fg, "modulate:a", 0.0, show_cat_duration - 2.5) else: cat_fg.visible = false var down_pressing = false: set(val): if down_pressing == val: return if disable_crawl and val: return down_pressing = val _try_toggle_crawl() # 用来判断盒子猫是否在下蹲状态 var crawling = false: set(val): crawling = val locking = crawling # print("crawling: ", val) if crawling != down_pressing: # 执行结束后,如果发现不一致,尝试切换 crawling_toggle_tween = null _try_toggle_crawl() var crawling_toggle_tween: Tween var locking = false: set(val): if locking == val: return locking = val if locking: SceneManager.lock_player() else: SceneManager.unlock_player() var _toggle_mutex = Mutex.new() func _try_toggle_crawl(): _toggle_mutex.lock() if down_pressing == crawling: _toggle_mutex.unlock() return if crawling_toggle_tween and crawling_toggle_tween.is_valid(): _toggle_mutex.unlock() return crawling_toggle_tween = create_tween() var crawl = down_pressing if crawl: locking = true SceneManager.player_action(7) $"Sfx翻身躲藏".play() else: SceneManager.player_action(8, true) $"Sfx退出躲藏".play() crawling_toggle_tween.tween_interval(0.3) crawling_toggle_tween.tween_callback(func(): crawling = crawl) _toggle_mutex.unlock() func _unhandled_input(event: InputEvent) -> void: if event.is_action_pressed("down"): get_viewport().set_input_as_handled() down_pressing = true elif event.is_action_released("down"): get_viewport().set_input_as_handled() down_pressing = false func show_footprint(): $TextureFootprint.show() var frame = $TextureFrame frame.modulate.a = 0.0 frame.visible = true var tween = create_tween() tween.tween_interval(2.0) tween.tween_property(frame, "modulate:a", 1.0, 4.0)