generated from krampus/template-godot4
	
		
			
	
	
		
			150 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			GDScript3
		
	
	
	
	
	
		
		
			
		
	
	
			150 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			GDScript3
		
	
	
	
	
	
|  | @tool | ||
|  | extends Node | ||
|  | 
 | ||
|  | const _CONSTANTS = preload("res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_constants.gd") | ||
|  | 
 | ||
|  | #region Signals | ||
|  | 
 | ||
|  | # Noise | ||
|  | signal noise_2d_emitted(noise_output: Transform2D, emitter_layer: int) | ||
|  | signal noise_3d_emitted(noise_output: Transform3D, emitter_layer: int) | ||
|  | 
 | ||
|  | # PCam Host | ||
|  | signal pcam_host_added_to_scene(pcam_host: PhantomCameraHost) | ||
|  | signal pcam_host_removed_from_scene(pcam_host: PhantomCameraHost) | ||
|  | 
 | ||
|  | # PCam | ||
|  | signal pcam_added_to_scene(pcam: Node) | ||
|  | signal pcam_removed_from_scene(pcam: Node) | ||
|  | 
 | ||
|  | # Priority | ||
|  | signal pcam_priority_changed(pcam: Node) | ||
|  | signal pcam_visibility_changed(pcam: Node) | ||
|  | 
 | ||
|  | signal pcam_teleport(pcam: Node) | ||
|  | 
 | ||
|  | # Limit (2D) | ||
|  | signal limit_2d_changed(side: int, limit: int) | ||
|  | signal draw_limit_2d(enabled: bool) | ||
|  | 
 | ||
|  | # Camera3DResource (3D) | ||
|  | signal camera_3d_resource_changed(property: String, value: Variant) | ||
|  | 
 | ||
|  | # Viewfinder Signals | ||
|  | signal viewfinder_pcam_host_switch(pcam_host: PhantomCameraHost) | ||
|  | signal pcam_priority_override(pcam: Node, shouldOverride: bool) | ||
|  | signal pcam_dead_zone_changed(pcam: Node) | ||
|  | signal pcam_host_layer_changed(pcam: Node) | ||
|  | 
 | ||
|  | #endregion | ||
|  | 
 | ||
|  | #region Private Variables | ||
|  | 
 | ||
|  | var _phantom_camera_host_list: Array[PhantomCameraHost] | ||
|  | var _phantom_camera_2d_list: Array[PhantomCamera2D] | ||
|  | var _phantom_camera_3d_list: Array[Node] ## Note: To support disable_3d export templates for 2D projects, this is purposely not strongly typed. | ||
|  | 
 | ||
|  | #endregion | ||
|  | 
 | ||
|  | #region Public Variables | ||
|  | 
 | ||
|  | var phantom_camera_hosts: Array[PhantomCameraHost]: | ||
|  | 	get: | ||
|  | 		return _phantom_camera_host_list | ||
|  | 
 | ||
|  | var phantom_camera_2ds: Array[PhantomCamera2D]: | ||
|  | 	get: | ||
|  | 		return _phantom_camera_2d_list | ||
|  | 
 | ||
|  | var phantom_camera_3ds: Array[Node]: ## Note: To support disable_3d export templates for 2D projects, this is purposely not strongly typed. | ||
|  | 	get: | ||
|  | 		return _phantom_camera_3d_list | ||
|  | 
 | ||
|  | var screen_size: Vector2i | ||
|  | 
 | ||
|  | #endregion | ||
|  | 
 | ||
|  | #region Private Functions | ||
|  | 
 | ||
|  | func _enter_tree() -> void: | ||
|  | 	if not Engine.has_singleton(_CONSTANTS.PCAM_MANAGER_NODE_NAME): | ||
|  | 		Engine.register_singleton(_CONSTANTS.PCAM_MANAGER_NODE_NAME, self) | ||
|  | 	Engine.physics_jitter_fix = 0 | ||
|  | 
 | ||
|  | 
 | ||
