[MIRROR] fix some bad material handling (#11997)

Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
This commit is contained in:
CHOMPStation2StaffMirrorBot
2025-11-18 01:18:14 +01:00
committed by GitHub
co-authored by Kashargul
parent 68d18cde97
commit 54087103bf
9 changed files with 60 additions and 38 deletions
@@ -172,10 +172,10 @@
ui.open()
/obj/machinery/atmospherics/binary/algae_farm/tgui_data(mob/user)
var/data[0]
var/list/data = list()
data["panelOpen"] = panel_open
var/materials_ui[0]
var/list/materials_ui = list()
for(var/M in stored_material)
materials_ui[++materials_ui.len] = list(
"name" = M,
+7 -4
View File
@@ -66,8 +66,6 @@
/obj/machinery/autolathe/tgui_static_data(mob/user)
var/list/data = ..()
data += rmat.mat_container.tgui_static_data(user)
var/list/categories = list()
var/list/recipes = list()
for(var/datum/category_group/autolathe/A in autolathe_recipes.categories)
@@ -89,7 +87,9 @@
data["recipes"] = recipes
data["categories"] = categories
data += rmat.mat_container.tgui_static_data(user)
var/list/material_data = rmat.mat_container?.tgui_static_data(user)
if(material_data)
data += material_data
return data
@@ -101,7 +101,10 @@
/obj/machinery/autolathe/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state)
var/list/data = ..()
data["busy"] = busy
data["materials"] = rmat.mat_container.tgui_data(user, TRUE)
var/list/material_data = rmat.mat_container?.tgui_data(user, TRUE)
if(material_data)
data["materials"] = material_data
data["mat_efficiency"] = mat_efficiency
return data
+9 -9
View File
@@ -7,6 +7,15 @@
return FALSE
return TRUE
// Helper for anything checking if it can inject a container like a syringe.
/atom/movable/proc/is_injectable_container()
return is_open_container() || \
istype(src, /obj/item/reagent_containers/food) || \
istype(src, /obj/item/slime_extract) || \
istype(src, /obj/item/clothing/mask/smokable/cigarette) || \
istype(src, /obj/item/storage/fancy/cigarettes) || \
istype(src, /obj/item/clothing/mask/chewable) // CHOMPEdit
/obj/can_be_injected_by(var/atom/injector)
if(!..())
return FALSE
@@ -15,12 +24,3 @@
/mob/living/can_be_injected_by(var/atom/injector)
return ..() && (can_inject(null, 0, BP_TORSO) || can_inject(null, 0, BP_GROIN))
// Helper for anything checking if it can inject a container like a syringe.
/obj/proc/is_injectable_container()
return is_open_container() || \
istype(src, /obj/item/reagent_containers/food) || \
istype(src, /obj/item/slime_extract) || \
istype(src, /obj/item/clothing/mask/smokable/cigarette) || \
istype(src, /obj/item/storage/fancy/cigarettes) || \
istype(src, /obj/item/clothing/mask/chewable) // CHOMPEdit
@@ -254,14 +254,19 @@
data["designs"] = designs
data["fabName"] = name
data += materials.mat_container.tgui_static_data()
var/list/material_data = materials.mat_container?.tgui_static_data(user)
if(material_data)
data += material_data
return data
/obj/machinery/rnd/production/tgui_data(mob/user)
var/list/data = list()
data["materials"] = materials.mat_container.tgui_data()
var/list/material_data = materials.mat_container?.tgui_data(user)
if(material_data)
data["materials"] = material_data
data["onHold"] = FALSE //materials.on_hold()
data["busy"] = busy
data["materialMaximum"] = materials.local_size
@@ -379,7 +379,7 @@
ui.open()
/obj/machinery/mecha_part_fabricator_tg/tgui_static_data(mob/user)
var/list/data = rmat.mat_container.tgui_static_data(user)
var/list/data = ..()
var/list/designs = list()
@@ -405,12 +405,18 @@
data["designs"] = designs
var/list/material_data = rmat.mat_container?.tgui_static_data(user)
if(material_data)
data += material_data
return data
/obj/machinery/mecha_part_fabricator_tg/tgui_data(mob/user)
var/list/data = list()
data["materials"] = rmat.mat_container.tgui_data(user)
var/list/material_data =rmat.mat_container?.tgui_data(user)
if(material_data)
data["materials"] = material_data
data["queue"] = list()
data["processing"] = process_queue
+12 -11
View File
@@ -37,15 +37,15 @@ type RecipeData = {
type Data = {
busy: string;
materials: Material[];
materials?: Material[];
mat_efficiency: number;
recipes: RecipeData[];
SHEET_MATERIAL_AMOUNT: number;
SHEET_MATERIAL_AMOUNT?: number;
};
export const Autolathe = (props) => {
const { act, data } = useBackend<Data>();
const { SHEET_MATERIAL_AMOUNT } = data;
const { materials = [], SHEET_MATERIAL_AMOUNT = 0 } = data;
return (
<Window width={670} height={600}>
@@ -57,7 +57,7 @@ export const Autolathe = (props) => {
<Stack.Item>
<Section>
<MaterialAccessBar
availableMaterials={data.materials}
availableMaterials={materials}
SHEET_MATERIAL_AMOUNT={SHEET_MATERIAL_AMOUNT}
onEjectRequested={(mat: Material, qty: number) =>
act('remove_mat', {
@@ -76,6 +76,7 @@ export const Autolathe = (props) => {
const Designs = (props) => {
const { act, data } = useBackend<Data>();
const { materials = [] } = data;
const [selectedCategory, setSelectedCategory] = useSharedState(
'selected_category',
@@ -83,13 +84,13 @@ const Designs = (props) => {
);
const [searchText, setSearchText] = useSharedState('search_text', '');
const materials = useMemo(() => {
const materials = {};
for (const material of data.materials) {
materials[material.name] = material.amount;
const materialRecord = useMemo(() => {
const materialRecord = {};
for (const material of materials) {
materialRecord[material.name] = material.amount;
}
return materials;
}, [data.materials]);
return materialRecord;
}, [materials]);
const categories = {};
@@ -155,7 +156,7 @@ const Designs = (props) => {
<Recipe
key={recipe.ref}
recipe={recipe}
materials={materials}
materials={materialRecord}
busy={data.busy}
/>
))}
@@ -40,7 +40,7 @@ type ExosuitFabricatorData = FabricatorData &
export const ExosuitFabricatorTg = (props) => {
const { act, data } = useBackend<ExosuitFabricatorData>();
const { materials, SHEET_MATERIAL_AMOUNT } = data;
const { materials = [], SHEET_MATERIAL_AMOUNT = 0, designs } = data;
const availableMaterials: MaterialMap = {};
@@ -56,7 +56,7 @@ export const ExosuitFabricatorTg = (props) => {
<Stack fill vertical>
<Stack.Item grow>
<DesignBrowser
designs={Object.values(data.designs)}
designs={Object.values(designs)}
availableMaterials={availableMaterials}
buildRecipeElement={(design, availableMaterials) => (
<Recipe
@@ -82,7 +82,7 @@ export const ExosuitFabricatorTg = (props) => {
<Stack.Item>
<Section>
<MaterialAccessBar
availableMaterials={data.materials}
availableMaterials={materials}
SHEET_MATERIAL_AMOUNT={SHEET_MATERIAL_AMOUNT}
onEjectRequested={(mat: Material, qty: number) =>
act('remove_mat', {
@@ -77,12 +77,12 @@ export type FabricatorData = {
/**
* The materials available to the fabricator, via ore silo or local storage.
*/
materials: Material[];
materials?: Material[];
/**
* Definition of how much units 1 sheet has.
*/
SHEET_MATERIAL_AMOUNT: number;
SHEET_MATERIAL_AMOUNT?: number;
/**
* The name of the fabricator, as displayed on the title bar.
+10 -3
View File
@@ -22,12 +22,19 @@ import type {
export const Fabricator = (props) => {
const { act, data } = useBackend<FabricatorData>();
const { fabName, onHold, designs, busy, SHEET_MATERIAL_AMOUNT } = data;
const {
fabName,
onHold,
designs,
busy,
SHEET_MATERIAL_AMOUNT = 0,
materials = [],
} = data;
// Reduce the material count array to a map of actually available materials.
const availableMaterials: MaterialMap = {};
for (const material of data.materials) {
for (const material of materials) {
availableMaterials[material.name] = material.amount;
}
@@ -52,7 +59,7 @@ export const Fabricator = (props) => {
<Stack.Item>
<Section>
<MaterialAccessBar
availableMaterials={data.materials}
availableMaterials={materials}
SHEET_MATERIAL_AMOUNT={SHEET_MATERIAL_AMOUNT}
onEjectRequested={(mat: Material, qty: number) =>
act('remove_mat', {