Files
mtgodot-poc/project/particle_exit_test.gd
T

40 lines
1.3 KiB
GDScript

# Export-template reproducer: no maps, models, assets or network required.
extends Node
var held: Array[ParticleProcessMaterial] = []
func _ready() -> void:
call_deferred("run")
func run() -> void:
var mode := OS.get_environment("MT_PARTICLE_EXIT_CASE")
for i in 8:
make_particle(mode, i)
for i in 5: await get_tree().process_frame
held.clear()
for i in 5: await get_tree().process_frame
print("PARTICLE_EXIT PASS case=", mode)
get_tree().quit()
func make_particle(mode: String, index: int) -> void:
if mode == "empty": return
var material := ParticleProcessMaterial.new()
if mode in ["gravity", "scale", "shape", "held", "restored"]:
if mode == "gravity": material.gravity = Vector3(0, -1, 0)
if mode == "scale": material.scale_min = 0.5
if mode in ["shape", "held", "restored"]: material.emission_shape = index % 3
material.get_rid()
if mode == "restored":
material.emission_shape = ParticleProcessMaterial.EMISSION_SHAPE_POINT
material.get_rid()
if mode == "held": held.append(material)
return
if mode == "primed": material.get_rid()
if mode != "default":
material.gravity = Vector3(0, -1, 0)
material.emission_shape = index % 3
material.scale_min = 0.5
material.get_rid()
if mode == "emitter":
var emitter := GPUParticles3D.new()
emitter.emitting = false
emitter.process_material = material
add_child(emitter)
emitter.free()