167 lines
4.4 KiB
GDScript
167 lines
4.4 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/GroundLoader/Ground/MainPlayer") as MainPlayer
|
|
|
|
|
|
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 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 := ""):
|
|
var player = get_player()
|
|
if player:
|
|
player.freeze_player(lock_time, animation)
|
|
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
|