TGUI Destination Tagger

This commit is contained in:
ShadowLarkens
2020-08-12 10:11:08 -07:00
parent 3d2010e005
commit 6f9545ea63
7 changed files with 408 additions and 370 deletions

View File

@@ -3,3 +3,6 @@ GLOBAL_LIST_EMPTY(meteor_list)
/// List of wire colors for each object type of that round. One for airlocks, one for vendors, etc. /// List of wire colors for each object type of that round. One for airlocks, one for vendors, etc.
GLOBAL_LIST_EMPTY(wire_color_directory) // This is an associative list with the `holder_type` as the key, and a list of colors as the value. GLOBAL_LIST_EMPTY(wire_color_directory) // This is an associative list with the `holder_type` as the key, and a list of colors as the value.
// Reference list for disposal sort junctions. Filled up by sorting junction's New()
GLOBAL_LIST_EMPTY(tagger_locations)

View File

@@ -130,9 +130,6 @@ var/custom_event_msg = null
var/DBConnection/dbcon = new() // Feedback database (New database) var/DBConnection/dbcon = new() // Feedback database (New database)
var/DBConnection/dbcon_old = new() // /tg/station database (Old database) -- see the files in the SQL folder for information on what goes where. var/DBConnection/dbcon_old = new() // /tg/station database (Old database) -- see the files in the SQL folder for information on what goes where.
// Reference list for disposal sort junctions. Filled up by sorting junction's New()
/var/list/tagger_locations = list()
// Added for Xenoarchaeology, might be useful for other stuff. // Added for Xenoarchaeology, might be useful for other stuff.
var/global/list/alphabet_uppercase = list("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z") var/global/list/alphabet_uppercase = list("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z")

View File

@@ -4,7 +4,7 @@
set desc = "Tag yourself for delivery through the disposals system." set desc = "Tag yourself for delivery through the disposals system."
set category = "Robot Commands" set category = "Robot Commands"
var/new_tag = input("Select the desired destination.", "Set Mail Tag", null) as null|anything in tagger_locations var/new_tag = input("Select the desired destination.", "Set Mail Tag", null) as null|anything in GLOB.tagger_locations
if(!new_tag) if(!new_tag)
mail_destination = "" mail_destination = ""

View File

@@ -53,7 +53,7 @@
data["fabricator"] = dronefab data["fabricator"] = dronefab
data["fabPower"] = dronefab?.produce_drones data["fabPower"] = dronefab?.produce_drones
data["areas"] = tagger_locations data["areas"] = GLOB.tagger_locations
data["selected_area"] = "[drone_call_area]" data["selected_area"] = "[drone_call_area]"
return data return data
@@ -65,7 +65,7 @@
switch(action) switch(action)
if("set_dcall_area") if("set_dcall_area")
var/t_area = params["area"] var/t_area = params["area"]
if(!t_area || !(t_area in tagger_locations)) if(!t_area || !(t_area in GLOB.tagger_locations))
return return
drone_call_area = t_area drone_call_area = t_area

View File

@@ -1210,7 +1210,7 @@
New() New()
. = ..() . = ..()
dpdir = dir | turn(dir, 180) dpdir = dir | turn(dir, 180)
if(sort_tag) tagger_locations |= sort_tag if(sort_tag) GLOB.tagger_locations |= sort_tag
updatename() updatename()
updatedesc() updatedesc()
update() update()
@@ -1276,7 +1276,7 @@
New() New()
. = ..() . = ..()
if(sortType) tagger_locations |= sortType if(sortType) GLOB.tagger_locations |= sortType
updatedir() updatedir()
updatename() updatename()

View File

