From 563aec5fcb3c8193753244a4ca9932d27e0f9983 Mon Sep 17 00:00:00 2001 From: Geeves Date: Wed, 27 Sep 2023 15:55:45 +0200 Subject: [PATCH] Mining Vendor TGUI (#17426) * Mining Vendor TGUI * nice * Update tgui/packages/tgui/interfaces/MiningVendor.tsx Co-authored-by: Wowzewow (Wezzy) <42310821+alsoandanswer@users.noreply.github.com> --------- Co-authored-by: Wowzewow (Wezzy) <42310821+alsoandanswer@users.noreply.github.com> --- code/modules/mining/machine_vending.dm | 63 ++++++++-------- html/changelogs/geeves-tgui_mining_vendor.yml | 6 ++ .../packages/tgui/interfaces/MiningVendor.tsx | 71 +++++++++++++++++++ 3 files changed, 106 insertions(+), 34 deletions(-) create mode 100644 html/changelogs/geeves-tgui_mining_vendor.yml create mode 100644 tgui/packages/tgui/interfaces/MiningVendor.tsx diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm index a29d8c778d6..02240037340 100644 --- a/code/modules/mining/machine_vending.dm +++ b/code/modules/mining/machine_vending.dm @@ -117,7 +117,7 @@ var/global/list/minevendor_list = list( //keep in order of price if(!id_turf.Adjacent(loc)) scanned_id = null get_user_id(user) - interact(user) + ui_interact(user) /obj/machinery/mineral/equipment_vendor/proc/get_user_id(var/mob/user) if(isDrone(user)) @@ -129,46 +129,43 @@ var/global/list/minevendor_list = list( //keep in order of price if(ID) scanned_id = WEAKREF(ID) -/obj/machinery/mineral/equipment_vendor/interact(mob/user) - var/dat - dat +="
" +/obj/machinery/mineral/equipment_vendor/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "MiningVendor", "Mining Equipment Vendor", ui_x=500, ui_y=500) + ui.autoupdate = FALSE + ui.open() + +/obj/machinery/mineral/equipment_vendor/ui_data(mob/user) + var/list/data = list() var/obj/item/card/id/ID = scanned_id?.resolve() if(ID) - dat += "You have [ID.mining_points ? ID.mining_points : 0] mining points collected. Eject ID.
" + data["hasId"] = TRUE + data["miningPoints"] = ID.mining_points ? ID.mining_points : 0 else - dat += "No ID inserted. Insert ID.
" - dat += "
" - dat += "
Equipment point cost list:
" - for(var/datum/data/mining_equipment/prize in minevendor_list) - if(prize.amount > 0) - dat += "" - else if(prize.amount == -1) - dat += "" - else - dat += "" - dat += "
[prize.equipment_name][prize.cost]Purchase ([prize.amount])
[prize.equipment_name][prize.cost]Purchase (No limit.)
[prize.equipment_name](Out of stock!)
" + data["hasId"] = FALSE + var/list/prize_list = list() + for(var/datum/data/mining_equipment/prize as anything in minevendor_list) + prize_list += list(list("name" = prize.equipment_name, "cost" = prize.cost, "stock" = prize.amount, "ref" = "\ref[prize]")) + data["prizeList"] = prize_list + return data - var/datum/browser/popup = new(user, "miningvendor", "Mining Equipment Vendor", 400, 350) - popup.set_content(dat) - popup.open() - return - -/obj/machinery/mineral/equipment_vendor/Topic(href, href_list) - if(..()) +/obj/machinery/mineral/equipment_vendor/ui_act(action, params) + . = ..() + if(.) return - if(href_list["choice"]) - var/obj/item/card/id/ID = scanned_id.resolve() - if(ID) - if(href_list["choice"] == "eject") - scanned_id = null - else if(href_list["choice"] == "insert") + + if(action == "choice") + if(params["choice"] == "scan") var/obj/item/card/id/I = usr.get_active_hand() if(istype(I)) scanned_id = WEAKREF(I) - if(href_list["purchase"]) + return TRUE + + if(action == "purchase") var/obj/item/card/id/ID = scanned_id.resolve() if(ID) - var/datum/data/mining_equipment/prize = locate(href_list["purchase"]) + var/datum/data/mining_equipment/prize = locate(params["purchase"]) if(!prize || !(prize in minevendor_list)) return if(prize.amount <= 0 && prize.amount != -1) @@ -186,9 +183,7 @@ var/global/list/minevendor_list = list( //keep in order of price prize.amount-- new prize.equipment_path(get_turf(src)) intent_message(MACHINE_SOUND) - - updateUsrDialog() - return + return TRUE /obj/machinery/mineral/equipment_vendor/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/coin/mining)) diff --git a/html/changelogs/geeves-tgui_mining_vendor.yml b/html/changelogs/geeves-tgui_mining_vendor.yml new file mode 100644 index 00000000000..a2cc3f5c518 --- /dev/null +++ b/html/changelogs/geeves-tgui_mining_vendor.yml @@ -0,0 +1,6 @@ +author: Geeves + +delete-after: True + +changes: + - rscadd: "Converted the mining vendor UI to TGUI." diff --git a/tgui/packages/tgui/interfaces/MiningVendor.tsx b/tgui/packages/tgui/interfaces/MiningVendor.tsx new file mode 100644 index 00000000000..50ea754641a --- /dev/null +++ b/tgui/packages/tgui/interfaces/MiningVendor.tsx @@ -0,0 +1,71 @@ +import { useBackend } from '../backend'; +import { Button, Section, Box, Table } from '../components'; +import { Window } from '../layouts'; + +export type PrizeListData = { + name: string; + cost: number; + stock: number; + ref: string; +}; + +export type MiningVendorData = { + hasId: boolean; + miningPoints: number; + prizeList: PrizeListData[]; +}; + +export const MiningVendor = (props, context) => { + const { act, data } = useBackend(context); + + return ( + + +
+ {data.hasId ? ( + + You have {data.miningPoints} mining points collected. + + ) : ( + + No ID detected. +
+
+ + + Name + Cost + Stock + Action + + {data.prizeList.map((prize) => ( + + + {prize.name} + + {prize.cost} + + {prize.stock === -1 ? '(No limit.)' : prize.stock} + + +
+
+
+
+ ); +};