mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-22 20:48:56 +01:00
[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:
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user