@@ -14,15 +14,15 @@
var/label_x var/label_x
var/tag_x var/tag_x
attack_hand(mob/user as mob) /obj/structure/bigDelivery/attack_hand(mob/user as mob)
unwrap() unwrap()
proc/unwrap() /obj/structure/bigDelivery/proc/unwrap()
playsound(src, 'sound/items/package_unwrap.ogg', 50, 1) playsound(src, 'sound/items/package_unwrap.ogg', 50, 1)
// Destroy will drop our wrapped object on the turf, so let it. // Destroy will drop our wrapped object on the turf, so let it.
qdel(src) qdel(src)
attackby(obj/item/W as obj, mob/user as mob) /obj/structure/bigDelivery/attackby(obj/item/W as obj, mob/user as mob)
if(istype(W, /obj/item/device/destTagger)) if(istype(W, /obj/item/device/destTagger))
var/obj/item/device/destTagger/O = W var/obj/item/device/destTagger/O = W
if(O.currTag) if(O.currTag)
@@ -72,7 +72,7 @@
playsound(src, pick('sound/bureaucracy/pen1.ogg','sound/bureaucracy/pen2.ogg'), 20) playsound(src, pick('sound/bureaucracy/pen1.ogg','sound/bureaucracy/pen2.ogg'), 20)
return return
update_icon() /obj/structure/bigDelivery/update_icon()
overlays = new() overlays = new()
if(nameset || examtext) if(nameset || examtext)
var/image/I = new/image('icons/obj/storage.dmi',"delivery_label") var/image/I = new/image('icons/obj/storage.dmi',"delivery_label")
@@ -101,7 +101,7 @@
I.pixel_y = -3 I.pixel_y = -3
overlays += I overlays += I
examine(mob/user) /obj/structure/bigDelivery/examine(mob/user)
. = ..() . = ..()
if(get_dist(user, src) <= 4) if(get_dist(user, src) <= 4)
if(sortTag) if(sortTag)
@@ -121,7 +121,7 @@
var/nameset = 0 var/nameset = 0
var/tag_x var/tag_x
attack_self(mob/user as mob) /obj/item/smallDelivery/attack_self(mob/user as mob)
if (src.wrapped) //sometimes items can disappear. For example, bombs. --rastaf0 if (src.wrapped) //sometimes items can disappear. For example, bombs. --rastaf0
wrapped.loc = user.loc wrapped.loc = user.loc
if(ishuman(user)) if(ishuman(user))
@@ -132,7 +132,7 @@
qdel(src) qdel(src)
return return
attackby(obj/item/W as obj, mob/user as mob) /obj/item/smallDelivery/attackby(obj/item/W as obj, mob/user as mob)
if(istype(W, /obj/item/device/destTagger)) if(istype(W, /obj/item/device/destTagger))
var/obj/item/device/destTagger/O = W var/obj/item/device/destTagger/O = W
if(O.currTag) if(O.currTag)
@@ -183,7 +183,7 @@
playsound(src, pick('sound/bureaucracy/pen1.ogg','sound/bureaucracy/pen2.ogg'), 20) playsound(src, pick('sound/bureaucracy/pen1.ogg','sound/bureaucracy/pen2.ogg'), 20)
return return
update_icon() /obj/item/smallDelivery/update_icon()
overlays = new() overlays = new()
if((nameset || examtext) && icon_state != "deliverycrate1") if((nameset || examtext) && icon_state != "deliverycrate1")
var/image/I = new/image('icons/obj/storage.dmi',"delivery_label") var/image/I = new/image('icons/obj/storage.dmi',"delivery_label")
@@ -208,7 +208,7 @@
I.pixel_y = -3 I.pixel_y = -3
overlays += I overlays += I
examine(mob/user) /obj/item/smallDelivery/examine(mob/user)
. = ..() . = ..()
if(get_dist(user, src) <= 4) if(get_dist(user, src) <= 4)
if(sortTag) if(sortTag)
@@ -226,7 +226,7 @@
drop_sound = 'sound/items/drop/wrapper.ogg' drop_sound = 'sound/items/drop/wrapper.ogg'
afterattack(var/obj/target as obj, mob/user as mob, proximity) /obj/item/weapon/packageWrap/afterattack(var/obj/target as obj, mob/user as mob, proximity)
if(!proximity) return if(!proximity) return
if(!istype(target)) //this really shouldn't be necessary (but it is). -Pete if(!istype(target)) //this really shouldn't be necessary (but it is). -Pete
return return
@@ -311,7 +311,7 @@
return return
return return
examine(mob/user) /obj/item/weapon/packageWrap/examine(mob/user)
. = ..() . = ..()
if(get_dist(user, src) <= 0) if(get_dist(user, src) <= 0)
. += "<font color='blue'>There are [amount] units of package wrap left!</font>" . += "<font color='blue'>There are [amount] units of package wrap left!</font>"
@@ -338,30 +338,34 @@
item_state = "electronic" item_state = "electronic"
slot_flags = SLOT_BELT slot_flags = SLOT_BELT
proc/openwindow(mob/user as mob) /obj/item/device/destTagger/tgui_interact(mob/user, datum/tgui/ui)
var/dat = "<tt><center><h1><b>TagMaster 2.3</b></h1></center>" ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, "DestinationTagger", name)
ui.open()
dat += "<table style='width:100%; padding:4px;'><tr>" /obj/item/device/destTagger/tgui_data(mob/user, datum/tgui/ui)
for(var/i = 1, i <= tagger_locations.len, i++) var/list/data = ..()
dat += "<td><a href='?src=\ref[src];nextTag=[tagger_locations[i]]'>[tagger_locations[i]]</a></td>"
if (i%4==0) data["currTag"] = currTag
dat += "</tr><tr>" data["taggerLocs"] = GLOB.tagger_locations
dat += "</tr></table><br>Current Selection: [currTag ? currTag : "None"]</tt>" return data
user << browse(dat, "window=destTagScreen;size=450x350") /obj/item/device/destTagger/attack_self(mob/user as mob)
onclose(user, "destTagScreen") tgui_interact(user)
attack_self(mob/user as mob) /obj/item/device/destTagger/tgui_act(action, params)
openwindow(user) if(..())
return return TRUE
add_fingerprint(usr)
Topic(href, href_list) switch(action)
src.add_fingerprint(usr) if("set_tag")
if(href_list["nextTag"] && href_list["nextTag"] in tagger_locations) var/new_tag = params["tag"]
src.currTag = href_list["nextTag"] if(!(new_tag in GLOB.tagger_locations))
openwindow(usr) return FALSE
currTag = new_tag
. = TRUE
/obj/machinery/disposal/deliveryChute /obj/machinery/disposal/deliveryChute
name = "Delivery chute" name = "Delivery chute"
@@ -371,20 +375,20 @@
var/c_mode = 0 var/c_mode = 0
New() /obj/machinery/disposal/deliveryChute/New()
..() ..()
spawn(5) spawn(5)
trunk = locate() in src.loc trunk = locate() in src.loc
if(trunk) if(trunk)
trunk.linked = src // link the pipe trunk to self trunk.linked = src // link the pipe trunk to self
interact() /obj/machinery/disposal/deliveryChute/interact()
return return
update() /obj/machinery/disposal/deliveryChute/update()
return return
Bumped(var/atom/movable/AM) //Go straight into the chute /obj/machinery/disposal/deliveryChute/Bumped(var/atom/movable/AM) //Go straight into the chute
if(istype(AM, /obj/item/projectile) || istype(AM, /obj/effect) || istype(AM, /obj/mecha)) return if(istype(AM, /obj/item/projectile) || istype(AM, /obj/effect) || istype(AM, /obj/mecha)) return
switch(dir) switch(dir)
if(NORTH) if(NORTH)
@@ -404,7 +408,7 @@
M.loc = src M.loc = src
src.flush() src.flush()
flush() /obj/machinery/disposal/deliveryChute/flush()
flushing = 1 flushing = 1
flick("intake-closing", src) flick("intake-closing", src)
var/obj/structure/disposalholder/H = new() // virtual holder object which actually var/obj/structure/disposalholder/H = new() // virtual holder object which actually
@@ -426,7 +430,7 @@
update() update()
return return
attackby(var/obj/item/I, var/mob/user) /obj/machinery/disposal/deliveryChute/attackby(var/obj/item/I, var/mob/user)
if(!I || !user) if(!I || !user)
return return

View File

@@ -0,0 +1,34 @@
import { round } from 'common/math';
import { Fragment } from 'inferno';
import { useBackend } from "../backend";
import { Box, Button, Flex, Icon, LabeledList, ProgressBar, Section, Table } from "../components";
import { Window } from "../layouts";
export const DestinationTagger = (props, context) => {
const { act, data } = useBackend(context);
const {
currTag,
taggerLocs,
} = data;
return (
<Window width={450} height={310} resizable>
<Window.Content>
<Section title="Tagger Locations">
<Flex wrap="wrap" spacing={1} justify="center">
{taggerLocs.sort().map(tag => (
<Flex.Item key={tag}>
<Button
icon={(currTag === tag) ? "check-square-o" : "square-o"}
selected={currTag === tag}
content={tag}
onClick={() => act("set_tag", { tag: tag })} />
</Flex.Item>
))}
</Flex>
</Section>
</Window.Content>
</Window>
);
};