mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-14 04:02:31 +00:00
TGUI Destination Tagger
This commit is contained in:
@@ -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)
|
||||||
@@ -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")
|
||||||
|
|
||||||
|
|||||||
@@ -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 = ""
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
34
tgui/packages/tgui/interfaces/DestinationTagger.js
Normal file
34
tgui/packages/tgui/interfaces/DestinationTagger.js
Normal 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>
|
||||||
|
);
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user