mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-25 16:45:42 +00:00
Currently, storage works as a subtype of /datum/component, utilizing GetComponent() and signals to operate. While this is a pretty good idea in theory, the execution was pretty trash, and we end up with alot of GetComponent() snowflake code (something that shouldn't even need to be used frankly), and a heaping load of scattered procs that lead into one another, and procs that don't get utilized properly. Instead, this PR adds atom_storage and proc/create_storage(. . .) to every atom, allowing for the possibility of storage on quite frankly anything. Not only does this entirely remove the need for signals, but it heavily squashes down the number of needed procs in total (removing snowflake signal procs that just lead to one another), reducing overall proc overhead and improving performance.
48 lines
2.1 KiB
Plaintext
48 lines
2.1 KiB
Plaintext
/**
|
|
* Check that standard food items fit on the serving tray
|
|
*/
|
|
/datum/unit_test/servingtray/Run()
|
|
var/mob/living/carbon/human/human = allocate(/mob/living/carbon/human)
|
|
var/obj/structure/table/the_table = allocate(/obj/structure/table)
|
|
var/obj/item/storage/bag/tray/test_tray = allocate(/obj/item/storage/bag/tray)
|
|
var/obj/item/reagent_containers/food/banana = allocate(/obj/item/food/rationpack)
|
|
var/obj/item/food/the_bread = allocate(/obj/item/food/breadslice)
|
|
var/obj/item/reagent_containers/food/sugarcookie = allocate(/obj/item/food/cookie/sugar)
|
|
var/obj/item/clothing/under/jumpsuit = allocate(/obj/item/clothing/under/color/black)
|
|
|
|
TEST_ASSERT_EQUAL((the_bread in test_tray.contents), FALSE, "The bread is on the serving tray at test start")
|
|
|
|
// set the tray to single item mode the dirty way
|
|
var/datum/storage/tray_storage = test_tray.atom_storage
|
|
tray_storage.collection_mode = COLLECT_ONE
|
|
|
|
test_tray.pre_attack(the_bread, human)
|
|
|
|
TEST_ASSERT_EQUAL((the_bread in test_tray.contents), TRUE, "The bread did not get picked up by the serving tray")
|
|
|
|
test_tray.pre_attack(banana, human)
|
|
|
|
TEST_ASSERT_EQUAL((banana in test_tray.contents), TRUE, "The banana did not get picked up by the serving tray")
|
|
|
|
the_table.attackby(test_tray, human)
|
|
|
|
TEST_ASSERT_EQUAL(test_tray.contents.len, 0, "The serving tray did not drop all items on hitting the table")
|
|
|
|
test_tray.pre_attack(sugarcookie, human)
|
|
|
|
TEST_ASSERT_EQUAL((sugarcookie in test_tray.contents), TRUE, "The sugarcookie did not get picked up by the serving tray")
|
|
|
|
human.equip_to_slot(jumpsuit, ITEM_SLOT_ICLOTHING)
|
|
TEST_ASSERT(human.get_item_by_slot(ITEM_SLOT_ICLOTHING), "Human does not have jumpsuit on")
|
|
|
|
human.equip_to_slot(test_tray, ITEM_SLOT_LPOCKET)
|
|
TEST_ASSERT(human.get_item_by_slot(ITEM_SLOT_LPOCKET), "Serving tray failed to fit in the Left Pocket")
|
|
|
|
human.equip_to_slot(test_tray, ITEM_SLOT_RPOCKET)
|
|
TEST_ASSERT(human.get_item_by_slot(ITEM_SLOT_RPOCKET), "Serving tray failed to fit in the Right Pocket")
|
|
|
|
test_tray.attack(human, human)
|
|
|
|
TEST_ASSERT_EQUAL(test_tray.contents.len, 0, "The serving tray did not drop all items on hitting a human")
|
|
|