From 52fc5e8bc6c5b5eb424930034b6a4a4a495e8f67 Mon Sep 17 00:00:00 2001 From: duncathan salt Date: Fri, 17 Nov 2017 18:03:47 -0600 Subject: [PATCH] RPD ui improvements --- code/game/machinery/pipe/construction.dm | 2 +- code/game/objects/items/RPD.dm | 524 ++++++----------------- code/modules/client/asset_cache.dm | 45 +- tgui/src/interfaces/rpd.ract | 51 +++ tgui/src/interfaces/rpd/colorsel.ract | 6 + tgui/src/interfaces/rpd/dirsel.ract | 10 + 6 files changed, 226 insertions(+), 412 deletions(-) create mode 100644 tgui/src/interfaces/rpd.ract create mode 100644 tgui/src/interfaces/rpd/colorsel.ract create mode 100644 tgui/src/interfaces/rpd/dirsel.ract diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm index 80181b656b..81546d2eac 100644 --- a/code/game/machinery/pipe/construction.dm +++ b/code/game/machinery/pipe/construction.dm @@ -20,7 +20,7 @@ Buildable meters w_class = WEIGHT_CLASS_NORMAL level = 2 var/piping_layer = PIPING_LAYER_DEFAULT - var/RPD_type //TEMP: kill this once RPDs get a rewrite pls + var/RPD_type /obj/item/pipe/directional RPD_type = PIPE_UNARY diff --git a/code/game/objects/items/RPD.dm b/code/game/objects/items/RPD.dm index 45798dae7e..d39787d201 100644 --- a/code/game/objects/items/RPD.dm +++ b/code/game/objects/items/RPD.dm @@ -13,7 +13,6 @@ RPD #define CATEGORY_DISPOSALS 1 -//find the defines in code\_DEFINES\pipe_construction.dm GLOBAL_LIST_INIT(atmos_pipe_recipes, list( "Pipes" = list( new /datum/pipe_info/pipe("Pipe", /obj/machinery/atmospherics/pipe/simple), @@ -60,10 +59,8 @@ GLOBAL_LIST_INIT(disposal_pipe_recipes, list( /datum/pipe_info var/name - var/icon var/icon_state var/id = -1 - var/categoryId var/dirtype = PIPE_BENDABLE /datum/pipe_info/proc/Render(dispenser) @@ -80,26 +77,51 @@ GLOBAL_LIST_INIT(disposal_pipe_recipes, list( /datum/pipe_info/proc/Params() return "" +/datum/pipe_info/proc/get_preview(selected_dir) + var/list/dirs + switch(dirtype) + if(PIPE_STRAIGHT, PIPE_BENDABLE) + dirs = list("[NORTH]" = "Vertical", "[EAST]" = "Horizontal") + if(dirtype == PIPE_BENDABLE) + dirs += list("[NORTHWEST]" = "West to North", "[NORTHEAST]" = "North to East", + "[SOUTHWEST]" = "South to West", "[SOUTHEAST]" = "East to South") + if(PIPE_TRINARY, PIPE_TRIN_M) + dirs = list("[NORTH]" = "West South East", "[EAST]" = "North West South", + "[SOUTH]" = "East North West", "[WEST]" = "South East North") + if(dirtype == PIPE_TRIN_M) + dirs += list("[SOUTHEAST]" = "West South East", "[NORTHEAST]" = "North West South", + "[NORTHWEST]" = "East North West", "[SOUTHWEST]" = "South East North") + if(PIPE_UNARY) + dirs = list("[NORTH]" = "North", "[EAST]" = "East", "[SOUTH]" = "South", "[WEST]" = "West") + if(PIPE_ONEDIR) + dirs = list("[SOUTH]" = name) -/datum/pipe_info/pipe - categoryId = CATEGORY_ATMOS - icon = 'icons/obj/atmospherics/pipes/pipe_item.dmi' + var/list/rows = list() + var/list/row = list("previews" = list()) + var/i = 0 + for(var/dir in dirs) + var/flipped = (dirtype == PIPE_TRIN_M) && (text2num(dir) in GLOB.diagonals) + row["previews"] += list(list("selected" = (text2num(dir) == selected_dir), "dir" = dir2text(text2num(dir)), "dir_name" = dirs[dir], "icon_state" = icon_state, "flipped" = flipped)) + if(i++ || dirtype == PIPE_ONEDIR) + rows += list(row) + row = list("previews" = list()) + i = 0 + + return rows /datum/pipe_info/pipe/New(label, obj/machinery/atmospherics/path) name = label id = path icon_state = initial(path.pipe_state) - dirtype = initial(path.construction_type) + var/obj/item/pipe/c = initial(path.construction_type) + dirtype = initial(c.RPD_type) /datum/pipe_info/pipe/Params() return "makepipe=[id]&type=[dirtype]" - /datum/pipe_info/meter - categoryId = CATEGORY_ATMOS - dirtype = PIPE_ONEDIR - icon = 'icons/obj/meter.dmi' icon_state = "meterX" + dirtype = PIPE_ONEDIR /datum/pipe_info/meter/New(label) name = label @@ -107,11 +129,6 @@ GLOBAL_LIST_INIT(disposal_pipe_recipes, list( /datum/pipe_info/meter/Params() return "makemeter=[id]&type=[dirtype]" - -/datum/pipe_info/disposal - categoryId = CATEGORY_DISPOSALS - icon = 'icons/obj/atmospherics/pipes/disposal.dmi' - /datum/pipe_info/disposal/New(label, obj/path, dt=PIPE_UNARY) name = label id = path @@ -126,7 +143,6 @@ GLOBAL_LIST_INIT(disposal_pipe_recipes, list( return "dmake=[id]&type=[dirtype]" - /obj/item/pipe_dispenser name = "Rapid Piping Device (RPD)" desc = "A device used to rapidly pipe things." @@ -144,29 +160,35 @@ GLOBAL_LIST_INIT(disposal_pipe_recipes, list( resistance_flags = FIRE_PROOF var/datum/effect_system/spark_spread/spark_system var/working = 0 - var/p_type = /obj/machinery/atmospherics/pipe/simple - var/p_conntype = PIPE_BENDABLE - var/p_dir = 1 + var/mode = ATMOS_MODE + var/p_dir = NORTH var/p_flipped = FALSE - var/p_class = ATMOS_MODE var/list/paint_colors = list( - "grey" = rgb(255,255,255), - "red" = rgb(255,0,0), - "blue" = rgb(0,0,255), - "cyan" = rgb(0,256,249), - "green" = rgb(30,255,0), - "yellow" = rgb(255,198,0), - "purple" = rgb(130,43,255) + "Grey" = rgb(255,255,255), + "Red" = rgb(255,0,0), + "Blue" = rgb(0,0,255), + "Cyan" = rgb(0,256,249), + "Green" = rgb(30,255,0), + "Yellow" = rgb(255,198,0), + "Purple" = rgb(130,43,255) ) - var/paint_color="grey" + var/paint_color="Grey" var/screen = CATEGORY_ATMOS //Starts on the atmos tab. var/piping_layer = PIPING_LAYER_DEFAULT + var/datum/pipe_info/recipe + var/static/datum/pipe_info/first_atmos + var/static/datum/pipe_info/first_disposal /obj/item/pipe_dispenser/New() . = ..() spark_system = new /datum/effect_system/spark_spread spark_system.set_up(5, 0, src) spark_system.attach(src) + if(!first_atmos) + first_atmos = GLOB.atmos_pipe_recipes[GLOB.atmos_pipe_recipes[1]][1] + if(!first_disposal) + first_disposal = GLOB.disposal_pipe_recipes[GLOB.disposal_pipe_recipes[1]][1] + recipe = first_atmos /obj/item/pipe_dispenser/Destroy() qdel(spark_system) @@ -174,7 +196,7 @@ GLOBAL_LIST_INIT(disposal_pipe_recipes, list( return ..() /obj/item/pipe_dispenser/attack_self(mob/user) - show_menu(user) + ui_interact(user) /obj/item/pipe_dispenser/suicide_act(mob/user) user.visible_message("[user] points the end of the RPD down [user.p_their()] throat and presses a button! It looks like [user.p_theyre()] trying to commit suicide...") @@ -182,386 +204,85 @@ GLOBAL_LIST_INIT(disposal_pipe_recipes, list( playsound(get_turf(user), 'sound/items/deconstruct.ogg', 50, 1) return(BRUTELOSS) -/obj/item/pipe_dispenser/proc/render_dir_img(_dir,pic,title,flipped=0) - var/selected=" class=\"imglink\"" - if(_dir == p_dir) - selected=" class=\"imglink selected\"" - return "" +/obj/item/pipe_dispenser/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ + datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + var/datum/asset/assets = get_asset_datum(/datum/asset/simple/icon_states/multiple_icons/pipes) + assets.send(user) + ui = new(user, src, ui_key, "rpd", name, 300, 550, master_ui, state) + ui.open() -/obj/item/pipe_dispenser/proc/show_menu(mob/user) - if(!user || !src) - return 0 - var/dat = {"

