Chem Master/Chem Dispenser 30/60u, + multibottle

This commit is contained in:
ShadowLarkens
2020-08-10 04:10:36 -07:00
parent 93d0d31d62
commit 9a62ba8cda
4 changed files with 122 additions and 52 deletions

View File

@@ -7,6 +7,7 @@
#define MAX_MULTI_AMOUNT 20 // Max number of pills/patches that can be made at once
#define MAX_UNITS_PER_PILL 60 // Max amount of units in a pill
#define MAX_UNITS_PER_PATCH 60 // Max amount of units in a patch
#define MAX_UNITS_PER_BOTTLE 60 // Max amount of units in a bottle (it's volume)
#define MAX_CUSTOM_NAME_LEN 64 // Max length of a custom pill/condiment/whatever
@@ -245,7 +246,18 @@
if("create_bottle")
if(condi || !reagents.total_volume)
return
tgui_modal_input(src, id, "Please name your bottle:", null, arguments, reagents.get_master_reagent_name(), MAX_CUSTOM_NAME_LEN)
var/num = round(text2num(arguments["num"] || 1))
if(!num)
return
arguments["num"] = num
var/amount_per_bottle = CLAMP(reagents.total_volume / num, 0, MAX_UNITS_PER_BOTTLE)
var/default_name = "[reagents.get_master_reagent_name()] ([amount_per_bottle]u)"
var/bottles_text = num == 1 ? "new bottle" : "[num] new bottles"
tgui_modal_input(src, id, "Please name your [bottles_text]:", null, arguments, default_name, MAX_CUSTOM_NAME_LEN)
if("create_bottle_multiple")
if(condi || !reagents.total_volume)
return
tgui_modal_input(src, id, "Please enter the amount of bottles to make (max [MAX_MULTI_AMOUNT] at a time):", null, arguments, pillamount, 5)
if("change_bottle_style")
var/list/choices = list()
for(var/i = 1 to MAX_BOTTLE_SPRITE)
@@ -357,16 +369,28 @@
if("create_bottle")
if(condi || !reagents.total_volume)
return
var/count = CLAMP(round(text2num(arguments["num"]) || 0), 0, MAX_MULTI_AMOUNT)
if(!count)
return
if(!length(answer))
answer = reagents.get_master_reagent_name()
var/obj/item/weapon/reagent_containers/glass/bottle/P = new(loc)
P.name = "[answer] bottle"
P.pixel_x = rand(-7, 7) // random position
P.pixel_y = rand(-7, 7)
P.icon_state = "bottle-[bottlesprite]" || "bottle-1"
reagents.trans_to_obj(P, 60)
P.update_icon()
var/amount_per_bottle = CLAMP(reagents.total_volume / count, 0, MAX_UNITS_PER_BOTTLE)
while(count--)
if(reagents.total_volume <= 0)
to_chat(usr, "<span class='notice'>Not enough reagents to create these bottles!</span>")
return
var/obj/item/weapon/reagent_containers/glass/bottle/P = new(loc)
P.name = "[answer] bottle"
P.pixel_x = rand(-7, 7) // random position
P.pixel_y = rand(-7, 7)
P.icon_state = "bottle-[bottlesprite]" || "bottle-1"
reagents.trans_to_obj(P, amount_per_bottle)
P.update_icon()
if("create_bottle_multiple")
if(condi || !reagents.total_volume)
return
tgui_act("modal_open", list("id" = "create_bottle", "arguments" = list("num" = answer)), ui, state)
if("change_bottle_style")
var/new_style = CLAMP(text2num(answer) || 0, 0, MAX_BOTTLE_SPRITE)
if(!new_style)
@@ -393,7 +417,9 @@
mode = !mode
if("ejectp")
if(loaded_pill_bottle)
loaded_pill_bottle.forceMove(loc)
loaded_pill_bottle.forceMove(get_turf(src))
if(Adjacent(usr) && !issilicon(usr))
usr.put_in_hands(loaded_pill_bottle)
loaded_pill_bottle = null
if("print")
if(printing || condi)
@@ -842,4 +868,5 @@
#undef MAX_MULTI_AMOUNT
#undef MAX_UNITS_PER_PILL
#undef MAX_UNITS_PER_PATCH
#undef MAX_UNITS_PER_BOTTLE
#undef MAX_CUSTOM_NAME_LEN

View File

