mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-19 06:03:14 +00:00
* Adds a user type to integrated circuits, refactors the list pick component. (#79412) ## About The Pull Request Added a user type to integrated circuits that can't be stored as a user type but can be typecasted to entity. Useful for components that directly ask for an input from the user, like the list pick component. Refactored the list pick component to use this user port and to also send failure signals whenever a success signal is not sent. Removed the triggered port for the list pick component. Also fixes a runtime that occurs with the list pick component if the list passed in only contains null values. ## Why It's Good For The Game Can't force a prompt onto people who haven't interacted with your circuit. ## Changelog 🆑 add: Added a user type to integrated circuits /🆑 --------- Co-authored-by: Watermelon914 <3052169-Watermelon914@ users.noreply.gitlab.com> * Adds a user type to integrated circuits, refactors the list pick component. --------- Co-authored-by: Watermelon914 <37270891+Watermelon914@users.noreply.github.com> Co-authored-by: Watermelon914 <3052169-Watermelon914@ users.noreply.gitlab.com>
87 lines
3.0 KiB
Plaintext
87 lines
3.0 KiB
Plaintext
/**
|
|
* # Compact Remote
|
|
*
|
|
* A handheld device with several buttons.
|
|
* In game, this translates to having different signals for normal usage, alt-clicking, and ctrl-clicking when in your hand.
|
|
*/
|
|
/obj/item/controller
|
|
name = "controller"
|
|
icon = 'icons/obj/science/circuits.dmi'
|
|
icon_state = "setup_small_calc"
|
|
inhand_icon_state = "electronic"
|
|
worn_icon_state = "electronic"
|
|
lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi'
|
|
righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi'
|
|
light_system = MOVABLE_LIGHT_DIRECTIONAL
|
|
light_on = FALSE
|
|
|
|
/obj/item/controller/Initialize(mapload)
|
|
. = ..()
|
|
AddComponent(/datum/component/shell, list(
|
|
new /obj/item/circuit_component/controller()
|
|
), SHELL_CAPACITY_MEDIUM)
|
|
|
|
/obj/item/circuit_component/controller
|
|
display_name = "Controller"
|
|
desc = "Used to receive inputs from the controller shell. Use the shell in hand to trigger the output signal."
|
|
desc_controls = "Alt-click for the alternate signal. Right click for the extra signal."
|
|
/// The three separate buttons that are called in attack_hand on the shell.
|
|
var/datum/port/output/signal
|
|
var/datum/port/output/alt
|
|
var/datum/port/output/right
|
|
|
|
/// The entity output
|
|
var/datum/port/output/entity
|
|
|
|
/obj/item/circuit_component/controller/populate_ports()
|
|
entity = add_output_port("User", PORT_TYPE_USER)
|
|
signal = add_output_port("Signal", PORT_TYPE_SIGNAL)
|
|
alt = add_output_port("Alternate Signal", PORT_TYPE_SIGNAL)
|
|
right = add_output_port("Extra Signal", PORT_TYPE_SIGNAL)
|
|
|
|
/obj/item/circuit_component/controller/register_shell(atom/movable/shell)
|
|
RegisterSignal(shell, COMSIG_ITEM_ATTACK_SELF, PROC_REF(send_trigger))
|
|
RegisterSignal(shell, COMSIG_CLICK_ALT, PROC_REF(send_alternate_signal))
|
|
RegisterSignal(shell, COMSIG_ITEM_ATTACK_SELF_SECONDARY, PROC_REF(send_right_signal))
|
|
|
|
/obj/item/circuit_component/controller/unregister_shell(atom/movable/shell)
|
|
UnregisterSignal(shell, list(
|
|
COMSIG_ITEM_ATTACK_SELF,
|
|
COMSIG_ITEM_ATTACK_SELF_SECONDARY,
|
|
COMSIG_CLICK_ALT,
|
|
))
|
|
|
|
/obj/item/circuit_component/controller/proc/handle_trigger(atom/source, user, port_name, datum/port/output/port_signal)
|
|
source.balloon_alert(user, "clicked [port_name] button")
|
|
playsound(source, get_sfx(SFX_TERMINAL_TYPE), 25, FALSE)
|
|
entity.set_output(user)
|
|
port_signal.set_output(COMPONENT_SIGNAL)
|
|
|
|
/**
|
|
* Called when the shell item is used in hand
|
|
*/
|
|
/obj/item/circuit_component/controller/proc/send_trigger(atom/source, mob/user)
|
|
SIGNAL_HANDLER
|
|
if(!user.Adjacent(source))
|
|
return
|
|
handle_trigger(source, user, "primary", signal)
|
|
|
|
/**
|
|
* Called when the shell item is alt-clicked
|
|
*/
|
|
/obj/item/circuit_component/controller/proc/send_alternate_signal(atom/source, mob/user)
|
|
SIGNAL_HANDLER
|
|
if(!user.Adjacent(source))
|
|
return
|
|
handle_trigger(source, user, "alternate", alt)
|
|
|
|
|
|
/**
|
|
* Called when the shell item is right-clicked in active hand
|
|
*/
|
|
/obj/item/circuit_component/controller/proc/send_right_signal(atom/source, mob/user)
|
|
SIGNAL_HANDLER
|
|
if(!user.Adjacent(source))
|
|
return
|
|
handle_trigger(source, user, "extra", right)
|