extends Node2D @export var number_of_particles : int var particle_child : GPUParticles2D var up_material : ParticleProcessMaterial = load("res://Materials/Particles/up_particles_bg.tres") var down_material : ParticleProcessMaterial = load("res://Materials/Particles/down_particles_bg.tres") # Called when the node enters the scene tree for the first time. func _ready() -> void: up_material = up_material.duplicate() down_material = down_material.duplicate() reloadParticles() func _physics_process(delta: float) -> void: if Input.is_action_just_pressed("flip"): print("input detected") reloadParticles() func reloadParticles() -> void: #If the particle node does not already exist, do the initial setup, and add it as a child node. if !has_node("BGParticles"): var bgparticle := GPUParticles2D.new() bgparticle.amount = number_of_particles bgparticle.emitting = true bgparticle.top_level = true bgparticle.name = "BGParticles" add_child(bgparticle) particle_child = get_node_or_null("BGParticles") #Set up the material we want to set the particle node to, and set up a screen size variable. var material : ParticleProcessMaterial var size : Vector2 = get_viewport_rect().size #Simple gravity direction detection. if al_globals.y_gravity > 0: material = up_material elif al_globals.y_gravity < 0: material = down_material #Set the emission shape and the size, relative to size of screen. material.emission_shape = ParticleProcessMaterial.EMISSION_SHAPE_BOX material.emission_box_extents = Vector3(size.x, size.y, 0) #Set the material of the particle child object to the created material. particle_child.process_material = material