[READY] Stacks will change item_states and w_class based on how full they are. (#1370)

This commit is contained in:
CitadelStationBot
2017-06-04 11:08:33 -05:00
committed by kevinz000
parent 4ac745a275
commit b5d2cf3c99
11 changed files with 56 additions and 2 deletions
+26
View File
@@ -18,6 +18,8 @@
var/datum/robot_energy_storage/source
var/cost = 1 // How much energy from storage it costs
var/merge_type = null // This path and its children should merge with this stack, defaults to src.type
var/full_w_class = WEIGHT_CLASS_NORMAL //The weight class the stack should have at amount > 2/3rds max_amount
var/novariants = TRUE //Determines whether the item should update it's sprites based on amount.
/obj/item/stack/Initialize(mapload, new_amount=null , merge = TRUE)
..()
@@ -29,6 +31,28 @@
for(var/obj/item/stack/S in loc)
if(S.merge_type == merge_type)
merge(S)
update_weight()
update_icon()
/obj/item/stack/proc/update_weight()
if(amount <= (max_amount * (1/3)))
w_class = Clamp(full_w_class-2, WEIGHT_CLASS_TINY, full_w_class)
else if (amount <= (max_amount * (2/3)))
w_class = Clamp(full_w_class-1, WEIGHT_CLASS_TINY, full_w_class)
else
w_class = full_w_class
/obj/item/stack/update_icon()
if(novariants)
return ..()
if(amount <= (max_amount * (1/3)))
icon_state = initial(icon_state)
else if (amount <= (max_amount * (2/3)))
icon_state = "[initial(icon_state)]_2"
else
icon_state = "[initial(icon_state)]_3"
..()
/obj/item/stack/Destroy()
if (usr && usr.machine==src)
@@ -188,6 +212,7 @@
amount -= used
zero_amount()
update_icon()
update_weight()
return 1
/obj/item/stack/proc/zero_amount()
@@ -204,6 +229,7 @@
else
src.amount += amount
update_icon()
update_weight()
/obj/item/stack/proc/merge(obj/item/stack/S) //Merge src into S, as much as possible
if(QDELETED(S) || QDELETED(src) || S == src) //amusingly this can cause a stack to consume itself, let's not allow that.