extends Node enum VIBE { NORAML, MYSTERY, DANGEROUS, TOUCHING, } func get_camera_marker(): return get_node_or_null("/root/Main/CameraFocusMarker") func get_player() -> MainPlayer: var player = get_node_or_null("/root/Main/GroundLoader/Ground/MainPlayer") as MainPlayer # 在 editor 编辑时,可能会在 grounds 文件下获得 player if not player: var root = get_parent() for child in root.get_children(): if child.name.begins_with("S0") or child.name.begins_with("S1"): player = child.get_node_or_null("Ground/MainPlayer") as MainPlayer break return player func get_prop_hud() -> PropHud: return get_node_or_null("/root/Main/UILayer/PropHUD") as PropHud func get_current_prop(must_selected: bool) -> String: var prop_hud = get_prop_hud() if prop_hud and (not must_selected or prop_hud.selected): return prop_hud.inventory.current_item_key() return "" func enable_prop_item(prop_key: String) -> void: var prop_hud = get_prop_hud() if prop_hud: prop_hud.enable_prop_item(prop_key) func disable_prop_item(prop_key: String) -> void: var prop_hud = get_prop_hud() if prop_hud: prop_hud.disable_prop_item(prop_key) func pop_os(lines := []): var player = get_player() if player: player.pop_os(lines) else: printerr("Player node not found") # lock_time: the time to lock the player action. 0 means lock forever, thus the player will be locked until release_player is called. func freeze_player(lock_time: float, animation := "", loop := false, offset := Vector2(0, 0)) -> void: var player = get_player() if player: player.freeze_player(lock_time, animation, loop, offset) else: printerr("Player node not found") func release_player(): var player = get_player() if player: player.release_player() else: printerr("Player node not found") func set_camera_boundary(rect: Rect2) -> void: var camera_marker = CameraFocusMarker camera_marker.limit_left = rect.position.x camera_marker.limit_right = rect.position.x + rect.size.x camera_marker.limit_top = rect.position.y camera_marker.limit_bottom = rect.position.y + rect.size.y func set_player_boundary(rect: Rect2) -> void: var player = get_player() if player: player.player_movement_rect = rect else: printerr("Player node not found") func get_ground_loader() -> GroundLoader: return get_node_or_null("/root/Main/GroundLoader") as GroundLoader func pop_notification(msg: String, number := 1) -> void: var notification_node = get_node_or_null("/root/Main/UILayer/Notification") if notification_node: notification_node.show_notification(msg, number) else: printerr("Notification node not found") func pop_dialog( character: String, content: String, character_color := "orange", content_color := "white", duration := 2.5 ) -> void: var dialog_node = get_node_or_null("/root/Main/UILayer/Dialog") if dialog_node: dialog_node.append_dialog(character, content, character_color, content_color, duration) else: printerr("Dialog node not found") # func pop_note(note: String, note_color := "white", duration := 2.5) -> void: # var dialog_node = get_node_or_null("/root/Main/UILayer/Dialog") # if dialog_node: # dialog_node.append_note(note, note_color, duration) # else: # printerr("Dialog node not found") func get_inspector() -> PropInspector: return get_node_or_null("/root/Main/PropInspector") as PropInspector func focus_nodepath(node_path: NodePath) -> void: if not node_path: printerr("Node path is empty") return var node = get_node_or_null(node_path) if node: focus_node(node) else: printerr("Node not found:", node_path) var camera_remote_transformer: RemoteTransform2D var focus_mutex := Mutex.new() func focus_node(node: CanvasItem) -> void: var rt := node.get_node_or_null("./camera_remote_transformer") as RemoteTransform2D focus_mutex.lock() if rt: if camera_remote_transformer and rt != camera_remote_transformer: camera_remote_transformer.queue_free() camera_remote_transformer = rt else: if camera_remote_transformer: camera_remote_transformer.queue_free() camera_remote_transformer = RemoteTransform2D.new() node.add_child(camera_remote_transformer) _setup_camera_remote_transformer() focus_mutex.unlock() func _setup_camera_remote_transformer(): if not camera_remote_transformer: return camera_remote_transformer.remote_path = "/root/CameraFocusMarker" camera_remote_transformer.update_position = true camera_remote_transformer.update_rotation = false camera_remote_transformer.update_scale = false camera_remote_transformer.name = "camera_remote_transformer" func focus_player(player: MainPlayer = null) -> void: if not player: player = get_player() if player: focus_node(player) else: printerr("Player node not found") func focus_player_and_reset_zoom(duration := 1.0) -> void: CameraFocusMarker.tween_zoom(1.0, duration).tween_callback(focus_player) # func player_moved_delta_x(delta_x: float) -> void: # # fog effect offset # var fog = get_node_or_null("/root/Main/ShadingLayer/Fog") # # if fog: # # fog.texture.noise.offset.x += delta_x * 0.2