[MIRROR] modsuit update: you can now pin modules to your action buttons [MDB IGNORE] (#10398)

* modsuit update: you can now pin modules to your action buttons (#63745)

* modsuit update: you can now pin modules to your action buttons

Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>
This commit is contained in:
SkyratBot
2022-01-03 00:43:42 +00:00
committed by GitHub
co-authored by Fikou
parent 22fc032db6
commit 7d9aa01e8f
6 changed files with 78 additions and 18 deletions
+46 -12
View File
@@ -27,16 +27,24 @@
return
return ..()
/datum/action/item_action/mod/Trigger()
if(!IsAvailable())
return FALSE
if(mod.malfunctioning && prob(75))
mod.balloon_alert(usr, "button malfunctions!")
return FALSE
return TRUE
/datum/action/item_action/mod/deploy
name = "Deploy MODsuit"
desc = "Deploy/Conceal a part of the MODsuit."
button_icon_state = "deploy"
/datum/action/item_action/mod/deploy/Trigger()
if(!IsAvailable())
return FALSE
. = ..()
if(!.)
return
mod.choose_deploy(usr)
return TRUE
/datum/action/item_action/mod/deploy/ai
ai_action = TRUE
@@ -47,10 +55,10 @@
button_icon_state = "activate"
/datum/action/item_action/mod/activate/Trigger()
if(!IsAvailable())
return FALSE
. = ..()
if(!.)
return
mod.toggle_activate(usr)
return TRUE
/datum/action/item_action/mod/activate/ai
ai_action = TRUE
@@ -61,10 +69,10 @@
button_icon_state = "module"
/datum/action/item_action/mod/module/Trigger()
if(!IsAvailable())
return FALSE
. = ..()
if(!.)
return
mod.quick_module(usr)
return TRUE
/datum/action/item_action/mod/module/ai
ai_action = TRUE
@@ -75,10 +83,36 @@
button_icon_state = "panel"
/datum/action/item_action/mod/panel/Trigger()
if(!IsAvailable())
return FALSE
. = ..()
if(!.)
return
mod.ui_interact(usr)
return TRUE
/datum/action/item_action/mod/panel/ai
ai_action = TRUE
/datum/action/item_action/mod/pinned_module
desc = "Activate the module."
var/obj/item/mod/module/module
var/mob/pinner
/datum/action/item_action/mod/pinned_module/New(Target, obj/item/mod/module/linked_module, mob/user)
if(user == mod.ai)
ai_action = TRUE
..()
module = linked_module
name = "Activate [capitalize(linked_module.name)]"
icon_icon = linked_module.icon
button_icon_state = linked_module.icon_state
pinner = user
/datum/action/item_action/mod/pinned_module/Grant(mob/user)
if(user != pinner)
return
return ..()
/datum/action/item_action/mod/pinned_module/Trigger()
. = ..()
if(!.)
return
module.on_select()
+1
View File
@@ -183,6 +183,7 @@
helmet.alternate_worn_layer = helmet.alternate_layer
wearer.update_inv_head()
wearer.update_inv_wear_mask()
wearer.update_inv_glasses()
wearer.update_hair()
/// Finishes the suit's activation, starts processing
+3 -4
View File
@@ -244,17 +244,16 @@
return TRUE
/obj/item/mod/control/allow_attack_hand_drop(mob/user)
var/mob/living/carbon/carbon_user = user
if(!istype(carbon_user) || src != carbon_user.back)
if(user != wearer)
return ..()
for(var/obj/item/part in mod_parts)
if(part.loc != src)
balloon_alert(carbon_user, "retract parts first!")
balloon_alert(user, "retract parts first!")
playsound(src, 'sound/machines/scanbuzz.ogg', 25, FALSE, SILENCED_SOUND_EXTRARANGE)
return FALSE
/obj/item/mod/control/MouseDrop(atom/over_object)
if(src != wearer?.back || !istype(over_object, /atom/movable/screen/inventory/hand))
if(usr != wearer || !istype(over_object, /atom/movable/screen/inventory/hand))
return ..()
for(var/obj/item/part in mod_parts)
if(part.loc != src)
+7 -1
View File
@@ -4,7 +4,7 @@
ui = new(user, src, "MODsuit", name)
ui.open()
/obj/item/mod/control/ui_data()
/obj/item/mod/control/ui_data(mob/user)
var/data = list()
data["interface_break"] = interface_break
data["malfunctioning"] = malfunctioning
@@ -25,6 +25,7 @@
description = module.desc,
module_type = module.module_type,
active = module.active,
pinned = module.pinned_to[user],
idle_power = module.idle_power_cost,
active_power = module.active_power_cost,
use_power = module.use_power_cost,
@@ -77,4 +78,9 @@
if(!module)
return
module.configure_edit(params["key"], params["value"])
if("pin")
var/obj/item/mod/module/module = locate(params["ref"]) in modules
if(!module)
return
module.pin(usr)
return TRUE
+13
View File
@@ -33,6 +33,8 @@
var/cooldown_time = 0
/// The mouse button needed to use this module
var/used_signal
/// List of mobs we are pinned to, linked with their action buttons
var/list/pinned_to = list()
/// Timer for the cooldown
COOLDOWN_DECLARE(cooldown_timer)
@@ -250,3 +252,14 @@
if(ALT_CLICK)
mod.selected_module.used_signal = COMSIG_MOB_ALTCLICKON
RegisterSignal(mod.wearer, mod.selected_module.used_signal, /obj/item/mod/module.proc/on_special_click)
/// Pins the module to the user's action buttons
/obj/item/mod/module/proc/pin(mob/user)
var/datum/action/item_action/mod/pinned_module/action = pinned_to[user]
if(action)
qdel(action)
pinned_to[user] = null
else
action = new(mod, src, user)
action.Grant(user)
pinned_to[user] = action
+8 -1
View File
@@ -446,11 +446,18 @@ const ModuleSection = (props, context) => {
disabled={!module.module_type} />
<Button
onClick={() => setConfigureState(module.ref)}
selected={configureState === module.ref}
icon="cog"
selected={configureState === module.ref}
tooltip="Configure"
tooltipPosition="left"
disabled={module.configuration_data.length === 0} />
<Button
onClick={() => act('pin', { "ref": module.ref })}
icon="thumbtack"
selected={module.pinned}
tooltip="Pin"
tooltipPosition="left"
disabled={!module.module_type} />
</Table.Cell>
</Table.Row>
</Table>