@@ -4,7 +4,7 @@ import { Box, Button, Flex, LabeledList, ProgressBar, Slider, Section } from "..
import { BeakerContents } from "../interfaces/common/BeakerContents";
import { Window } from "../layouts";
const dispenseAmounts = [5, 10, 20, 30, 40];
const dispenseAmounts = [5, 10, 20, 30, 40, 60];
const removeAmounts = [1, 5, 10];
export const ChemDispenser = (props, context) => {
@@ -35,11 +35,11 @@ const ChemDispenserSettings = (properties, context) => {
{dispenseAmounts.map((a, i) => (
<Flex.Item key={i} grow="1">
<Button
icon="cog"
textAlign="center"
selected={amount === a}
content={a}
content={a + "u"}
m="0"
width="100%"
fluid
onClick={() => act('amount', {
amount: a,
})}

View File

@@ -5,7 +5,7 @@ import { Window } from "../layouts";
import { BeakerContents } from './common/BeakerContents';
import { ComplexModal, modalOpen, modalRegisterBodyOverride } from './common/ComplexModal';
const transferAmounts = [1, 5, 10];
const transferAmounts = [1, 5, 10, 30, 60];
const bottleStyles = [
"bottle.png",
"small_bottle.png",
@@ -91,14 +91,14 @@ export const ChemMaster = (props, context) => {
isCondiment={condi}
bufferNonEmpty={buffer_reagents.length > 0}
/>
<ChemMasterCustomization />
{/* <ChemMasterCustomization /> */}
</Window.Content>
</Window>
);
};
const ChemMasterBeaker = (props, context) => {
const { act } = useBackend(context);
const { act, data } = useBackend(context);
const {
beaker,
beakerReagents,
@@ -245,12 +245,30 @@ const ChemMasterBuffer = (props, context) => {
};
const ChemMasterProduction = (props, context) => {
const { act } = useBackend(context);
const { act, data } = useBackend(context);
if (!props.bufferNonEmpty) {
return (
<Section
title="Production"
flexGrow="1">
flexGrow="1"
buttons={
<Button
disabled={!data.loaded_pill_bottle}
icon="eject"
content={data.loaded_pill_bottle
? (
data.loaded_pill_bottle_name
+ " ("
+ data.loaded_pill_bottle_contents_len
+ "/"
+ data.loaded_pill_bottle_storage_slots
+ ")"
)
: "No pill bottle loaded"}
mb="0.5rem"
onClick={() => act('ejectp')}
/>
}>
<Flex height="100%">
<Flex.Item
grow="1"
@@ -271,7 +289,27 @@ const ChemMasterProduction = (props, context) => {
}
return (
<Section title="Production" flexGrow="1">
<Section
title="Production"
flexGrow="1"
buttons={
<Button
disabled={!data.loaded_pill_bottle}
icon="eject"
content={data.loaded_pill_bottle
? (
data.loaded_pill_bottle_name
+ " ("
+ data.loaded_pill_bottle_contents_len
+ "/"
+ data.loaded_pill_bottle_storage_slots
+ ")"
)
: "No pill bottle loaded"}
mb="0.5rem"
onClick={() => act('ejectp')}
/>
}>
{!props.isCondiment ? (
<ChemMasterProductionChemical />
) : (
@@ -332,6 +370,11 @@ const ChemMasterProductionChemical = (props, context) => {
mr="0.5rem"
mb="0.5rem"
onClick={() => modalOpen(context, 'create_bottle')}
/>
<Button
icon="plus-square"
content="Multiple"
onClick={() => modalOpen(context, 'create_bottle_multiple')}
/><br />
<Button
mb="0.5rem"
@@ -372,38 +415,38 @@ const ChemMasterProductionCondiment = (props, context) => {
);
};
const ChemMasterCustomization = (props, context) => {
const { act, data } = useBackend(context);
if (!data.loaded_pill_bottle) {
return (
<Section title="Pill Bottle Customization">
<Box color="label">
None loaded.
</Box>
</Section>
);
}
// const ChemMasterCustomization = (props, context) => {
// const { act, data } = useBackend(context);
// if (!data.loaded_pill_bottle) {
// return (
// <Section title="Pill Bottle Customization">
// <Box color="label">
// None loaded.
// </Box>
// </Section>
// );
// }
return (
<Section title="Pill Bottle Customization">
<Button
disabled={!data.loaded_pill_bottle}
icon="eject"
content={data.loaded_pill_bottle
? (
data.loaded_pill_bottle_name
+ " ("
+ data.loaded_pill_bottle_contents_len
+ "/"
+ data.loaded_pill_bottle_storage_slots
+ ")"
)
: "None loaded"}
mb="0.5rem"
onClick={() => act('ejectp')}
/>
</Section>
);
};
// return (
// <Section title="Pill Bottle Customization">
// <Button
// disabled={!data.loaded_pill_bottle}
// icon="eject"
// content={data.loaded_pill_bottle
// ? (
// data.loaded_pill_bottle_name
// + " ("
// + data.loaded_pill_bottle_contents_len
// + "/"
// + data.loaded_pill_bottle_storage_slots
// + ")"
// )
// : "None loaded"}
// mb="0.5rem"
// onClick={() => act('ejectp')}
// />
// </Section>
// );
// };
modalRegisterBodyOverride('analyze', analyzeModalBodyOverride);

File diff suppressed because one or more lines are too long