effect/system to effect_system

effect/effect to effect/particle_effect
make foam an effect again
move explosion_particles.dm to effect_system folder
OOP effect code, addtimers, QDEL_IN
fixed reagent explosions never having a flash range due to a typo
This commit is contained in:
uraniummeltdown
2017-11-04 18:21:51 +04:00
parent f414d5065d
commit 5c4f4ec5e5
9 changed files with 273 additions and 390 deletions
@@ -1,20 +1,18 @@
//WATER EFFECTS
/obj/effect/effect/water
/obj/effect/particle_effect/water
name = "water"
icon = 'icons/effects/effects.dmi'
icon_state = "extinguish"
mouse_opacity = 0
var/life = 15.0
/obj/effect/effect/water/New()
/obj/effect/particle_effect/water/New()
..()
//var/turf/T = src.loc
//if(istype(T, /turf))
// T.firelevel = 0 //TODO: FIX
QDEL_IN(src, 70)
return
/obj/effect/effect/water/Move(turf/newloc)
/obj/effect/particle_effect/water/Move(turf/newloc)
//var/turf/T = src.loc
//if(istype(T, /turf))
// T.firelevel = 0 //TODO: FIX
@@ -25,7 +23,7 @@
return 0
.=..()
/obj/effect/effect/water/Bump(atom/A)
/obj/effect/particle_effect/water/Bump(atom/A)
if(reagents)
reagents.reaction(A)
if(istype(A,/atom/movable))
@@ -42,90 +40,20 @@
// will always spawn at the items location, even if it's moved.
/* Example:
var/datum/effect/system/steam_spread/steam = new /datum/effect/system/steam_spread() -- creates new system
var/datum/effect_system/steam_spread/steam = new /datum/effect_system/steam_spread() -- creates new system
steam.set_up(5, 0, mob.loc) -- sets up variables
OPTIONAL: steam.attach(mob)
steam.start() -- spawns the effect
*/
/////////////////////////////////////////////
/obj/effect/effect/steam
/obj/effect/particle_effect/steam
name = "steam"
icon = 'icons/effects/effects.dmi'
icon_state = "extinguish"
density = 0
/datum/effect/system/steam_spread
/obj/effect/particle_effect/steam/New()
..()
QDEL_IN(src, 20)
/datum/effect/system/steam_spread/set_up(n = 3, c = 0, turf/loc)
if(n > 10)
n = 10
number = n
cardinals = c
location = loc
/datum/effect/system/steam_spread/start()
var/i = 0
for(i=0, i<src.number, i++)
spawn(0)
if(holder)
src.location = get_turf(holder)
var/obj/effect/effect/steam/steam = new /obj/effect/effect/steam(src.location)
var/direction
if(src.cardinals)
direction = pick(cardinal)
else
direction = pick(alldirs)
for(i=0, i<pick(1,2,3), i++)
sleep(5)
step(steam,direction)
spawn(20)
if(steam)
qdel(steam)
/////////////////////////////////////////////
//////// Attach a steam trail to an object (eg. a reacting beaker) that will follow it
// even if it's carried of thrown.
/////////////////////////////////////////////
/datum/effect/system/steam_trail_follow
var/turf/oldposition
var/processing = 1
var/on = 1
/datum/effect/system/steam_trail_follow/Destroy()
oldposition = null
return ..()
/datum/effect/system/steam_trail_follow/set_up(atom/atom)
attach(atom)
oldposition = get_turf(atom)
/datum/effect/system/steam_trail_follow/start()
if(!src.on)
src.on = 1
src.processing = 1
if(src.processing)
src.processing = 0
spawn(0)
if(src.number < 3)
var/obj/effect/effect/steam/I = new /obj/effect/effect/steam(src.oldposition)
src.number++
src.oldposition = get_turf(holder)
I.dir = src.holder.dir
spawn(10)
if(I)
qdel(I)
src.number--
spawn(2)
if(src.on)
src.processing = 1
src.start()
else
spawn(2)
if(src.on)
src.processing = 1
src.start()
/datum/effect/system/steam_trail_follow/proc/stop()
src.processing = 0
src.on = 0
/datum/effect_system/steam_spread
effect_type = /obj/effect/particle_effect/steam