Files
Yogstation/code/modules/particles/byond_particles/particle_procs.dm
azzzertyy d257904ce6 [PORT] Particool system, port of a port of a port of a port (#19752)
* done

* d

* chanf

* d

* a

* log?

* log2 electric boogaloo

* d

* d

* s

* agdsdfgdsfhg

* idiota

* g

* c

* sa
2023-08-04 22:39:07 -05:00

54 lines
1.7 KiB
Plaintext

///ATOM PROCS
/*
These are for byonds native particle system as they are limited to a single object instance
this creates dummy objects to store the particles in useful for objects that have multiple
particles like bonfires.
*/
/// priority is in descending order so 10 is the highest 1 is the lowest
/atom/proc/add_emitter(obj/emitter/updatee, particle_key, priority = 10, var/lifespan = null, burst_mode = FALSE)
priority = clamp(priority, 1, 10)
if(!particle_key)
CRASH("add_emitter called without a key ref.")
if(!loc)
CRASH("add_emitter called on a turf without a loc, avoid this!.")
if(!master_holder)
master_holder = new(src)
var/obj/emitter/new_emitter = new updatee
new_emitter.layer += (priority / 100)
new_emitter.vis_locs |= src
master_holder.emitters[particle_key] = new_emitter
if(lifespan || burst_mode)
if(burst_mode)
remove_emitter(particle_key, TRUE)
else
addtimer(CALLBACK(src, PROC_REF(remove_emitter), particle_key), lifespan)
/atom/proc/remove_emitter(particle_key, burst_mode = FALSE)
if(!particle_key)
CRASH("remove_emitter called without a key ref.")
if(!master_holder || !master_holder.emitters[particle_key])
return
var/obj/emitter/removed_emitter = master_holder.emitters[particle_key]
if(!burst_mode)
removed_emitter.particles.spawning = 0 //this way it gracefully dies out instead
addtimer(CALLBACK(src, PROC_REF(handle_deletion), particle_key), removed_emitter.particles.lifespan)
/atom/proc/handle_deletion(particle_key)
var/obj/emitter/removed_emitter = master_holder.emitters[particle_key]
if(!removed_emitter)
return
removed_emitter.vis_locs -= src
master_holder.emitters -= particle_key
qdel(removed_emitter)