xiandie/manager/deploy/scene/scene_manager.gd

136 lines
3.6 KiB
GDScript

extends Node
enum VIBE {
NORAML,
MYSTERY,
DANGEROUS,
TOUCHING,
}
func get_camera_marker():
return get_node_or_null("/root/Main/CameraFocusMarker")
func get_player() -> MainPlayer:
return get_node_or_null("/root/Main/MainPlayer") as MainPlayer
# 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 := ""):
var player = get_player()
if player:
player.freeze_player(lock_time, animation)
func set_camera_boundary(size: Vector2) -> void:
var camera_marker = CameraFocusMarker
camera_marker.limit_left = 0
camera_marker.limit_right = size.x
camera_marker.limit_top = -size.y / 2.0 - 38
camera_marker.limit_bottom = size.y / 2.0 + 38
if GlobalConfig.DEBUG:
print("set camera boundary:", size)
else:
printerr("camera_marker node not found")
func set_player_boundary(size: Vector2) -> void:
var player = get_player()
if player:
size.x = size.x - 30
var rect = Rect2(Vector2(15, -size.y / 2), size)
player.player_movement_rect = rect
if GlobalConfig.DEBUG:
print("set player boundary:", 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
func focus_node(node: Node2D) -> void:
var rt := node.get_node_or_null("./camera_remote_transformer") as RemoteTransform2D
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()
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() -> void:
var 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)