Adds a food trash element (#53225)

adds a food trash element, for dumping trash when u eat food

unused now, needed for food refactor. spawns trash in your hands (or on the floor) when the food this is attached to is eaten.
This commit is contained in:
Qustinnus
2020-08-29 16:48:17 -07:00
committed by GitHub
parent edc15376cd
commit f84c8e44c0
4 changed files with 51 additions and 12 deletions
+3
View File
@@ -662,6 +662,9 @@
///from base of obj/item/reagent_containers/food/snacks/attack() & Edible component: (mob/living/eater, mob/feeder, bitecount, bitesize)
#define COMSIG_FOOD_EATEN "food_eaten"
///from base of Component/edible/On_Consume: (mob/living/eater, mob/living/feeder)
#define COMSIG_FOOD_CONSUMED "food_consumed"
#define COMSIG_ITEM_FRIED "item_fried"
#define COMSIG_FRYING_HANDLED (1<<0)
+10 -12
View File
@@ -157,7 +157,6 @@ Behavior that's still missing from this component that original food items had t
return
if(!owner.reagents.total_volume)//Shouldn't be needed but it checks to see if it has anything left in it.
to_chat(feeder, "<span class='warning'>None of [owner] left, oh no!</span>")
on_consume?.Invoke(eater, feeder)
if(isturf(parent))
var/turf/T = parent
T.ScrapeAway(1, CHANGETURF_INHERIT_AIR)
@@ -230,7 +229,8 @@ Behavior that's still missing from this component that original food items had t
var/fraction = min(bite_consumption / owner.reagents.total_volume, 1)
owner.reagents.trans_to(eater, bite_consumption, transfered_by = feeder, methods = INGEST)
bitecount++
On_Consume(eater)
if(!owner.reagents.total_volume)
On_Consume(eater, feeder)
checkLiked(fraction, eater)
//Invoke our after eat callback if it is valid
@@ -283,18 +283,16 @@ Behavior that's still missing from this component that original food items had t
last_check_time = world.time
///Delete the item when it is fully eaten
/datum/component/edible/proc/On_Consume(mob/living/eater)
/datum/component/edible/proc/On_Consume(mob/living/eater, mob/living/feeder)
SEND_SIGNAL(parent, COMSIG_FOOD_CONSUMED, eater, feeder)
var/atom/owner = parent
on_consume?.Invoke(eater, feeder)
if(!eater)
return
if(!owner.reagents.total_volume)
if(isturf(parent))
var/turf/T = parent
T.ScrapeAway(1, CHANGETURF_INHERIT_AIR)
else
qdel(parent)
if(isturf(parent))
var/turf/T = parent
T.ScrapeAway(1, CHANGETURF_INHERIT_AIR)
else
qdel(parent)
///Ability to feed food to puppers
/datum/component/edible/proc/UseByAnimal(datum/source, mob/user)
+37
View File
@@ -0,0 +1,37 @@
// If an item has the food_trash element it will drop an item when it is consumed.
/datum/element/food_trash
element_flags = ELEMENT_BESPOKE
id_arg_index = 2
/// The type of trash that is spawned by this element
var/trash
/datum/element/food_trash/Attach(datum/target, atom/trash)
. = ..()
if(!isatom(target))
return ELEMENT_INCOMPATIBLE
src.trash = trash
RegisterSignal(target, COMSIG_FOOD_CONSUMED, .proc/generate_trash)
/datum/element/food_trash/Detach(datum/target)
. = ..()
UnregisterSignal(target, COMSIG_FOOD_CONSUMED)
/datum/element/food_trash/proc/generate_trash(datum/source, mob/living/eater, mob/living/feeder)
SIGNAL_HANDLER
///cringy signal_handler shouldnt be needed if you dont want to return but oh well
INVOKE_ASYNC(src, .proc/async_generate_trash, source)
/datum/element/food_trash/proc/async_generate_trash(datum/source)
var/datum/component/edible/edible_component = source
var/obj/item/trash_item = new trash()
var/atom/edible_object = edible_component.parent
var/mob/living/mob_location = edible_object.loc //The foods location
if(istype(mob_location))
mob_location.put_in_hands(trash_item)
else
trash_item.forceMove(get_turf(edible_component.parent))
+1
View File
@@ -582,6 +582,7 @@
#include "code\datums\elements\update_icon_updates_onmob.dm"
#include "code\datums\elements\waddling.dm"
#include "code\datums\elements\food\dunkable.dm"
#include "code\datums\elements\food\food_trash.dm"
#include "code\datums\elements\food\processable.dm"
#include "code\datums\helper_datums\events.dm"
#include "code\datums\helper_datums\getrev.dm"