56 lines
1.5 KiB
GDScript
56 lines
1.5 KiB
GDScript
@tool
|
|
extends "base_modifier.gd"
|
|
|
|
# Adds a single object with the given transform
|
|
|
|
@export var offset := Vector3.ZERO
|
|
@export var rotation := Vector3.ZERO
|
|
@export var scale := Vector3.ONE
|
|
|
|
|
|
func _init() -> void:
|
|
display_name = "Add Single Item"
|
|
category = "Create"
|
|
warning_ignore_no_shape = true
|
|
warning_ignore_no_transforms = true
|
|
can_restrict_height = false
|
|
global_reference_frame_available = true
|
|
local_reference_frame_available = true
|
|
individual_instances_reference_frame_available = false
|
|
use_local_space_by_default()
|
|
|
|
|
|
func _process_transforms(transforms, domain, _seed) -> void:
|
|
var gt: Transform3D = domain.get_global_transform()
|
|
var gt_inverse: Transform3D = gt.affine_inverse()
|
|
|
|
var t_origin := offset
|
|
var basis := Basis()
|
|
var x_axis = Vector3.RIGHT
|
|
var y_axis = Vector3.UP
|
|
var z_axis = Vector3.FORWARD
|
|
|
|
if is_using_global_space():
|
|
t_origin = gt_inverse.basis * t_origin
|
|
x_axis = gt_inverse.basis * x_axis
|
|
y_axis = gt_inverse.basis * y_axis
|
|
z_axis = gt_inverse.basis * z_axis
|
|
basis = gt_inverse.basis
|
|
|
|
basis = basis.rotated(x_axis, deg_to_rad(rotation.x))
|
|
basis = basis.rotated(y_axis, deg_to_rad(rotation.y))
|
|
basis = basis.rotated(z_axis, deg_to_rad(rotation.z))
|
|
|
|
var transform := Transform3D(basis, Vector3.ZERO)
|
|
|
|
if is_using_global_space():
|
|
var global_t: Transform3D = gt * transform
|
|
global_t.basis = global_t.basis.scaled(scale)
|
|
transform = gt_inverse * global_t
|
|
else:
|
|
transform = transform.scaled_local(scale)
|
|
|
|
transform.origin = t_origin
|
|
|
|
transforms.list.push_back(transform)
|