Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 27 additions & 21 deletions GPUTrail3D.gd
Original file line number Diff line number Diff line change
Expand Up @@ -112,12 +112,10 @@ func _ready():
func _set_length(value):
if value is int: # length is being set
length = value
length = max(length, 1)
length_seconds = float(length) / get_fixed_fps()
length_seconds = float(value) / get_fixed_fps()
elif value is float: # length_seconds is being set
length = int(value * get_fixed_fps())
length = max(length, 1)
length_seconds = float(length) / get_fixed_fps()
length_seconds = value

if _defaults_have_been_set:
amount = length
Expand Down Expand Up @@ -177,6 +175,9 @@ func _set_clip_overlaps(value):
@onready var _billboard_transform : Transform3D = global_transform
var _uv_offset : Vector2
func _process(delta):
if not is_inside_tree():
return

if(snap_to_transform):
draw_pass_1.material.set_shader_parameter("emmission_transform", global_transform)

Expand All @@ -185,26 +186,31 @@ func _process(delta):
_uv_offset = _uv_offset.posmod(1.0)
draw_pass_1.material.set_shader_parameter("uv_offset", _uv_offset)

await RenderingServer.frame_pre_draw

if(billboard):
var delta_position = global_position - _old_pos
# Only await if we're still in the tree
if is_inside_tree():
await RenderingServer.frame_pre_draw

if delta_position:
var tangent = global_transform.basis[1].length() * (delta_position).normalized()
_update_billboard_transform(tangent)

RenderingServer.instance_set_transform(get_instance(), _billboard_transform)

_old_pos = global_position
if not is_inside_tree():
return

if(billboard):
var delta_position = global_position - _old_pos

if delta_position:
var tangent = global_transform.basis[1].length() * (delta_position).normalized()
_update_billboard_transform(tangent)

RenderingServer.instance_set_transform(get_instance(), _billboard_transform)

_old_pos = global_position

func _update_billboard_transform(tangent : Vector3):
func _update_billboard_transform(tangent):
_billboard_transform = global_transform
var p : Vector3 = _billboard_transform.basis[1]
var x : Vector3 = tangent
var angle : float = p.angle_to(x)
var rotation_axis : Vector3 = p.cross(x).normalized()
if rotation_axis != Vector3():
var p = _billboard_transform.basis[1]
var x = tangent
var angle = p.angle_to(x)
var rotation_axis = p.cross(x).normalized()
if rotation_axis:
_billboard_transform.basis = _billboard_transform.basis.rotated(rotation_axis,angle)
_billboard_transform.basis = _billboard_transform.basis.scaled(Vector3(0.5,0.5,0.5))
_billboard_transform.origin += _billboard_transform.basis[1]
Expand Down