mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 18:53:06 +00:00
TGUI Mulebot
This commit is contained in:
@@ -61,72 +61,57 @@
|
|||||||
load(C)
|
load(C)
|
||||||
|
|
||||||
/mob/living/bot/mulebot/attack_hand(var/mob/user)
|
/mob/living/bot/mulebot/attack_hand(var/mob/user)
|
||||||
interact(user)
|
tgui_interact(user)
|
||||||
|
|
||||||
/mob/living/bot/mulebot/proc/interact(var/mob/user)
|
/mob/living/bot/mulebot/tgui_interact(mob/user, datum/tgui/ui)
|
||||||
var/dat
|
ui = SStgui.try_update_ui(user, src, ui)
|
||||||
dat += "<TT><B>Multiple Utility Load Effector Mk. III</B></TT><BR><BR>"
|
if(!ui)
|
||||||
dat += "ID: [suffix]<BR>"
|
ui = new(user, src, "MuleBot", "Mulebot [suffix ? "([suffix])" : ""]")
|
||||||
dat += "Power: [on ? "On" : "Off"]<BR>"
|
ui.open()
|
||||||
|
|
||||||
if(!open)
|
/mob/living/bot/mulebot/tgui_data(mob/user)
|
||||||
dat += "<BR>Current Load: [load ? load.name : "<i>none</i>"]<BR>"
|
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)
|
/mob/living/bot/mulebot/tgui_act(action, params)
|
||||||
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)
|
|
||||||
if(..())
|
if(..())
|
||||||
return
|
return TRUE
|
||||||
usr.set_machine(src)
|
|
||||||
add_fingerprint(usr)
|
add_fingerprint(usr)
|
||||||
switch(href_list["op"])
|
switch(action)
|
||||||
if("power")
|
if("power")
|
||||||
if(on)
|
if(on)
|
||||||
turn_off()
|
turn_off()
|
||||||
else
|
else
|
||||||
turn_on()
|
turn_on()
|
||||||
visible_message("[usr] switches [on ? "on" : "off"] [src].")
|
visible_message("[usr] switches [on ? "on" : "off"] [src].")
|
||||||
|
. = TRUE
|
||||||
|
|
||||||
if("stop")
|
if("stop")
|
||||||
obeyCommand("Stop")
|
obeyCommand("Stop")
|
||||||
|
. = TRUE
|
||||||
|
|
||||||
if("go")
|
if("go")
|
||||||
obeyCommand("GoTD")
|
obeyCommand("GoTD")
|
||||||
|
. = TRUE
|
||||||
|
|
||||||
if("home")
|
if("home")
|
||||||
obeyCommand("Home")
|
obeyCommand("Home")
|
||||||
|
. = TRUE
|
||||||
|
|
||||||
if("destination")
|
if("destination")
|
||||||
obeyCommand("SetD")
|
obeyCommand("SetD")
|
||||||
|
. = TRUE
|
||||||
|
|
||||||
if("sethome")
|
if("sethome")
|
||||||
var/new_dest
|
var/new_dest
|
||||||
@@ -138,20 +123,23 @@
|
|||||||
if(new_dest)
|
if(new_dest)
|
||||||
home = get_turf(beaconlist[new_dest])
|
home = get_turf(beaconlist[new_dest])
|
||||||
homeName = new_dest
|
homeName = new_dest
|
||||||
|
. = TRUE
|
||||||
|
|
||||||
if("unload")
|
if("unload")
|
||||||
unload()
|
unload()
|
||||||
|
. = TRUE
|
||||||
|
|
||||||
if("autoret")
|
if("autoret")
|
||||||
auto_return = !auto_return
|
auto_return = !auto_return
|
||||||
|
. = TRUE
|
||||||
|
|
||||||
if("cargotypes")
|
if("cargotypes")
|
||||||
crates_only = !crates_only
|
crates_only = !crates_only
|
||||||
|
. = TRUE
|
||||||
|
|
||||||
if("safety")
|
if("safety")
|
||||||
safety = !safety
|
safety = !safety
|
||||||
|
. = TRUE
|
||||||
interact(usr)
|
|
||||||
|
|
||||||
/mob/living/bot/mulebot/attackby(var/obj/item/O, var/mob/user)
|
/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