mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-11 10:11:09 +00:00
## About The Pull Request The direction component outputs the direction of an entity if it's within 7 tiles of the circuit. Since it already checks the distance, I added distance as one of its outputs. Besides that, I did a pass over the generics and shells and resized many of them. Most I resized to be small or tiny, except for the airlock shell, which I set to be bulky because it's a whole ass door. The shells I didn't touch remain at 'normal' size. 1) All handheld shells set to small, compact remote set to tiny 2) all components and the generic of the circuit set to tiny 3) drone shell set to small 4) airlock shell set to bulky ## Why It's Good For The Game Returning the distance spares any would be circuiteers from having to do a labyrinthine set of calculations to determine distance themselves. Making most circuits more portable makes them more attractive for people to tote around. ## Changelog 🆑 Bisar qol: The 'direction' circuit component now also returns the distance of its target. balance: Most circuit shells and the generic component and generic circuit have had their size reduced. balance: The airlock circuit shell has had its size increased. /🆑 --------- Co-authored-by: Metekillot <ubuntu@ip-172-26-7-23.us-east-2.compute.internal> Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
91 lines
3.0 KiB
Plaintext
91 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 = OVERLAY_LIGHT_DIRECTIONAL
|
|
light_on = FALSE
|
|
w_class = WEIGHT_CLASS_SMALL
|
|
|
|
/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, SFX_KEYBOARD_CLICKS, 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
|
|
|
|
handle_trigger(source, user, "alternate", alt)
|
|
return CLICK_ACTION_SUCCESS
|
|
|
|
|
|
/**
|
|
* 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.can_perform_action(source))
|
|
return
|
|
|
|
handle_trigger(source, user, "extra", right)
|
|
return CLICK_ACTION_SUCCESS
|