Files
fps_project_1/addons/proton_scatter/src/scatter_shape.gd

65 lines
1.4 KiB
GDScript

@tool
extends Node3D
const ScatterUtil := preload('./common/scatter_util.gd')
@export_category("ScatterShape")
@export var negative = false:
set(val):
negative = val
update_gizmos()
ScatterUtil.request_parent_to_rebuild(self)
@export var shape: ProtonScatterBaseShape:
set(val):
# Disconnect the previous shape if any
if shape and shape.changed.is_connected(_on_shape_changed):
shape.changed.disconnect(_on_shape_changed)
shape = val
if shape:
shape.changed.connect(_on_shape_changed)
update_gizmos()
ScatterUtil.request_parent_to_rebuild(self)
var _ignore_transform_notification = false
func _ready() -> void:
set_notify_transform(true)
func _notification(what):
match what:
NOTIFICATION_TRANSFORM_CHANGED:
if _ignore_transform_notification:
_ignore_transform_notification = false
return
ScatterUtil.request_parent_to_rebuild(self)
NOTIFICATION_ENTER_WORLD:
_ignore_transform_notification = true
func _set(property, _value):
if not Engine.is_editor_hint():
return false
# Workaround to detect when the node was duplicated from the editor.
if property == "transform":
_on_node_duplicated.call_deferred()
return false
func _on_shape_changed() -> void:
update_gizmos()
ScatterUtil.request_parent_to_rebuild(self)
func _on_node_duplicated() -> void:
shape = shape.get_copy() # Enfore uniqueness on duplicate, could be an option