diff --git a/code/game/objects/items/pneumaticCannon.dm b/code/game/objects/items/pneumaticCannon.dm index 9a5928665c..3aba3d05f2 100644 --- a/code/game/objects/items/pneumaticCannon.dm +++ b/code/game/objects/items/pneumaticCannon.dm @@ -26,8 +26,31 @@ var/fire_mode = PCANNON_FIREALL var/automatic = FALSE var/clumsyCheck = TRUE + var/list/allowed_typecache //Leave as null to allow all. + var/charge_amount = 1 + var/charge_ticks = 1 + var/charge_tick = 0 + var/charge_type + var/selfcharge = FALSE trigger_guard = TRIGGER_GUARD_NORMAL + +/obj/item/pneumatic_cannon/Initialize() + . = ..() + if(selfcharge) + init_charge() + +/obj/item/pneumatic_cannon/proc/init_charge() //wrapper so it can be vv'd easier + START_PROCESSING(SSobj, src) + +/obj/item/pneumatic_cannon/process() + if(++charge_tick >= charge_ticks && charge_type) + fill_with_type(charge_type, charge_amount) + +/obj/item/pneumatic_cannon/Destroy() + STOP_PROCESSING(SSobj, src) + return ..() + /obj/item/pneumatic_cannon/CanItemAutoclick() return automatic @@ -75,6 +98,10 @@ load_item(IW, user) /obj/item/pneumatic_cannon/proc/can_load_item(obj/item/I, mob/user) + if(allowed_typecache && is_type_in_typecache(I, allowed_typecache)) + if(user) + to_chat(user, "[I] won't fit into [src]!") + return if((loadedWeightClass + I.w_class) > maxWeightClass) //Only make messages if there's a user if(user) to_chat(user, "\The [I] won't fit into \the [src]!") @@ -233,28 +260,14 @@ throw_amount = 1 maxWeightClass = 150 //50 pies. :^) clumsyCheck = FALSE + var/static/list/pie_typecache = typecacheof(/obj/item/reagent_containers/food/snacks/pie) -/obj/item/pneumatic_cannon/pie/can_load_item(obj/item/I, mob/user) - if(istype(I, /obj/item/reagent_containers/food/snacks/pie)) - return ..() - to_chat(user, "[src] only accepts pies!") - return FALSE - +/obj/item/pneumatic_cannon/pie/Initialize() + . = ..() + allowed_typecache = pie_typecache + /obj/item/pneumatic_cannon/pie/selfcharge automatic = TRUE - var/charge_amount = 1 - var/charge_ticks = 1 - var/charge_tick = 0 + selfcharge = TRUE + charge_type = /obj/item/reagent_containers/food/snacks/pie/cream maxWeightClass = 60 //20 pies. - -/obj/item/pneumatic_cannon/pie/selfcharge/Initialize() - . = ..() - START_PROCESSING(SSobj, src) - -/obj/item/pneumatic_cannon/pie/selfcharge/Destroy() - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/item/pneumatic_cannon/pie/selfcharge/process() - if(++charge_tick >= charge_ticks) - fill_with_type(/obj/item/reagent_containers/food/snacks/pie/cream, charge_amount)