Object pool for beam projectile, minor changes to object pool.

Conflicts:
	code/WorkInProgress/Cael_Aislinn/Rust/gyrotron.dm
	code/WorkInProgress/Cael_Aislinn/Supermatter/ZeroPointLaser.dm
	code/game/objects/structures/grille.dm
	code/modules/power/singularity/emitter.dm
	code/modules/projectiles/projectile.dm
	code/modules/projectiles/projectile/beams.dm
This commit is contained in:
ESwordTheCat
2014-04-29 05:21:50 -08:00
committed by ZomgPonies
parent 49c11d1c9e
commit ebfcc9be79
13 changed files with 117 additions and 48 deletions
+2 -2
View File
@@ -121,8 +121,8 @@
else
src.fire_delay = rand(20,100)
src.shot_number = 0
var/obj/item/projectile/beam/emitter/A = new /obj/item/projectile/beam/emitter( src.loc )
playsound(src.loc, 'sound/weapons/emitter.ogg', 25, 1)
var/obj/item/projectile/beam/emitter/A = getFromPool(/obj/item/projectile/beam/emitter, loc)
playsound(get_turf(src), 'sound/weapons/emitter.ogg', 25, 1)
if(prob(35))
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, src)
+31
View File
@@ -52,10 +52,41 @@
var/agony = 0
var/embed = 0 // whether or not the projectile can embed itself in the mob
proc/delete()
// Garbage collect the projectiles
loc = null
resetVariables()
bumped = initial(bumped)
def_zone = initial(def_zone)
firer = initial(firer)
silenced = initial(silenced)
yo = initial(yo)
xo = initial(xo)
current = initial(current)
shot_from = initial(shot_from)
original = initial(original)
starting = initial(starting)
permutated = initial(permutated)
p_x = initial(p_x)
p_y = initial(p_y)
damage = initial(damage)
damage_type = initial(damage_type)
nodamage = initial(nodamage)
flag = initial(flag)
projectile_type = initial(projectile_type)
kill_count = initial(kill_count)
stun = initial(stun)
weaken = initial(weaken)
paralyze = initial(paralyze)
irradiate = initial(irradiate)
stutter = initial(stutter)
eyeblur = initial(eyeblur)
drowsy = initial(drowsy)
agony = initial(agony)
return ..()
proc/on_hit(var/atom/target, var/blocked = 0)
if(blocked >= 2) return 0//Full block
if(!isliving(target)) return 0
+32 -10
View File
@@ -1,12 +1,21 @@
/*
* Use: Caches beam state images and holds turfs that had these images overlaid.
* Structure:
* beam_master
* icon_states/dirs of beams
* image for that beam
* references for fired beams
* icon_states/dirs for each placed beam image
* turfs that have that icon_state/dir
*/
var/list/beam_master = list()
//Use: Caches beam state images and holds turfs that had these images overlaid.
//Structure:
//beam_master
// icon_states/dirs of beams
// image for that beam
// references for fired beams
// icon_states/dirs for each placed beam image
// turfs that have that icon_state/dir
//Special laser the captains gun uses
/obj/item/projectile/beam/captain
name = "captain laser"
damage = 40
/obj/item/projectile/beam/lightning
invisibility = 101
@@ -22,6 +31,7 @@ var/list/beam_master = list()
layer = 3
var/turf/last = null
kill_count = 6
proc/adjustAngle(angle)
angle = round(angle) + 45
if(angle > 180)
@@ -168,6 +178,11 @@ var/list/beam_master = list()
M.playsound_local(src, "explosion", 50, 1)
..()
resetVariables()
tang = initial(tang)
last = initial(last)
return ..()
/obj/item/projectile/beam
name = "laser"
icon_state = "laser"
@@ -187,12 +202,14 @@ var/list/beam_master = list()
if((!( current ) || loc == current)) //If we pass our target
current = locate(min(max(x + xo, 1), world.maxx), min(max(y + yo, 1), world.maxy), z)
if((x == 1 || x == world.maxx || y == 1 || y == world.maxy))
del(src) //Delete if it passes the world edge
//del(src) //Delete if it passes the world edge
returnToPool(src)
return
step_towards(src, current) //Move~
if(kill_count < 1)
del(src)
//del(src)
returnToPool(src)
kill_count--
if(!bumped && !isturf(original))
@@ -287,6 +304,11 @@ var/list/beam_master = list()
return
resetVariables()
frequency = initial(frequency)
return ..()
/obj/item/projectile/beam/practice
name = "laser"
icon_state = "laser"