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 - 3) else: cat_fg.visible = false var down_pressing = false: set(val): # print("down_pressing: ", val) down_pressing = val _try_toggle_crawl() # 用来判断盒子猫是否在下蹲状态 var crawling = false: set(val): crawling = val # print("crawling: ", val) if val != down_pressing: # 执行结束后,如果发现不一致,尝试切换 # print("crawling mismatch, swtich to: ", down_pressing) # 需要重置 tween crawling_toggle_tween = null _try_toggle_crawl() var crawling_toggle_tween: Tween func _try_toggle_crawl(): if crawling_toggle_tween and crawling_toggle_tween.is_valid(): # print("tweening, skip.") return crawling_toggle_tween = create_tween() var crawl = down_pressing if crawl: SceneManager.freeze_player(0, 7) else: SceneManager.freeze_player(0, 8, true) crawling_toggle_tween.tween_interval(0.4) if not crawl: crawling_toggle_tween.tween_callback(SceneManager.release_player) crawling_toggle_tween.tween_callback(func(): crawling = crawl) func _unhandled_input(event: InputEvent) -> void: if disable_crawl: return if event.is_action_pressed("down"): get_viewport().set_input_as_handled() if not down_pressing: down_pressing = true elif event.is_action_released("down"): get_viewport().set_input_as_handled() if down_pressing: 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)