From d176fcf24c521e42fd0c73326827a18c2f00d192 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Tue, 1 Aug 2017 07:48:16 -0500 Subject: [PATCH] Refactors pie throwing and fixes throwing not finalizing in some cases --- code/controllers/subsystem/throwing.dm | 13 ++++--- .../food_and_drinks/food/snacks_pie.dm | 39 +++++++++++-------- 2 files changed, 29 insertions(+), 23 deletions(-) diff --git a/code/controllers/subsystem/throwing.dm b/code/controllers/subsystem/throwing.dm index 4ae31e98d6..d91d91de72 100644 --- a/code/controllers/subsystem/throwing.dm +++ b/code/controllers/subsystem/throwing.dm @@ -103,7 +103,7 @@ SUBSYSTEM_DEF(throwing) finalize() return -/datum/thrownthing/proc/finalize(hit = FALSE) +/datum/thrownthing/proc/finalize(hit = FALSE, target=null) set waitfor = 0 SSthrowing.processing -= thrownthing //done throwing, either because it hit something or it finished moving @@ -120,13 +120,15 @@ SUBSYSTEM_DEF(throwing) thrownthing.newtonian_move(init_dir) else thrownthing.newtonian_move(init_dir) + + if(target) + thrownthing.throw_impact(target, src) + if (callback) callback.Invoke() /datum/thrownthing/proc/hit_atom(atom/A) - thrownthing.throw_impact(A, src) - thrownthing.newtonian_move(init_dir) - finalize(TRUE) + finalize(hit=TRUE, target=A) /datum/thrownthing/proc/hitcheck() for (var/thing in get_turf(thrownthing)) @@ -134,6 +136,5 @@ SUBSYSTEM_DEF(throwing) if (AM == thrownthing) continue if (AM.density && !(AM.pass_flags & LETPASSTHROW) && !(AM.flags & ON_BORDER)) - thrownthing.throwing = null - thrownthing.throw_impact(AM, src) + finalize(hit=TRUE, target=AM) return TRUE diff --git a/code/modules/food_and_drinks/food/snacks_pie.dm b/code/modules/food_and_drinks/food/snacks_pie.dm index 94c8e54f15..13f22851b1 100644 --- a/code/modules/food_and_drinks/food/snacks_pie.dm +++ b/code/modules/food_and_drinks/food/snacks_pie.dm @@ -26,24 +26,29 @@ tastes = list("pie" = 1) /obj/item/weapon/reagent_containers/food/snacks/pie/cream/throw_impact(atom/hit_atom) - if(!..()) //was it caught by a mob? - var/turf/T = get_turf(hit_atom) - new/obj/effect/decal/cleanable/pie_smudge(T) - reagents.reaction(hit_atom, TOUCH) + . = ..() + if(!.) //if we're not being caught + splat(hit_atom) - if(ishuman(hit_atom)) - var/mob/living/carbon/human/H = hit_atom - var/mutable_appearance/creamoverlay = mutable_appearance('icons/effects/creampie.dmi') - if(H.dna.species.id == "lizard") - creamoverlay.icon_state = "creampie_lizard" - else - creamoverlay.icon_state = "creampie_human" - H.Knockdown(20) //splat! - H.adjust_blurriness(1) - visible_message("[H] was creamed by [src]!!") - H.add_overlay(creamoverlay) - - qdel(src) +/obj/item/weapon/reagent_containers/food/snacks/pie/cream/proc/splat(atom/movable/hit_atom) + if(isliving(loc)) //someone caught us! + return + var/turf/T = get_turf(hit_atom) + new/obj/effect/decal/cleanable/pie_smudge(T) + reagents.reaction(hit_atom, TOUCH) + if(ishuman(hit_atom)) + var/mob/living/carbon/human/H = hit_atom + var/mutable_appearance/creamoverlay = mutable_appearance('icons/effects/creampie.dmi') + if(H.dna.species.limbs_id == "lizard") + creamoverlay.icon_state = "creampie_lizard" + else + creamoverlay.icon_state = "creampie_human" + H.Knockdown(20) //splat! + H.adjust_blurriness(1) + H.visible_message("[H] is creamed by [src]!", "You've been creamed by [src]!") + playsound(H, "desceration", 50, TRUE) + H.add_overlay(creamoverlay) + qdel(src) /obj/item/weapon/reagent_containers/food/snacks/pie/berryclafoutis