From f989a015ef538bcc5316ac8f646c6ed58d823b12 Mon Sep 17 00:00:00 2001 From: Enric Gabriel <43283559+SandPoot@users.noreply.github.com> Date: Mon, 6 Jul 2020 19:19:54 -0300 Subject: [PATCH] Replaces decal painter menu with a radial menu (#21) * the changes * meh, doesn't work, and i already did enough stuff * little mistake --- code/game/objects/items/airlock_painter.dm | 70 +++------ .../game/objects/items/airlock_painter.dm | 142 ++++++++++++++++++ tgstation.dme | 1 + 3 files changed, 162 insertions(+), 51 deletions(-) create mode 100644 sandcode/code/game/objects/items/airlock_painter.dm diff --git a/code/game/objects/items/airlock_painter.dm b/code/game/objects/items/airlock_painter.dm index c9a31a48c2..0d1a8ba78d 100644 --- a/code/game/objects/items/airlock_painter.dm +++ b/code/game/objects/items/airlock_painter.dm @@ -140,7 +140,8 @@ 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"), + var/decal_list = list( + list("Warning Line","warningline"), list("Warning Line Corner","warninglinecorner"), list("Caution Label","caution"), list("Directional Arrows","arrows"), @@ -165,9 +166,23 @@ return . = ..() -/obj/item/airlock_painter/decal/AltClick(mob/user) +/obj/item/airlock_painter/decal/AltClick(mob/user) //sandstorm change - everything that makes this work is on same path to this but on sandcode . = ..() - ui_interact(user) + var/decal_category = list( + "Decal" = image(icon = 'icons/turf/decals.dmi', icon_state = "[stored_decal]", dir = stored_dir), + "Color" = image(icon = 'icons/obj/crayons.dmi', icon_state = "crayonred"), + "Dir" = image(icon = 'icons/obj/device.dmi', icon_state = "pinonfar", dir = stored_dir) + ) + var/cat_chosen = show_radial_menu(user,src,decal_category, custom_check = CALLBACK(src,.proc/check_menu,user), require_near = TRUE, tooltips = TRUE) + if(!check_menu(user)) + return + switch(cat_chosen) + if("Decal") + choose_decal(user) + if("Color") + choose_color(user) + if("Dir") + choose_dir(user) /obj/item/airlock_painter/decal/Initialize() . = ..() @@ -180,57 +195,10 @@ stored_decal_total = "[stored_decal][yellow_fix][stored_color]" return -/obj/item/airlock_painter/decal/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, 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) - ui = new(user, src, ui_key, "decal_painter", name, 500, 400, master_ui, state) - ui.open() - -/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() - - 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) - if(..()) - return - switch(action) - //Lists of decals and designs - if("select decal") - var/selected_decal = params["decals"] - stored_decal = selected_decal - if("select color") - var/selected_color = params["colors"] - stored_color = selected_color - if("selected direction") - var/selected_direction = text2num(params["dirs"]) - stored_dir = selected_direction - update_decal_path() - . = TRUE - /obj/item/airlock_painter/decal/debug name = "extreme decal painter" icon_state = "decal_sprayer_ex" /obj/item/airlock_painter/decal/debug/Initialize() . = ..() - ink = new /obj/item/toner/extreme(src) \ No newline at end of file + ink = new /obj/item/toner/extreme(src) diff --git a/sandcode/code/game/objects/items/airlock_painter.dm b/sandcode/code/game/objects/items/airlock_painter.dm new file mode 100644 index 0000000000..1310f213b2 --- /dev/null +++ b/sandcode/code/game/objects/items/airlock_painter.dm @@ -0,0 +1,142 @@ + +/obj/item/airlock_painter/decal/proc/check_menu(mob/living/user) + if(!istype(user)) + return FALSE + if(user.incapacitated() || !user.Adjacent(src)) + return FALSE + return TRUE + +/obj/item/airlock_painter/decal/proc/choose_decal(user) + var/decal_list_img = list( + "Warning Line" = image(icon = 'icons/turf/decals.dmi', icon_state = "warningline", dir = stored_dir), + "Warning Line Corner" = image(icon = 'icons/turf/decals.dmi', icon_state = "warninglinecorner", dir = stored_dir), + "Caution Label" = image(icon = 'icons/turf/decals.dmi', icon_state = "caution", dir = stored_dir), + "Directional Arrows" = image(icon = 'icons/turf/decals.dmi', icon_state = "arrows", dir = stored_dir), + "Stand Clear Label" = image(icon = 'icons/turf/decals.dmi', icon_state = "stand_clear", dir = stored_dir), + "Box" = image(icon = 'icons/turf/decals.dmi', icon_state = "box", dir = stored_dir), + "Box Corner" = image(icon = 'icons/turf/decals.dmi', icon_state = "box_corners", dir = stored_dir), + "Delivery Marker" = image(icon = 'icons/turf/decals.dmi', icon_state = "delivery", dir = stored_dir), + "Warning Box" = image(icon = 'icons/turf/decals.dmi', icon_state = "warn_full", dir = stored_dir) + ) + var/choice = show_radial_menu(user,src,decal_list_img, custom_check = CALLBACK(src,.proc/check_menu,user), require_near = TRUE, tooltips = TRUE) + if(!check_menu(user)) + return + switch(choice) + if("Warning Line") + var/picked_decal = decal_list[1] + stored_decal = picked_decal[2] + playsound(src, 'sound/effects/pop.ogg', 50, 0) + to_chat(user, "You change [src] decal to '[choice]'.") + update_decal_path() + if("Warning Line Corner") + var/picked_decal = decal_list[2] + stored_decal = picked_decal[2] + playsound(src, 'sound/effects/pop.ogg', 50, 0) + to_chat(user, "You change [src] decal to '[choice]'.") + update_decal_path() + if("Caution Label") + var/picked_decal = decal_list[3] + stored_decal = picked_decal[2] + playsound(src, 'sound/effects/pop.ogg', 50, 0) + to_chat(user, "You change [src] decal to '[choice]'.") + update_decal_path() + if("Directional Arrows") + var/picked_decal = decal_list[4] + stored_decal = picked_decal[2] + playsound(src, 'sound/effects/pop.ogg', 50, 0) + to_chat(user, "You change [src] decal to '[choice]'.") + update_decal_path() + if("Stand Clear Label") + var/picked_decal = decal_list[5] + stored_decal = picked_decal[2] + playsound(src, 'sound/effects/pop.ogg', 50, 0) + to_chat(user, "You change [src] decal to '[choice]'.") + update_decal_path() + if("Box") + var/picked_decal = decal_list[6] + stored_decal = picked_decal[2] + playsound(src, 'sound/effects/pop.ogg', 50, 0) + to_chat(user, "You change [src] decal to '[choice]'.") + update_decal_path() + if("Box Corner") + var/picked_decal = decal_list[7] + stored_decal = picked_decal[2] + playsound(src, 'sound/effects/pop.ogg', 50, 0) + to_chat(user, "You change [src] decal to '[choice]'.") + update_decal_path() + if("Delivery Marker") + var/picked_decal = decal_list[8] + stored_decal = picked_decal[2] + playsound(src, 'sound/effects/pop.ogg', 50, 0) + to_chat(user, "You change [src] decal to '[choice]'.") + update_decal_path() + if("Warning Box") + var/picked_decal = decal_list[9] + stored_decal = picked_decal[2] + playsound(src, 'sound/effects/pop.ogg', 50, 0) + to_chat(user, "You change [src] decal to '[choice]'.") + update_decal_path() + else + to_chat(user, "You decided not to change the decal.") + +/obj/item/airlock_painter/decal/proc/choose_color(user) + var/choose_color = list( + "Disable" = image(icon = 'icons/turf/decals.dmi', icon_state = "[stored_decal]", dir = stored_dir), + "Red" = image(icon = 'icons/obj/crayons.dmi', icon_state = "crayonred"), + "White" = image(icon = 'icons/obj/crayons.dmi', icon_state = "crayonwhite") + ) + var/choice = show_radial_menu(user,src,choose_color, custom_check = CALLBACK(src,.proc/check_menu,user), require_near = TRUE, tooltips = TRUE) + if(!check_menu(user)) + return + switch(choice) + if("Disable") + stored_color = color_list[1] + playsound(src, 'sound/effects/pop.ogg', 50, 0) + to_chat(user, "You disable [src]'s painter.") + update_decal_path() + if("Red") + stored_color = color_list[2] + playsound(src, 'sound/effects/pop.ogg', 50, 0) + to_chat(user, "You change [src] color to '[choice]'.") + update_decal_path() + if("White") + stored_color = color_list[3] + playsound(src, 'sound/effects/pop.ogg', 50, 0) + to_chat(user, "You change [src] color to '[choice]'.") + update_decal_path() + else + to_chat(user, "You decided not to change the color.") + +/obj/item/airlock_painter/decal/proc/choose_dir(user) + var/choose_dir = list( + "North" = image(icon = 'icons/turf/decals.dmi', icon_state = "[stored_decal]", dir = 1), + "East" = image(icon = 'icons/turf/decals.dmi', icon_state = "[stored_decal]", dir = 4), + "South" = image(icon = 'icons/turf/decals.dmi', icon_state = "[stored_decal]", dir = 2), + "West" = image(icon = 'icons/turf/decals.dmi', icon_state = "[stored_decal]", dir = 8) + ) + var/choice = show_radial_menu(user,src,choose_dir, custom_check = CALLBACK(src,.proc/check_menu,user), require_near = TRUE, tooltips = TRUE) + if(!check_menu(user)) + return + switch(choice) + if("North") + stored_dir = dir_list[1] + playsound(src, 'sound/effects/pop.ogg', 50, 0) + to_chat(user, "You change [src] direction to '[choice]'.") + update_decal_path() + if("South") + stored_dir = dir_list[2] + playsound(src, 'sound/effects/pop.ogg', 50, 0) + to_chat(user, "You change [src] direction to '[choice]'.") + update_decal_path() + if("East") + stored_dir = dir_list[3] + playsound(src, 'sound/effects/pop.ogg', 50, 0) + to_chat(user, "You change [src] direction to '[choice]'.") + update_decal_path() + if("West") + stored_dir = dir_list[4] + playsound(src, 'sound/effects/pop.ogg', 50, 0) + to_chat(user, "You change [src] direction to '[choice]'.") + update_decal_path() + else + to_chat(user, "You decided not to change the direction.") diff --git a/tgstation.dme b/tgstation.dme index c291654f82..84303ef470 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3502,6 +3502,7 @@ #include "sandcode\code\game\machinery\pipe\construction.dm" #include "sandcode\code\game\mecha\mech_fabricator.dm" #include "sandcode\code\game\objects\effects\contraband.dm" +#include "sandcode\code\game\objects\items\airlock_painter.dm" #include "sandcode\code\game\objects\items\BSRPD.dm" #include "sandcode\code\game\objects\items\cards_ids.dm" #include "sandcode\code\game\objects\items\circuitboards\computer_circuitboards.dm"