Refactor gibber animation code.

Kinda. I made it longer and more complicated, but less ridiculous in
amount of icon operations.
This commit is contained in:
Tigercat2000
2015-07-05 19:54:12 -07:00
parent 226324595c
commit 1fab3ff311
+36 -31
View File
@@ -20,6 +20,13 @@
idle_power_usage = 2
active_power_usage = 500
/obj/machinery/gibber/Destroy()
if(contents.len)
for(var/atom/movable/A in contents)
A.loc = get_turf(src)
if(occupant) occupant = null
return ..()
//gibs anything that stands on it's input
/obj/machinery/gibber/autogibber
@@ -281,52 +288,50 @@
return
/obj/machinery/gibber/proc/feedinTopanim()
if(!src.occupant)
return
if(!occupant) return
src.layer = MOB_LAYER + 0.1
var/arbitrary_delay = 16 //arbitrary delay for animating going down
locked = 1 //lock gibber
src.locked = 1
var/image/gibberoverlay = new
var/image/gibberoverlay = new //used to simulate 3D effects
gibberoverlay.icon = src.icon
gibberoverlay.icon_state = "grinderoverlay"
gibberoverlay.overlays += image('icons/obj/kitchen.dmi', "gridle")
var/image/feedee = new
occupant.dir = 2
feedee.icon = getFlatIcon(occupant, 2)
feedee.pixel_y = 25
feedee.pixel_x = 2
feedee.icon = getFlatIcon(occupant, 2) //makes the image a copy of the occupant
overlays += feedee
overlays += gibberoverlay
var/atom/movable/holder = new //holder for occupant image
holder.name = null //make unclickable
holder.overlays += feedee //add occupant to holder overlays
holder.pixel_y = 25 //above the gibber
holder.pixel_x = 2
holder.loc = get_turf(src)
holder.layer = MOB_LAYER //simulate mob-like layering
holder.anchored = 1
var/i //our counter
for(i=0,i<30,i++) //32 tenths of a second (3.2seconds), counting from 0 to 31
overlays -= gibberoverlay
overlays -= feedee
var/atom/movable/holder2 = new //holder for gibber overlay, used to simulate 3D effect
holder2.name = null
holder2.overlays += gibberoverlay
holder2.loc = get_turf(src)
holder2.layer = MOB_LAYER + 0.1 //3D, it's above the mob, rest of the gibber is behind
holder2.anchored = 1
feedee.pixel_y--
animate(holder, pixel_y = 16, time = arbitrary_delay) //animate going down
if(feedee.pixel_y == 16)
feedee.icon += icon('icons/obj/kitchen.dmi', "footicon")
continue
sleep(arbitrary_delay)
if(feedee.pixel_y == -5)
overlays -= feedee
overlays -= gibberoverlay
src.locked = 0
break
holder.overlays -= feedee //reset static icon
feedee.icon += icon('icons/obj/kitchen.dmi', "footicon") //this is some byond magic; += to the icon var with a black and white image will mask it
holder.overlays += feedee
animate(holder, pixel_y = -3, time = arbitrary_delay) //animate going down further
overlays += feedee
overlays += gibberoverlay
sleep(arbitrary_delay) //time everything right, animate doesn't prevent proc from continuing
sleep(1)
overlays -= feedee
overlays -= gibberoverlay
src.layer = 3
qdel(holder) //get rid of holder object
qdel(holder2) //get rid of holder object
locked = 0 //unlock
/obj/machinery/gibber/proc/startgibbing(var/mob/user, var/UserOverride=0)
if(!istype(user) && !UserOverride)