40 lines
1.3 KiB
GDScript
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()
|