|  | func _ready() -> void: | ||
|  | 	# Setting default screensize | ||
|  | 	screen_size = Vector2i( | ||
|  | 		ProjectSettings.get_setting("display/window/size/viewport_width"), | ||
|  | 		ProjectSettings.get_setting("display/window/size/viewport_height") | ||
|  | 	) | ||
|  | 
 | ||
|  | 	# For editor | ||
|  | 	if Engine.is_editor_hint(): | ||
|  | 		ProjectSettings.settings_changed.connect(func(): | ||
|  | 			screen_size = Vector2i( | ||
|  | 				ProjectSettings.get_setting("display/window/size/viewport_width"), | ||
|  | 				ProjectSettings.get_setting("display/window/size/viewport_height") | ||
|  | 			) | ||
|  | 		) | ||
|  | 	# For runtime | ||
|  | 	else: | ||
|  | 		get_tree().get_root().size_changed.connect(func(): | ||
|  | 			screen_size = get_viewport().get_visible_rect().size | ||
|  | 		) | ||
|  | 
 | ||
|  | #endregion | ||
|  | 
 | ||
|  | #region Public Functions | ||
|  | 
 | ||
|  | func pcam_host_added(caller: Node) -> void: | ||
|  | 	if is_instance_of(caller, PhantomCameraHost): | ||
|  | 		_phantom_camera_host_list.append(caller) | ||
|  | 		pcam_host_added_to_scene.emit(caller) | ||
|  | 	else: | ||
|  | 		printerr("This method can only be called from a PhantomCameraHost node") | ||
|  | 
 | ||
|  | func pcam_host_removed(caller: Node) -> void: | ||
|  | 	if is_instance_of(caller, PhantomCameraHost): | ||
|  | 		_phantom_camera_host_list.erase(caller) | ||
|  | 		pcam_host_removed_from_scene.emit(caller) | ||
|  | 	else: | ||
|  | 		printerr("This method can only be called from a PhantomCameraHost node") | ||
|  | 
 | ||
|  | 
 | ||
|  | func pcam_added(caller) -> void: | ||
|  | 	if is_instance_of(caller, PhantomCamera2D): | ||
|  | 		_phantom_camera_2d_list.append(caller) | ||
|  | 		pcam_added_to_scene.emit(caller) | ||
|  | 	elif caller.is_class("PhantomCamera3D"): ## Note: To support disable_3d export templates for 2D projects, this is purposely not strongly typed. | ||
|  | 		_phantom_camera_3d_list.append(caller) | ||
|  | 		pcam_added_to_scene.emit(caller) | ||
|  | 
 | ||
|  | func pcam_removed(caller) -> void: | ||
|  | 	if is_instance_of(caller, PhantomCamera2D): | ||
|  | 		_phantom_camera_2d_list.erase(caller) | ||
|  | 		pcam_removed_from_scene.emit(caller) | ||
|  | 	elif caller.is_class("PhantomCamera3D"): ## Note: To support disable_3d export templates for 2D projects, this is purposely not strongly typed. | ||
|  | 		_phantom_camera_3d_list.erase(caller) | ||
|  | 		pcam_removed_from_scene.emit(caller) | ||
|  | 	else: | ||
|  | 		printerr("This method can only be called from a PhantomCamera node") | ||
|  | 
 | ||
|  | 
 | ||
|  | func get_phantom_camera_hosts() -> Array[PhantomCameraHost]: | ||
|  | 	return _phantom_camera_host_list | ||
|  | 
 | ||
|  | func get_phantom_camera_2ds() -> Array[PhantomCamera2D]: | ||
|  | 	return _phantom_camera_2d_list | ||
|  | 
 | ||
|  | func get_phantom_camera_3ds() -> Array: ## Note: To support disable_3d export templates for 2D projects, this is purposely not strongly typed. | ||
|  | 	return _phantom_camera_3d_list | ||
|  | 
 | ||
|  | 
 | ||
|  | func scene_changed() -> void: | ||
|  | 	_phantom_camera_2d_list.clear() | ||
|  | 	_phantom_camera_3d_list.clear() | ||
|  | 	_phantom_camera_host_list.clear() | ||
|  | 
 | ||
|  | #endregion |