From 1f9f31a4dbac78dfbb870ae23ad1069d33d0d7c0 Mon Sep 17 00:00:00 2001 From: Tastyfish Date: Sun, 24 Apr 2022 15:05:54 -0400 Subject: [PATCH] Redoes decal painter UI and adds tile sprayer (#66248) * Redoes decal painter UI and adds tile sprayer * Suggested color palette name changes * remove unused scss filter * prettier formatting of DecalPainter.tsc * added custom colors to tile sprayer * Prettier formatting * Removed needless classes * Autodocs, minor fixes * Did list format and spritesheet commenting suggestions --- code/_globalvars/lists/maintenance_loot.dm | 1 + code/game/objects/items/airlock_painter.dm | 328 ++++++++++++++---- .../research/designs/autolathe_designs.dm | 9 + code/modules/research/techweb/all_nodes.dm | 1 + icons/obj/objects.dmi | Bin 109276 -> 110130 bytes tgui/packages/tgui/interfaces/DecalPainter.js | 65 ---- .../packages/tgui/interfaces/DecalPainter.tsx | 153 ++++++++ 7 files changed, 426 insertions(+), 131 deletions(-) delete mode 100644 tgui/packages/tgui/interfaces/DecalPainter.js create mode 100644 tgui/packages/tgui/interfaces/DecalPainter.tsx diff --git a/code/_globalvars/lists/maintenance_loot.dm b/code/_globalvars/lists/maintenance_loot.dm index 42bfb5e7019..f68208cf3e8 100644 --- a/code/_globalvars/lists/maintenance_loot.dm +++ b/code/_globalvars/lists/maintenance_loot.dm @@ -50,6 +50,7 @@ GLOBAL_LIST_INIT(trash_loot, list(//junk: useless, very easy to get, or ghetto c /obj/item/airlock_painter = 1, /obj/item/airlock_painter/decal = 1, + /obj/item/airlock_painter/decal/tile = 1, /obj/item/clothing/mask/breath = 1, /obj/item/rack_parts = 1, /obj/item/shard = 1, diff --git a/code/game/objects/items/airlock_painter.dm b/code/game/objects/items/airlock_painter.dm index 056830bd41f..a25f570dcda 100644 --- a/code/game/objects/items/airlock_painter.dm +++ b/code/game/objects/items/airlock_painter.dm @@ -1,6 +1,6 @@ /obj/item/airlock_painter name = "airlock painter" - desc = "An advanced autopainter preprogrammed with several paintjobs for airlocks. Use it on an airlock during or after construction to change the paintjob." + desc = "An advanced autopainter preprogrammed with several paintjobs for airlocks. Use it on an airlock during or after construction to change the paintjob. Alt-Click to remove the ink cartridge." icon = 'icons/obj/objects.dmi' icon_state = "paint sprayer" inhand_icon_state = "paint sprayer" @@ -14,7 +14,10 @@ slot_flags = ITEM_SLOT_BELT usesound = 'sound/effects/spray2.ogg' + /// The ink cartridge to pull charges from. var/obj/item/toner/ink = null + /// The type path to instantiate for the ink cartridge the device initially comes with, eg. /obj/item/toner + var/initial_ink_type = /obj/item/toner /// Associate list of all paint jobs the airlock painter can apply. The key is the name of the airlock the user will see. The value is the type path of the airlock var/list/available_paint_jobs = list( "Public" = /obj/machinery/door/airlock/public, @@ -36,7 +39,7 @@ /obj/item/airlock_painter/Initialize(mapload) . = ..() - ink = new /obj/item/toner(src) + ink = new initial_ink_type(src) //This proc doesn't just check if the painter can be used, but also uses it. //Only call this if you are certain that the painter will be used right after this check! @@ -136,7 +139,8 @@ else return ..() -/obj/item/airlock_painter/attack_self(mob/user) +/obj/item/airlock_painter/AltClick(mob/user) + . = ..() if(ink) playsound(src.loc, 'sound/machines/click.ogg', 50, TRUE) ink.forceMove(user.drop_location()) @@ -146,50 +150,101 @@ /obj/item/airlock_painter/decal name = "decal painter" - desc = "An airlock painter, reprogramed to use a different style of paint in order to apply decals for floor tiles as well, in addition to repainting doors. Decals break when the floor tiles are removed. Alt-Click to change design." + desc = "An airlock painter, reprogramed to use a different style of paint in order to apply decals for floor tiles as well, in addition to repainting doors. Decals break when the floor tiles are removed. Alt-Click to remove the ink cartridge." icon = 'icons/obj/objects.dmi' icon_state = "decal_sprayer" inhand_icon_state = "decalsprayer" custom_materials = list(/datum/material/iron=50, /datum/material/glass=50) + initial_ink_type = /obj/item/toner/large + /// The current direction of the decal being printed var/stored_dir = 2 - var/stored_color = "" + /// The current color of the decal being printed. + var/stored_color = "yellow" + /// The current base icon state of the decal being printed. var/stored_decal = "warningline" + /// The full icon state of the decal being printed. var/stored_decal_total = "warningline" - var/color_list = list("","red","white") - var/dir_list = list(1,2,4,8) - var/decal_list = list(list("Warning Line","warningline"), - list("Warning Line Corner","warninglinecorner"), - list("Caution Label","caution"), - list("Directional Arrows","arrows"), - list("Stand Clear Label","stand_clear"), - list("Box","box"), - list("Box Corner","box_corners"), - list("Delivery Marker","delivery"), - list("Warning Box","warn_full")) - -/obj/item/airlock_painter/decal/afterattack(atom/target, mob/user, proximity) - . = ..() - var/turf/open/floor/F = target - if(!proximity) - to_chat(user, span_notice("You need to get closer!")) - return - if(use_paint(user) && isturf(F)) - F.AddElement(/datum/element/decal, 'icons/turf/decals.dmi', stored_decal_total, stored_dir, null, null, alpha, color, null, CLEAN_TYPE_PAINT, null) - -/obj/item/airlock_painter/decal/AltClick(mob/user) - . = ..() - ui_interact(user) + /// The type path of the spritesheet being used for the frontend. + var/spritesheet_type = /datum/asset/spritesheet/decals // spritesheet containing previews + /// Does this printer implementation support custom colors? + var/supports_custom_color = FALSE + /// Current custom color + var/stored_custom_color + /// List of color options as list(user-friendly label, color value to return) + var/color_list = list( + list("Yellow", "yellow"), + list("Red", "red"), + list("White", "white"), + ) + /// List of direction options as list(user-friendly label, dir value to return) + var/dir_list = list( + list("North", NORTH), + list("South", SOUTH), + list("East", EAST), + list("West", WEST), + ) + /// List of decal options as list(user-friendly label, icon state base value to return) + var/decal_list = list( + list("Warning Line", "warningline"), + list("Warning Line Corner", "warninglinecorner"), + list("Caution Label", "caution"), + list("Directional Arrows", "arrows"), + list("Stand Clear Label", "stand_clear"), + list("Bot", "bot"), + list("Box", "box"), + list("Box Corner", "box_corners"), + list("Delivery Marker", "delivery"), + list("Warning Box", "warn_full"), + ) + // These decals only have a south sprite. + var/nondirectional_decals = list( + "bot", + "box", + "delivery", + "warn_full", + ) /obj/item/airlock_painter/decal/Initialize(mapload) . = ..() - ink = new /obj/item/toner/large(src) + stored_custom_color = stored_color + +/obj/item/airlock_painter/decal/afterattack(atom/target, mob/user, proximity) + . = ..() + if(!proximity) + to_chat(user, span_notice("You need to get closer!")) + return + + if(isfloorturf(target) && use_paint(user)) + paint_floor(target) + +/** + * Actually add current decal to the floor. + * + * Responsible for actually adding the element to the turf for maximum flexibility.area + * Can be overriden for different decal behaviors. + * Arguments: + * * target - The turf being painted to +*/ +/obj/item/airlock_painter/decal/proc/paint_floor(turf/open/floor/target) + target.AddElement(/datum/element/decal, 'icons/turf/decals.dmi', stored_decal_total, stored_dir, null, null, alpha, color, null, CLEAN_TYPE_PAINT, null) + +/** + * Return the final icon_state for the given decal options + * + * Arguments: + * * decal - the selected decal base icon state + * * color - the selected color + * * dir - the selected dir + */ +/obj/item/airlock_painter/decal/proc/get_decal_path(decal, color, dir) + // Special case due to icon_state names + if(color == "yellow") + color = "" + + return "[decal][color ? "_" : ""][color]" /obj/item/airlock_painter/decal/proc/update_decal_path() - var/yellow_fix = "" //This will have to do until someone refactor's markings.dm - if (stored_color) - yellow_fix = "_" - stored_decal_total = "[stored_decal][yellow_fix][stored_color]" - return + stored_decal_total = get_decal_path(stored_decal, stored_color, stored_dir) /obj/item/airlock_painter/decal/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) @@ -197,31 +252,45 @@ ui = new(user, src, "DecalPainter", name) ui.open() +/obj/item/airlock_painter/decal/ui_assets(mob/user) + . = ..() + . += get_asset_datum(spritesheet_type) + +/obj/item/airlock_painter/decal/ui_static_data(mob/user) + . = ..() + var/datum/asset/spritesheet/icon_assets = get_asset_datum(spritesheet_type) + + .["icon_prefix"] = "[icon_assets.name]32x32" + .["supports_custom_color"] = supports_custom_color + .["decal_list"] = list() + .["color_list"] = list() + .["dir_list"] = list() + .["nondirectional_decals"] = nondirectional_decals + + for(var/decal in decal_list) + .["decal_list"] += list(list( + "name" = decal[1], + "decal" = decal[2], + )) + for(var/color in color_list) + .["color_list"] += list(list( + "name" = color[1], + "color" = color[2], + )) + for(var/dir in dir_list) + .["dir_list"] += list(list( + "name" = dir[1], + "dir" = dir[2], + )) + /obj/item/airlock_painter/decal/ui_data(mob/user) - var/list/data = list() - data["decal_direction"] = stored_dir - data["decal_color"] = stored_color - data["decal_style"] = stored_decal - data["decal_list"] = list() - data["color_list"] = list() - data["dir_list"] = list() + . = ..() + .["current_decal"] = stored_decal + .["current_color"] = stored_color + .["current_dir"] = stored_dir + .["current_custom_color"] = stored_custom_color - for(var/i in decal_list) - data["decal_list"] += list(list( - "name" = i[1], - "decal" = i[2] - )) - for(var/j in color_list) - data["color_list"] += list(list( - "colors" = j - )) - for(var/k in dir_list) - data["dir_list"] += list(list( - "dirs" = k - )) - return data - -/obj/item/airlock_painter/decal/ui_act(action,list/params) +/obj/item/airlock_painter/decal/ui_act(action, list/params) . = ..() if(.) return @@ -229,21 +298,148 @@ switch(action) //Lists of decals and designs if("select decal") - var/selected_decal = params["decals"] + var/selected_decal = params["decal"] + var/selected_dir = text2num(params["dir"]) stored_decal = selected_decal + stored_dir = selected_dir if("select color") - var/selected_color = params["colors"] + var/selected_color = params["color"] stored_color = selected_color - if("selected direction") - var/selected_direction = text2num(params["dirs"]) - stored_dir = selected_direction + if("pick custom color") + if(supports_custom_color) + pick_painting_tool_color(usr, stored_custom_color) update_decal_path() . = TRUE +/obj/item/airlock_painter/decal/set_painting_tool_color(chosen_color) + . = ..() + stored_custom_color = chosen_color + stored_color = chosen_color + +/datum/asset/spritesheet/decals + name = "floor_decals" + cross_round_cachable = TRUE + + /// The floor icon used for blend_preview_floor() + var/preview_floor_icon = 'icons/turf/floors.dmi' + /// The floor icon state used for blend_preview_floor() + var/preview_floor_state = "floor" + /// The associated decal painter type to grab decals, colors, etc from. + var/obj/item/airlock_painter/decal/painter_type = /obj/item/airlock_painter/decal + +/** + * Underlay an example floor for preview purposes, and return the new icon. + * + * Arguments: + * * decal - the decal to place over the example floor tile + */ +/datum/asset/spritesheet/decals/proc/blend_preview_floor(icon/decal) + var/icon/final = icon(preview_floor_icon, preview_floor_state) + final.Blend(decal, ICON_OVERLAY) + return final + +/** + * Insert a specific state into the spritesheet. + * + * Arguments: + * * decal - the given decal base state. + * * dir - the given direction. + * * color - the given color. + */ +/datum/asset/spritesheet/decals/proc/insert_state(decal, dir, color) + // Special case due to icon_state names + var/icon_state_color = color == "yellow" ? "" : color + + var/icon/final = blend_preview_floor(icon('icons/turf/decals.dmi', "[decal][icon_state_color ? "_" : ""][icon_state_color]", dir)) + Insert("[decal]_[dir]_[color]", final) + +/datum/asset/spritesheet/decals/create_spritesheets() + // Must actually create because initial(type) doesn't work for /lists for some reason. + var/obj/item/airlock_painter/decal/painter = new painter_type() + + for(var/list/decal in painter.decal_list) + for(var/list/dir in painter.dir_list) + for(var/list/color in painter.color_list) + insert_state(decal[2], dir[2], color[2]) + if(painter.supports_custom_color) + insert_state(decal[2], dir[2], "custom") + + qdel(painter) + /obj/item/airlock_painter/decal/debug name = "extreme decal painter" icon_state = "decal_sprayer_ex" + initial_ink_type = /obj/item/toner/extreme -/obj/item/airlock_painter/decal/debug/Initialize(mapload) - . = ..() - ink = new /obj/item/toner/extreme(src) +/obj/item/airlock_painter/decal/tile + name = "tile sprayer" + desc = "An airlock painter, reprogramed to use a different style of paint in order to spray colors on floor tiles as well, in addition to repainting doors. Decals break when the floor tiles are removed. Alt-Click to change design." + icon_state = "tile_sprayer" + stored_dir = 2 + stored_color = "#D4D4D4" + stored_decal = "tile_corner" + spritesheet_type = /datum/asset/spritesheet/decals/tiles + supports_custom_color = TRUE + color_list = list( + list("White", "#D4D4D4"), + list("Black", "#0e0f0f"), + list("Bar Burgundy", "#791500"), + list("Sec Red", "#DE3A3A"), + list("Cargo Brown", "#A46106"), + list("Engi Yellow", "#EFB341"), + list("Service Green", "#9FED58"), + list("Med Blue", "#52B4E9"), + list("R&D Purple", "#D381C9"), + ) + decal_list = list( + list("Corner", "tile_corner"), + list("Half", "tile_half_contrasted"), + list("Opposing Corners", "tile_opposing_corners"), + list("3 Corners", "tile_anticorner_contrasted"), + list("4 Corners", "tile_fourcorners"), + list("Trimline Corner", "trimline_corner_fill"), + list("Trimline Fill", "trimline_fill"), + list("Trimline Fill L", "trimline_fill__8"), // This is a hack that lives in the spritesheet builder and paint_floor + list("Trimline End", "trimline_end_fill"), + list("Trimline Box", "trimline_box_fill"), + ) + nondirectional_decals = list( + "tile_fourcorners", + "trimline_box_fill", + ) + + /// The alpha value to paint the tiles at. The decal mapping helper creates tile overlays at alpha 110. + var/stored_alpha = 110 + +/obj/item/airlock_painter/decal/tile/paint_floor(turf/open/floor/target) + // Account for 8-sided decals. + var/source_decal = stored_decal + var/source_dir = stored_dir + if(copytext(stored_decal, -3) == "__8") + source_decal = splicetext(stored_decal, -3, 0, "") + source_dir = turn(stored_dir, 45) + + target.AddElement(/datum/element/decal, 'icons/turf/decals.dmi', source_decal, source_dir, null, null, stored_alpha, stored_color, null, CLEAN_TYPE_PAINT, null) + +/datum/asset/spritesheet/decals/tiles + name = "floor_tile_decals" + painter_type = /obj/item/airlock_painter/decal/tile + +/datum/asset/spritesheet/decals/tiles/insert_state(decal, dir, color) + // Account for 8-sided decals. + var/source_decal = decal + var/source_dir = dir + if(copytext(decal, -3) == "__8") + source_decal = splicetext(decal, -3, 0, "") + source_dir = turn(dir, 45) + + var/icon/colored_icon = icon('icons/turf/decals.dmi', source_decal, dir=source_dir) + colored_icon.ChangeOpacity(110) + if(color == "custom") + // Do a fun rainbow pattern to stand out while still being static. + colored_icon.Blend(icon('icons/effects/random_spawners.dmi', "rainbow"), ICON_MULTIPLY) + else + colored_icon.Blend(color, ICON_MULTIPLY) + + colored_icon = blend_preview_floor(colored_icon) + Insert("[decal]_[dir]_[replacetext(color, "#", "")]", colored_icon) diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index 547063900ce..19f195231f5 100644 --- a/code/modules/research/designs/autolathe_designs.dm +++ b/code/modules/research/designs/autolathe_designs.dm @@ -265,6 +265,15 @@ category = list("initial","Tools","Tool Designs") departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SERVICE +/datum/design/airlock_painter/decal/tile + name = "Tile Sprayer" + id = "tile_sprayer" + build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE + materials = list(/datum/material/iron = 50, /datum/material/glass = 50) + build_path = /obj/item/airlock_painter/decal/tile + category = list("initial","Tools","Tool Designs") + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SERVICE + /datum/design/emergency_oxygen name = "Emergency Oxygen Tank" id = "emergency_oxygen" diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index beaf00df548..61089634844 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -181,6 +181,7 @@ "spade", "spraycan", "swab", + "tile_sprayer", "tscanner", "welding_helmet", "welding_tool", diff --git a/icons/obj/objects.dmi b/icons/obj/objects.dmi index ee9dd86775104437b1e2c14698ff151d859b1a27..444eeea9c29c4cb966a2dd2b6007d980c5929ac6 100644 GIT binary patch delta 36191 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
  • iP*Hu&voyAXB5jJ)prjWof6|7e#V<{wq;S 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 delta 35299 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 { - const { act, data } = useBackend(context); - const decal_list = data.decal_list || []; - const color_list = data.color_list || []; - const dir_list = data.dir_list || []; - return ( - - -
    - {decal_list.map(decal => ( -
    -
    - {color_list.map(color => { - return ( -
    -
    - {dir_list.map(dir => { - return ( -
    -
    -
    - ); -}; diff --git a/tgui/packages/tgui/interfaces/DecalPainter.tsx b/tgui/packages/tgui/interfaces/DecalPainter.tsx new file mode 100644 index 00000000000..a2d1057302f --- /dev/null +++ b/tgui/packages/tgui/interfaces/DecalPainter.tsx @@ -0,0 +1,153 @@ +import { useBackend } from '../backend'; +import { Button, ColorBox, Flex, Section } from '../components'; +import { Window } from '../layouts'; + +type DecalInfo = { + name: string; + decal: string; +}; + +type ColorInfo = { + name: string; + color: string; +}; + +type DirInfo = { + name: string; + dir: number; +}; + +type DecalPainterData = { + icon_prefix: string; + decal_list: DecalInfo[]; + color_list: ColorInfo[]; + dir_list: DirInfo[]; + nondirectional_decals: string[]; + supports_custom_color: number; + current_decal: string; + current_color: string; + current_dir: number; + current_custom_color: string; +}; + +export const DecalPainter = (props, context) => { + const { act, data } = useBackend(context); + + const custom_color_selected = !data.color_list.some( + (color) => color.color === data.current_color + ); + const supports_custom_color = !!data.supports_custom_color; + + // Handle custom color icon correctly + const preview_color = custom_color_selected ? 'custom' : data.current_color; + + return ( + + +
    + {data.color_list.map((color) => { + return ( + + ); + })} + {supports_custom_color && ( + + )} +
    +
    + + {data.decal_list.map((decal) => { + const nondirectional = data.nondirectional_decals.includes( + decal.decal + ); + + return nondirectional ? ( + // Tallll button for nondirectional + + ) : ( + // 4 buttons for directional + + {data.dir_list.map((dir) => { + const selected + = decal.decal === data.current_decal + && dir.dir === data.current_dir; + + return ( + + ); + })} + + ); + })} + +
    +
    +
    + ); +}; + +type IconButtonParams = { + decal: string; + dir: number; + color: string; + label: string; + selected: boolean; +}; + +const IconButton = (props: IconButtonParams, context) => { + const { act, data } = useBackend(context); + + const generateIconKey = (decal: string, dir: number, color: string) => + `${data.icon_prefix} ${decal}_${dir}_${color.replace('#', '')}`; + + const icon = generateIconKey(props.decal, props.dir, props.color); + + return ( + + ); +};