Add PhantomCamera components and UI elements for improved scene management; refactor existing components for better integration
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
@tool
|
||||
extends EditorNode3DGizmo
|
||||
|
||||
#var pcam_3d: PhantomCamera3D
|
||||
|
||||
func _redraw() -> void:
|
||||
clear()
|
||||
|
||||
var icon: Material = get_plugin().get_material(get_plugin().get_name(), self)
|
||||
add_unscaled_billboard(icon, 0.035)
|
||||
|
||||
var pcam_3d: PhantomCamera3D = get_node_3d()
|
||||
|
||||
# if pcam_3d.is_following():
|
||||
# _draw_target(pcam_3d, pcam_3d.get_follow_target_position(), "follow_target")
|
||||
# if pcam_3d.is_looking_at():
|
||||
# _draw_target(pcam_3d, pcam_3d.get_look_at_target_position(), "look_at_target")
|
||||
|
||||
if pcam_3d.is_active(): return
|
||||
|
||||
var frustum_lines: PackedVector3Array = PackedVector3Array()
|
||||
var height: float = 0.25
|
||||
var width: float = height * 1.25
|
||||
var forward: float = height * -1.5
|
||||
|
||||
# Trapezoid
|
||||
frustum_lines.push_back(Vector3.ZERO)
|
||||
frustum_lines.push_back(Vector3(-width, height, forward))
|
||||
|
||||
frustum_lines.push_back(Vector3.ZERO)
|
||||
frustum_lines.push_back(Vector3(width, height, forward))
|
||||
|
||||
frustum_lines.push_back(Vector3.ZERO)
|
||||
frustum_lines.push_back(Vector3(-width, -height, forward))
|
||||
|
||||
frustum_lines.push_back(Vector3.ZERO)
|
||||
frustum_lines.push_back(Vector3(width, -height, forward))
|
||||
|
||||
#######
|
||||
# Frame
|
||||
#######
|
||||
## Left
|
||||
frustum_lines.push_back(Vector3(-width, height, forward))
|
||||
frustum_lines.push_back(Vector3(-width, -height, forward))
|
||||
|
||||
## Bottom
|
||||
frustum_lines.push_back(Vector3(-width, -height, forward))
|
||||
frustum_lines.push_back(Vector3(width, -height, forward))
|
||||
|
||||
## Right
|
||||
frustum_lines.push_back(Vector3(width, -height, forward))
|
||||
frustum_lines.push_back(Vector3(width, height, forward))
|
||||
|
||||
## Top
|
||||
frustum_lines.push_back(Vector3(width, height, forward))
|
||||
frustum_lines.push_back(Vector3(-width, height, forward))
|
||||
|
||||
##############
|
||||
# Up Direction
|
||||
##############
|
||||
var up_height: float = height + 0.15
|
||||
var up_width: float = width / 3
|
||||
|
||||
## Left
|
||||
frustum_lines.push_back(Vector3(0, up_height, forward))
|
||||
frustum_lines.push_back(Vector3(-up_width, height, forward))
|
||||
|
||||
## Right
|
||||
frustum_lines.push_back(Vector3(0, up_height, forward))
|
||||
frustum_lines.push_back(Vector3(up_width, height, forward))
|
||||
|
||||
var frustum_material: StandardMaterial3D = get_plugin().get_material("frustum", self)
|
||||
add_lines(frustum_lines, frustum_material, false)
|
||||
|
||||
|
||||
func _draw_target(pcam_3d: Node3D, target_position: Vector3, type: String) -> void:
|
||||
var target_lines: PackedVector3Array = PackedVector3Array()
|
||||
var direction: Vector3 = target_position - pcam_3d.global_position
|
||||
var end_position: Vector3 = pcam_3d.global_basis.z * direction
|
||||
|
||||
target_lines.push_back(Vector3.ZERO)
|
||||
target_lines.push_back(end_position)
|
||||
var target_material: StandardMaterial3D = get_plugin().get_material(type, self)
|
||||
add_lines(target_lines, target_material, false)
|
@@ -0,0 +1 @@
|
||||
uid://cyr6fgximfw6q
|
@@ -0,0 +1,37 @@
|
||||
@tool
|
||||
extends EditorNode3DGizmoPlugin
|
||||
|
||||
const PhantomCamera3DNode: Script = preload("res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_3d.gd")
|
||||
const PhantomCamera3DGizmo: Script = preload("res://addons/phantom_camera/scripts/gizmos/phantom_camera_3d_gizmo.gd")
|
||||
const _icon_texture: Texture2D = preload("res://addons/phantom_camera/icons/phantom_camera_gizmo.svg")
|
||||
var _gizmo_name: String = "PhantomCamera3D"
|
||||
|
||||
var gizmo_name: String: set = set_gizmo_name
|
||||
var _gizmo_icon: Texture2D
|
||||
var _gizmo_spatial_script: Script = PhantomCamera3DNode
|
||||
|
||||
|
||||
func set_gizmo_name(name: String) -> void:
|
||||
_gizmo_name = name
|
||||
|
||||
|
||||
func _get_gizmo_name() -> String:
|
||||
return _gizmo_name
|
||||
|
||||
|
||||
func _has_gizmo(spatial: Node3D) -> bool:
|
||||
return spatial is PhantomCamera3D
|
||||
|
||||
|
||||
func _init() -> void:
|
||||
create_icon_material(gizmo_name, _icon_texture, false, Color.WHITE)
|
||||
create_material("frustum", Color8(252, 127, 127, 255))
|
||||
create_material("follow_target", Color8(185, 58, 89))
|
||||
create_material("look_at_target", Color8(61, 207, 225))
|
||||
|
||||
|
||||
func _create_gizmo(for_node_3d: Node3D) -> EditorNode3DGizmo:
|
||||
if for_node_3d is PhantomCamera3DNode:
|
||||
return PhantomCamera3DGizmo.new()
|
||||
else:
|
||||
return null
|
@@ -0,0 +1 @@
|
||||
uid://bkevga3bx4rfj
|
@@ -0,0 +1,29 @@
|
||||
extends EditorNode3DGizmoPlugin
|
||||
|
||||
var _spatial_script: Script = preload("res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_noise_emitter_3d.gd")
|
||||
var _gizmo_icon: Texture2D = preload("res://addons/phantom_camera/icons/phantom_camera_noise_emitter_gizmo.svg")
|
||||
|
||||
var _gizmo_name: StringName = "PhantomCameraNoiseEmitter"
|
||||
|
||||
func _init() -> void:
|
||||
create_material("main", Color8(252, 127, 127, 255))
|
||||
create_handle_material("handles")
|
||||
create_icon_material(_gizmo_name, _gizmo_icon, false, Color.WHITE)
|
||||
|
||||
|
||||
func _has_gizmo(node: Node3D):
|
||||
return node.get_script() == _spatial_script
|
||||
|
||||
|
||||
func _get_gizmo_name() -> String:
|
||||
return _gizmo_name
|
||||
|
||||
|
||||
func _redraw(gizmo: EditorNode3DGizmo):
|
||||
gizmo.clear()
|
||||
|
||||
var icon: Material = get_material(_gizmo_name, gizmo)
|
||||
gizmo.add_unscaled_billboard(icon, 0.035)
|
||||
|
||||
#var material = get_material("main", gizmo)
|
||||
#gizmo.add_lines(_draw_frustum(), material)
|
@@ -0,0 +1 @@
|
||||
uid://dddokcd2ug05i
|
Reference in New Issue
Block a user