diff --git a/code/game/objects/items/weapons/rpd.dm b/code/game/objects/items/weapons/rpd.dm index 63a3ffef0c5..4381c4295c7 100644 --- a/code/game/objects/items/weapons/rpd.dm +++ b/code/game/objects/items/weapons/rpd.dm @@ -4,6 +4,9 @@ #define RPD_COOLDOWN_TIME 4 //How long should we have to wait between dispensing pipes? #define RPD_WALLBUILD_TIME 40 //How long should drilling into a wall take? +#define RPD_MENU_ROTATE "Rotate pipes" //Stuff for radial menu +#define RPD_MENU_FLIP "Flip pipes" //Stuff for radial menu +#define RPD_MENU_DELETE "Delete pipes" //Stuff for radial menu /obj/item/rpd name = "rapid pipe dispenser" @@ -172,6 +175,9 @@ var/list/pipemenu = list( ui.open() ui.set_auto_update(1) +/obj/item/rpd/AltClick(mob/user) + radial_menu(user) + /obj/item/rpd/ui_data(mob/user, ui_key = "main", datum/topic_state/state = inventory_state) var/data[0] data["iconrotation"] = iconrotation @@ -200,6 +206,44 @@ var/list/pipemenu = list( return SSnanoui.update_uis(src) +//RPD radial menu + +/obj/item/rpd/proc/check_menu(mob/living/user) + if(!istype(user)) + return + if(user.incapacitated()) + return + if(loc != user) + return + return TRUE + +/obj/item/rpd/proc/radial_menu(mob/user) + if(!check_menu(user)) + to_chat(user, "You can't do that right now!") + return + var/list/choices = list( + RPD_MENU_ROTATE = image(icon = 'icons/obj/interface.dmi', icon_state = "rpd_rotate"), + RPD_MENU_FLIP = image(icon = 'icons/obj/interface.dmi', icon_state = "rpd_flip"), + RPD_MENU_DELETE = image(icon = 'icons/obj/interface.dmi', icon_state = "rpd_delete"), + "UI" = image(icon = 'icons/obj/interface.dmi', icon_state = "ui_interact") + ) + var/selected_mode = show_radial_menu(user, src, choices, custom_check = CALLBACK(src, .proc/check_menu, user)) + if(!check_menu(user)) + return + if(selected_mode == "UI") + ui_interact(user) + else + switch(selected_mode) + if(RPD_MENU_ROTATE) + mode = RPD_ROTATE_MODE + if(RPD_MENU_FLIP) + mode = RPD_FLIP_MODE + if(RPD_MENU_DELETE) + mode = RPD_DELETE_MODE + else + return //Either nothing was selected, or an invalid mode was selected + to_chat(user, "You set [src]'s mode.") + /obj/item/rpd/afterattack(atom/target, mob/user, proximity) ..() if(loc != user) @@ -236,3 +280,6 @@ var/list/pipemenu = list( #undef RPD_COOLDOWN_TIME #undef RPD_WALLBUILD_TIME +#undef RPD_MENU_ROTATE +#undef RPD_MENU_FLIP +#undef RPD_MENU_DELETE diff --git a/icons/obj/interface.dmi b/icons/obj/interface.dmi index 3b64561d5e0..631bba214c8 100644 Binary files a/icons/obj/interface.dmi and b/icons/obj/interface.dmi differ