mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 10:43:20 +00:00
TGUI Mulebot
This commit is contained in:
@@ -61,72 +61,57 @@
|
||||
load(C)
|
||||
|
||||
/mob/living/bot/mulebot/attack_hand(var/mob/user)
|
||||
interact(user)
|
||||
tgui_interact(user)
|
||||
|
||||
/mob/living/bot/mulebot/proc/interact(var/mob/user)
|
||||
var/dat
|
||||
dat += "<TT><B>Multiple Utility Load Effector Mk. III</B></TT><BR><BR>"
|
||||
dat += "ID: [suffix]<BR>"
|
||||
dat += "Power: [on ? "On" : "Off"]<BR>"
|
||||
/mob/living/bot/mulebot/tgui_interact(mob/user, datum/tgui/ui)
|
||||
ui = SStgui.try_update_ui(user, src, ui)
|
||||
if(!ui)
|
||||
ui = new(user, src, "MuleBot", "Mulebot [suffix ? "([suffix])" : ""]")
|
||||
ui.open()
|
||||
|
||||
if(!open)
|
||||
dat += "<BR>Current Load: [load ? load.name : "<i>none</i>"]<BR>"
|
||||
/mob/living/bot/mulebot/tgui_data(mob/user)
|
||||
var/list/data = list(
|
||||
"suffix" = suffix,
|
||||
"power" = on,
|
||||
"issilicon" = issilicon(user),
|
||||
"load" = load,
|
||||
"locked" = locked,
|
||||
"auto_return" = auto_return,
|
||||
"crates_only" = crates_only,
|
||||
"hatch" = open,
|
||||
"safety" = safety,
|
||||
)
|
||||
return data
|
||||
|
||||
if(locked)
|
||||
dat += "<HR>Controls are locked"
|
||||
else
|
||||
dat += "<HR>Controls are unlocked<BR><BR>"
|
||||
|
||||
if(!locked || issilicon(user))
|
||||
dat += "<A href='byond://?src=\ref[src];op=power'>Toggle power</A><BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];op=stop'>Stop</A><BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];op=go'>Proceed</A><BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];op=home'>Return to home</A><BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];op=destination'>Set destination</A><BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];op=sethome'>Set home</A><BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];op=autoret'>Toggle auto return home</A> ([auto_return ? "On" : "Off"])<BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];op=cargotypes'>Toggle non-standard cargo</A> ([crates_only ? "Off" : "On"])<BR>"
|
||||
|
||||
if(load)
|
||||
dat += "<A href='byond://?src=\ref[src];op=unload'>Unload now</A><BR>"
|
||||
dat += "<HR>The maintenance hatch is closed.<BR>"
|
||||
|
||||
else
|
||||
if(!issilicon(user))
|
||||
dat += "The maintenance hatch is open.<BR><BR>"
|
||||
|
||||
dat += "<A href='byond://?src=\ref[src];op=safety'>Toggle safety</A> ([safety ? "On" : "Off - DANGER"])<BR>"
|
||||
else
|
||||
dat += "The bot is in maintenance mode and cannot be controlled.<BR>"
|
||||
|
||||
user << browse("<HEAD><TITLE>Mulebot [suffix ? "([suffix])" : ""]</TITLE></HEAD>[dat]", "window=mulebot;size=350x500")
|
||||
onclose(user, "mulebot")
|
||||
return
|
||||
|
||||
/mob/living/bot/mulebot/Topic(href, href_list)
|
||||
/mob/living/bot/mulebot/tgui_act(action, params)
|
||||
if(..())
|
||||
return
|
||||
usr.set_machine(src)
|
||||
return TRUE
|
||||
|
||||
add_fingerprint(usr)
|
||||
switch(href_list["op"])
|
||||
switch(action)
|
||||
if("power")
|
||||
if(on)
|
||||
turn_off()
|
||||
else
|
||||
turn_on()
|
||||
visible_message("[usr] switches [on ? "on" : "off"] [src].")
|
||||
. = TRUE
|
||||
|
||||
if("stop")
|
||||
obeyCommand("Stop")
|
||||
. = TRUE
|
||||
|
||||
if("go")
|
||||
obeyCommand("GoTD")
|
||||
. = TRUE
|
||||
|
||||
if("home")
|
||||
obeyCommand("Home")
|
||||
. = TRUE
|
||||
|
||||
if("destination")
|
||||
obeyCommand("SetD")
|
||||
. = TRUE
|
||||
|
||||
if("sethome")
|
||||
var/new_dest
|
||||
@@ -138,20 +123,23 @@
|
||||
if(new_dest)
|
||||
home = get_turf(beaconlist[new_dest])
|
||||
homeName = new_dest
|
||||
. = TRUE
|
||||
|
||||
if("unload")
|
||||
unload()
|
||||
. = TRUE
|
||||
|
||||
if("autoret")
|
||||
auto_return = !auto_return
|
||||
. = TRUE
|
||||
|
||||
if("cargotypes")
|
||||
crates_only = !crates_only
|
||||
. = TRUE
|
||||
|
||||
if("safety")
|
||||
safety = !safety
|
||||
|
||||
interact(usr)
|
||||
. = TRUE
|
||||
|
||||
/mob/living/bot/mulebot/attackby(var/obj/item/O, var/mob/user)
|
||||
..()
|
||||
|
||||
139
tgui/packages/tgui/interfaces/MuleBot.js
Normal file
139
tgui/packages/tgui/interfaces/MuleBot.js
Normal file
@@ -0,0 +1,139 @@
|
||||
import { round } from 'common/math';
|
||||
import { Fragment } from 'inferno';
|
||||
import { useBackend } from "../backend";
|
||||
import { Box, Button, Flex, Icon, LabeledList, ProgressBar, Section } from "../components";
|
||||
import { Window } from "../layouts";
|
||||
|
||||
export const MuleBot = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
const {
|
||||
suffix,
|
||||
power,
|
||||
load,
|
||||
locked,
|
||||
issilicon,
|
||||
auto_return,
|
||||
crates_only,
|
||||
hatch,
|
||||
safety,
|
||||
} = data;
|
||||
return (
|
||||
<Window width={350} height={500}>
|
||||
<Window.Content>
|
||||
<Section title="Multiple Utility Load Effector Mk. III">
|
||||
<LabeledList>
|
||||
<LabeledList.Item label="ID">
|
||||
{suffix}
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item label="Current Load" buttons={
|
||||
<Button
|
||||
icon="eject"
|
||||
content="Unload Now"
|
||||
disabled={!load}
|
||||
onClick={() => act("unload")} />
|
||||
}>
|
||||
{load ? load : "None."}
|
||||
</LabeledList.Item>
|
||||
</LabeledList>
|
||||
{hatch ? <MuleBotOpen /> : <MuleBotClosed />}
|
||||
</Section>
|
||||
</Window.Content>
|
||||
</Window>
|
||||
);
|
||||
};
|
||||
|
||||
const MuleBotClosed = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
const {
|
||||
suffix,
|
||||
power,
|
||||
load,
|
||||
locked,
|
||||
issilicon,
|
||||
auto_return,
|
||||
crates_only,
|
||||
open,
|
||||
safety,
|
||||
} = data;
|
||||
|
||||
return (
|
||||
<Section level={2} title="Controls" buttons={
|
||||
<Button
|
||||
icon="power-off"
|
||||
content={power ? "On" : "Off"}
|
||||
selected={power}
|
||||
disabled={locked && !issilicon}
|
||||
onClick={() => act("power")} />
|
||||
}>
|
||||
{(locked && !issilicon) ? (
|
||||
<Box color="bad">This interface is currently locked.</Box>
|
||||
) : (
|
||||
<Fragment>
|
||||
<Button
|
||||
fluid
|
||||
icon="stop"
|
||||
content="Stop"
|
||||
onClick={() => act("stop")} />
|
||||
<Button
|
||||
fluid
|
||||
icon="truck-monster"
|
||||
content="Proceed"
|
||||
onClick={() => act("go")} />
|
||||
<Button
|
||||
fluid
|
||||
icon="home"
|
||||
content="Return Home"
|
||||
onClick={() => act("home")} />
|
||||
<Button
|
||||
fluid
|
||||
icon="map-marker-alt"
|
||||
content="Set Destination"
|
||||
onClick={() => act("destination")} />
|
||||
<Button
|
||||
fluid
|
||||
icon="cog"
|
||||
content="Set Home"
|
||||
onClick={() => act("sethome")} />
|
||||
<Button
|
||||
fluid
|
||||
icon="home"
|
||||
selected={auto_return}
|
||||
content={"Auto Return Home: " + (auto_return ? "Enabled" : "Disabled")}
|
||||
onClick={() => act("autoret")} />
|
||||
<Button
|
||||
fluid
|
||||
icon="biking"
|
||||
selected={!crates_only}
|
||||
content={"Non-standard Cargo: " + (crates_only ? "Disabled" : "Enabled")}
|
||||
onClick={() => act("cargotypes")} />
|
||||
</Fragment>
|
||||
)}
|
||||
</Section>
|
||||
);
|
||||
};
|
||||
|
||||
const MuleBotOpen = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
const {
|
||||
suffix,
|
||||
power,
|
||||
load,
|
||||
locked,
|
||||
issilicon,
|
||||
auto_return,
|
||||
crates_only,
|
||||
open,
|
||||
safety,
|
||||
} = data;
|
||||
|
||||
return (
|
||||
<Section level={2} title="Maintenance Panel">
|
||||
<Button
|
||||
fluid
|
||||
icon="skull-crossbones"
|
||||
color={safety ? "green" : "red"}
|
||||
content={"Safety: " + (safety ? "Engaged" : "Disengaged (DANGER)")}
|
||||
onClick={() => act("safety")} />
|
||||
</Section>
|
||||
);
|
||||
};
|
||||
Reference in New Issue
Block a user