Upgrades NSFW to use initialize() and SSoverlays

- Both as a first demonstration and as a practical bugfix, we upgrade the NSFW to use SSoverlay.   Instead of building a mutable_apperance and assigning it, we cut_overlays(), make our images, and call add_overlay() to queue it for compiling.
- We also must convert from using New() to initialize() becuase for annoying BYOND reasons,  some static variables in SSoverlays are not always instantiated before mapload.  So its important not to call overlays functions from New()  (We shouldn't be doing that ANYWAY for performance reasons, but now its even more true)
This commit is contained in:
Leshana
2018-02-24 18:33:53 -05:00
parent f2f630fa89
commit fef30da831
+18 -50
View File
@@ -113,45 +113,33 @@
return ..()
/obj/item/weapon/gun/projectile/nsfw/update_icon()
var/mutable_appearance/ma = new(src)
update_charge()
cut_overlays()
if(!chambered)
ma.overlays = list()
appearance = ma
return
var/obj/item/ammo_casing/nsfw_batt/batt = chambered
var/batt_color = batt.type_color //Used many times
var/list/newverlays = list()
//Mode bar
var/mutable_appearance/mode_bar = mutable_appearance(icon, "[initial(icon_state)]_type")
var/image/mode_bar = image(icon, icon_state = "[initial(icon_state)]_type")
mode_bar.color = batt_color
newverlays += mode_bar
add_overlay(mode_bar)
//Barrel color
var/mutable_appearance/barrel_color = mutable_appearance(icon, "[initial(icon_state)]_barrel")
var/image/barrel_color = image(icon, icon_state = "[initial(icon_state)]_barrel")
barrel_color.alpha = 150
barrel_color.color = batt_color
newverlays += barrel_color
add_overlay(barrel_color)
//Charge bar
var/ratio = Ceiling((charge_left / max_charge) * charge_sections)
for(var/i = 0, i < ratio, i++)
var/mutable_appearance/charge_bar = mutable_appearance(icon, "[initial(icon_state)]_charge")
var/image/charge_bar = image(icon, icon_state = "[initial(icon_state)]_charge")
charge_bar.pixel_x = i
charge_bar.color = batt_color
newverlays += charge_bar
ma.overlays = newverlays
if(ma.overlays.len != newverlays.len) //PANIC!
del(ma)
spawn(5)
update_icon()
return
appearance = ma
add_overlay(charge_bar)
// The Magazine //
/obj/item/ammo_magazine/nsfw_mag
@@ -169,49 +157,31 @@
max_ammo = 3
mag_type = MAGAZINE
var/list/modes
/obj/item/ammo_magazine/nsfw_mag/New()
..()
modes = list()
var/list/modes = list()
/obj/item/ammo_magazine/nsfw_mag/update_icon()
var/mutable_appearance/ma = new(src)
cut_overlays()
if(!stored_ammo.len)
ma.overlays = list()
appearance = ma
return //Why bother
var/x_offset = 5
var/list/newverlays = list()
var/current = 0
for(var/B in stored_ammo)
var/obj/item/ammo_casing/nsfw_batt/batt = B
var/mutable_appearance/cap = mutable_appearance(icon,"[initial(icon_state)]_cap")
var/image/cap = image(icon, icon_state = "[initial(icon_state)]_cap")
cap.color = batt.type_color
cap.pixel_x = current * x_offset //Caps don't need a pixel_y offset
newverlays += cap
add_overlay(cap)
if(batt.shots_left)
var/ratio = Ceiling((batt.shots_left / initial(batt.shots_left)) * 4) //4 is how many lights we have a sprite for
var/mutable_appearance/charge = mutable_appearance(icon,"[initial(icon_state)]_charge-[ratio]")
var/image/charge = image(icon, icon_state = "[initial(icon_state)]_charge-[ratio]")
charge.color = "#29EAF4" //Could use battery color but eh.
charge.pixel_x = current * x_offset
newverlays += charge
add_overlay(charge)
current++ //Increment for offsets
ma.overlays = newverlays
if(ma.overlays.len != newverlays.len) //PANIC!
del(ma)
spawn(5)
update_icon()
return
appearance = ma
// The Casing //
/obj/item/ammo_casing/nsfw_batt
name = "\'NSFW\' microbattery - UNKNOWN"
@@ -230,20 +200,18 @@
var/type_name = null
projectile_type = /obj/item/projectile/beam
/obj/item/ammo_casing/nsfw_batt/New()
/obj/item/ammo_casing/nsfw_batt/initialize()
. = ..()
pixel_x = rand(-10, 10)
pixel_y = rand(-10, 10)
update_icon()
/obj/item/ammo_casing/nsfw_batt/update_icon()
var/mutable_appearance/ma = new(src)
ma.overlays.Cut()
cut_overlays()
var/mutable_appearance/ends = mutable_appearance(icon,"[initial(icon_state)]_ends")
var/image/ends = image(icon, icon_state = "[initial(icon_state)]_ends")
ends.color = type_color
ma.overlays += ends
appearance = ma
add_overlay(ends)
/obj/item/ammo_casing/nsfw_batt/expend()
shots_left--