Type

-Utilities: -" +/obj/item/pipe_dispenser/ui_data(mob/user) + var/list/data = list( + "mode" = mode, + "screen" = screen, + "piping_layer" = piping_layer, + "preview_rows" = recipe.get_preview(p_dir), + "categories" = list(), + "paint_colors" = list() + ) - dat += "Category:" - - var/icon/preview=null - var/datbuild = "" - var/recipes = GLOB.atmos_pipe_recipes + GLOB.disposal_pipe_recipes - for(var/category in recipes) - var/list/cat_recipes = recipes[category] - for(var/i in cat_recipes) - var/datum/pipe_info/I = i - var/found=0 - if(I.id == p_type) - if((p_class == ATMOS_MODE || p_class == METER_MODE) && I.categoryId == CATEGORY_ATMOS) - found = 1 - else if(p_class == DISPOSALS_MODE && I.categoryId == CATEGORY_DISPOSALS) - found = 1 - if(found) - preview = new /icon(I.icon, I.icon_state) - if(screen == I.categoryId) - if(I.id == p_type && p_class >= 0) - datbuild += "
  • [I.name]
  • " - else - datbuild += I.Render(src) - - if(length(datbuild) > 0) - dat += "[category]:" - - var/color_css="" - var/color_picker="" - for(var/color_name in paint_colors) - var/color=paint_colors[color_name] - color_css += {" - a.color.[color_name] { - color: [color]; - } - a.color.[color_name]:hover { - border:1px solid [color]; - } - a.color.[color_name].selected { - background-color: [color]; - } - "} - var/selected="" - if(color_name==paint_color) - selected = " selected" - color_picker += {""} - - var/dirsel="

    Direction

    " - switch(p_conntype) - if(-1) - if(p_class==PAINT_MODE) - dirsel = "

    Color

    [color_picker]" - else - dirsel = "" - - if(PIPE_STRAIGHT) // Straight, N-S, W-E - if(preview) - user << browse_rsc(new /icon(preview, dir=NORTH), "vertical.png") - user << browse_rsc(new /icon(preview, dir=EAST), "horizontal.png") - - dirsel += "

    " - dirsel += render_dir_img(NORTH,"vertical.png","Vertical") - dirsel += render_dir_img(EAST,"horizontal.png","Horizontal") - dirsel += "

    " - else - dirsel+={" -

    - - -

    - "} - - if(PIPE_BENDABLE) // Bent, N-W, N-E etc - if(preview) - user << browse_rsc(new /icon(preview, dir=NORTH), "vertical.png") - user << browse_rsc(new /icon(preview, dir=EAST), "horizontal.png") - user << browse_rsc(new /icon(preview, dir=NORTHWEST), "nw.png") - user << browse_rsc(new /icon(preview, dir=NORTHEAST), "ne.png") - user << browse_rsc(new /icon(preview, dir=SOUTHWEST), "sw.png") - user << browse_rsc(new /icon(preview, dir=SOUTHEAST), "se.png") - - dirsel += "

    " - dirsel += render_dir_img(NORTH,"vertical.png","Vertical") - dirsel += render_dir_img(EAST,"horizontal.png","Horizontal") - dirsel += "
    " - dirsel += render_dir_img(NORTHWEST,"nw.png","West to North") - dirsel += render_dir_img(NORTHEAST,"ne.png","North to East") - dirsel += "
    " - dirsel += render_dir_img(SOUTHWEST,"sw.png","South to West") - dirsel += render_dir_img(SOUTHEAST,"se.png","East to South") - dirsel += "

    " - else - dirsel+={" -

    - - -
    - - -
    - - -

    - "} - if(PIPE_TRINARY) // Manifold - if(preview) - user << browse_rsc(new /icon(preview, dir=NORTH), "s.png") - user << browse_rsc(new /icon(preview, dir=EAST), "w.png") - user << browse_rsc(new /icon(preview, dir=SOUTH), "n.png") - user << browse_rsc(new /icon(preview, dir=WEST), "e.png") - - dirsel += "

    " - dirsel += render_dir_img(NORTH,"s.png","West South East") - dirsel += render_dir_img(EAST,"w.png","North West South") - dirsel += "
    " - dirsel += render_dir_img(SOUTH,"n.png","East North West") - dirsel += render_dir_img(WEST,"e.png","South East North") - dirsel += "

    " - else - dirsel+={" -

    - - -
    - - -

    - "} - if(PIPE_TRIN_M) // Mirrored ones - if(preview) - user << browse_rsc(new /icon(preview, dir=NORTH), "s.png") - user << browse_rsc(new /icon(preview, dir=EAST), "w.png") - user << browse_rsc(new /icon(preview, dir=SOUTH), "n.png") - user << browse_rsc(new /icon(preview, dir=WEST), "e.png") - user << browse_rsc(new /icon(preview, dir=SOUTHEAST), "sm.png") //each mirror icon is 45 anticlockwise from it's real direction - user << browse_rsc(new /icon(preview, dir=NORTHEAST), "wm.png") - user << browse_rsc(new /icon(preview, dir=NORTHWEST), "nm.png") - user << browse_rsc(new /icon(preview, dir=SOUTHWEST), "em.png") - - dirsel += "

    " - dirsel += render_dir_img(NORTH,"s.png","West South East") - dirsel += render_dir_img(EAST,"w.png","North West South") - dirsel += "
    " - dirsel += render_dir_img(SOUTH,"n.png","East North West") - dirsel += render_dir_img(WEST,"e.png","South East North") - dirsel += "
    " - dirsel += render_dir_img(SOUTHEAST,"sm.png","West South East", 1) - dirsel += render_dir_img(NORTHEAST,"wm.png","North West South", 1) - dirsel += "
    " - dirsel += render_dir_img(NORTHWEST,"nm.png","East North West", 1) - dirsel += render_dir_img(SOUTHWEST,"em.png","South East North", 1) - dirsel += "

    " - else - dirsel+={" -

    - - -
    - - -
    - - -
    - - -

    - "} - if(PIPE_UNARY) // Stuff with four directions - includes pumps etc. - if(preview) - user << browse_rsc(new /icon(preview, dir=NORTH), "n.png") - user << browse_rsc(new /icon(preview, dir=EAST), "e.png") - user << browse_rsc(new /icon(preview, dir=SOUTH), "s.png") - user << browse_rsc(new /icon(preview, dir=WEST), "w.png") - - dirsel += "

    " - dirsel += render_dir_img(NORTH,"n.png","North") - dirsel += render_dir_img(EAST, "e.png","East") - dirsel += render_dir_img(SOUTH,"s.png","South") - dirsel += render_dir_img(WEST, "w.png","West") - dirsel += "

    " - else - dirsel+={" -

    - - - - -

    - "} - if(PIPE_ONEDIR) // Single icon_state (eg 4-way manifolds) - if(preview) - user << browse_rsc(new /icon(preview), "pipe.png") - - dirsel += "

    " - dirsel += render_dir_img(NORTH,"pipe.png","Pipe") - dirsel += "

    " - else - dirsel+={" -

    - -

    - "} - - - var/datsytle = {" -"} - - dat = datsytle + dirsel + dat - - var/datum/browser/popup = new(user, "pipedispenser", name, 300, 550) - popup.set_content(dat) - popup.open() - return - -/obj/item/pipe_dispenser/Topic(href, href_list) - if(!usr.canUseTopic(src)) - usr << browse(null, "window=pipedispenser") +/obj/item/pipe_dispenser/ui_act(action, params) + if(..()) return - usr.set_machine(src) - add_fingerprint(usr) - if(href_list["screen"]) - screen = text2num(href_list["screen"]) - show_menu(usr) - - if(href_list["setdir"]) - p_dir = text2num(href_list["setdir"]) - if(href_list["flipped"]) - p_flipped = text2num(href_list["flipped"]) - else - p_flipped = FALSE - show_menu(usr) - - if(href_list["setlayer"]) - if(!isnum(href_list["setlayer"])) - piping_layer = text2num(href_list["setlayer"]) - else - piping_layer = href_list["setlayer"] - show_menu(usr) - - if(href_list["eatpipes"]) - p_class = EATING_MODE - p_conntype = -1 - p_dir = 1 + if(!usr.canUseTopic(src)) + return + var/playeffect = TRUE + switch(action) + if("color") + paint_color = params["paint_color"] + if("mode") + mode = text2num(params["mode"]) + if("screen") + if(mode == screen) + mode = text2num(params["screen"]) + screen = text2num(params["screen"]) + recipe = screen == DISPOSALS_MODE ? first_disposal : first_atmos + p_dir = NORTH + playeffect = FALSE + if("piping_layer") + piping_layer = text2num(params["piping_layer"]) + playeffect = FALSE + if("pipe_type") + var/static/list/recipes + if(!recipes) + recipes = GLOB.disposal_pipe_recipes + GLOB.atmos_pipe_recipes + recipe = recipes[params["category"]][text2num(params["pipe_type"])] + p_dir = NORTH + if("setdir") + p_dir = text2dir(params["dir"]) + p_flipped = text2num(params["flipped"]) + playeffect = FALSE + if(playeffect) spark_system.start() playsound(get_turf(src), 'sound/effects/pop.ogg', 50, 0) - show_menu(usr) - - if(href_list["paintpipes"]) - p_class = PAINT_MODE - p_conntype = -1 - p_dir = 1 - spark_system.start() - playsound(get_turf(src), 'sound/effects/pop.ogg', 50, 0) - show_menu(usr) - - if(href_list["set_color"]) - paint_color = href_list["set_color"] - spark_system.start() - playsound(get_turf(src), 'sound/effects/pop.ogg', 50, 0) - show_menu(usr) - - if(href_list["makepipe"]) - p_type = text2path(href_list["makepipe"]) - var/obj/item/pipe/path = text2path(href_list["type"]) - p_conntype = initial(path.RPD_type) - p_dir = NORTH - p_class = ATMOS_MODE - spark_system.start() - playsound(get_turf(src), 'sound/effects/pop.ogg', 50, 0) - show_menu(usr) - - if(href_list["makemeter"]) - p_class = METER_MODE - p_type = text2num(href_list["makemeter"]) - p_conntype = text2num(href_list["type"]) - p_dir = NORTH - spark_system.start() - playsound(get_turf(src), 'sound/effects/pop.ogg', 50, 0) - show_menu(usr) - - if(href_list["dmake"]) - p_type = text2path(href_list["dmake"]) - p_conntype = text2num(href_list["type"]) - p_dir = NORTH - p_class = DISPOSALS_MODE - spark_system.start() - playsound(get_turf(src), 'sound/effects/pop.ogg', 50, 0) - show_menu(usr) - /obj/item/pipe_dispenser/pre_attackby(atom/A, mob/user) if(!user.IsAdvancedToolUser() || istype(A, /turf/open/space/transit)) return ..() - var/atmos_piping_mode = p_class == ATMOS_MODE || p_class == METER_MODE + var/atmos_piping_mode = mode == ATMOS_MODE || mode == METER_MODE var/temp_piping_layer if(atmos_piping_mode) if(istype(A, /obj/machinery/atmospherics)) @@ -569,16 +290,20 @@ GLOBAL_LIST_INIT(disposal_pipe_recipes, list( temp_piping_layer = AM.piping_layer A = get_turf(user) + var/static/list/make_pipe_whitelist + if(!make_pipe_whitelist) + make_pipe_whitelist = list(/obj/structure/lattice, /obj/structure/girder, /obj/item/pipe) + //make sure what we're clicking is valid for the current mode - var/can_make_pipe = ((atmos_piping_mode || p_class == DISPOSALS_MODE) && (isturf(A)) || istype(A, /obj/structure/lattice) || istype(A, /obj/structure/girder)) + var/can_make_pipe = (atmos_piping_mode || mode == DISPOSALS_MODE) && (isturf(A) || is_type_in_list(A, make_pipe_whitelist)) //So that changing the menu settings doesn't affect the pipes already being built. - var/queued_p_type = p_type + var/queued_p_type = recipe.id var/queued_p_dir = p_dir var/queued_p_flipped = p_flipped . = FALSE - switch(p_class) //if we've gotten this var, the target is valid + switch(mode) //if we've gotten this var, the target is valid if(PAINT_MODE) //Paint pipes if(!istype(A, /obj/machinery/atmospherics/pipe)) return ..() @@ -620,6 +345,7 @@ GLOBAL_LIST_INIT(disposal_pipe_recipes, list( P.setPipingLayer(temp_piping_layer) else P.setPipingLayer(piping_layer) + P.add_atom_colour(paint_colors[paint_color], FIXED_COLOUR_PRIORITY) if(METER_MODE) //Making pipe meters if(!can_make_pipe) diff --git a/code/modules/client/asset_cache.dm b/code/modules/client/asset_cache.dm index 7ea6c60000..3704494050 100644 --- a/code/modules/client/asset_cache.dm +++ b/code/modules/client/asset_cache.dm @@ -180,7 +180,7 @@ GLOBAL_LIST_EMPTY(asset_datums) //Generates assets based on iconstates of a single icon /datum/asset/simple/icon_states var/icon - var/direction = SOUTH + var/list/directions = list(SOUTH) var/frame = 1 var/movement_states = FALSE @@ -189,19 +189,26 @@ GLOBAL_LIST_EMPTY(asset_datums) verify = FALSE -/datum/asset/simple/icon_states/register() - for(var/icon_state_name in icon_states(icon)) - var/asset = icon(icon, icon_state_name, direction, frame, movement_states) - if (!asset) - continue - asset = fcopy_rsc(asset) //dedupe - var/asset_name = sanitize_filename("[prefix].[icon_state_name].png") - if (generic_icon_names) - asset_name = "[generate_asset_name(asset)].png" +/datum/asset/simple/icon_states/register(_icon = icon) + for(var/icon_state_name in icon_states(_icon)) + for(var/direction in directions) + var/asset = icon(_icon, icon_state_name, direction, frame, movement_states) + if (!asset) + continue + asset = fcopy_rsc(asset) //dedupe + var/prefix2 = (directions.len > 1) ? "[dir2text(direction)]." : "" + var/asset_name = sanitize_filename("[prefix].[prefix2][icon_state_name].png") + if (generic_icon_names) + asset_name = "[generate_asset_name(asset)].png" - assets[asset_name] = asset + register_asset(asset_name, asset) - ..() +/datum/asset/simple/icon_states/multiple_icons + var/list/icons + +/datum/asset/simple/icon_states/multiple_icons/register() + for(var/i in icons) + ..(i) //DEFINITIONS FOR ASSET DATUMS START HERE. @@ -351,3 +358,17 @@ GLOBAL_LIST_EMPTY(asset_datums) /datum/asset/simple/icon_states/emojis icon = 'icons/emoji.dmi' generic_icon_names = TRUE + +/datum/asset/simple/icon_states/multiple_icons/pipes + icons = list('icons/obj/atmospherics/pipes/pipe_item.dmi', 'icons/obj/atmospherics/pipes/disposal.dmi') + prefix = "pipe" + +/datum/asset/simple/icon_states/multiple_icons/pipes/New() + directions = GLOB.alldirs + ..() + +/datum/asset/simple/icon_states/multiple_icons/pipes/register() + ..() + var/meter = icon('icons/obj/atmospherics/pipes/simple.dmi', "meterX", SOUTH, frame, movement_states) + if(meter) + register_asset(sanitize_filename("[prefix].south.meterX.png"), fcopy_rsc(meter)) diff --git a/tgui/src/interfaces/rpd.ract b/tgui/src/interfaces/rpd.ract new file mode 100644 index 0000000000..68b489e105 --- /dev/null +++ b/tgui/src/interfaces/rpd.ract @@ -0,0 +1,51 @@ + + + +{{#if data.mode >= 0}} + +{{/if}} +{{#if data.mode == -2 || data.mode == 0}} + +{{/if}} + + + Lay Pipes + + + Eat Pipes + + + Paint Pipes + + + + + Atmospherics + Disposals + + {{#if data.screen == 0}} + + 1 + 2 + 3 + + {{/if}} + +{{#each data.categories}} + + {{#each recipes}} + + {{pipe_name}} + + {{/each}} + +{{/each}} diff --git a/tgui/src/interfaces/rpd/colorsel.ract b/tgui/src/interfaces/rpd/colorsel.ract new file mode 100644 index 0000000000..2a91b05ca8 --- /dev/null +++ b/tgui/src/interfaces/rpd/colorsel.ract @@ -0,0 +1,6 @@ + + {{#each data.paint_colors}} + {{color_name}} + {{/each}} + diff --git a/tgui/src/interfaces/rpd/dirsel.ract b/tgui/src/interfaces/rpd/dirsel.ract new file mode 100644 index 0000000000..603910956c --- /dev/null +++ b/tgui/src/interfaces/rpd/dirsel.ract @@ -0,0 +1,10 @@ + + {{#each data.preview_rows}} + + {{#each previews}} + + {{/each}} + + {{/each}} +