mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-18 05:32:58 +00:00
[MIRROR] Adds admin input requests circuit component (#8228)
* Adds admin input requests circuit component (#61403) Co-authored-by: Watermelon914 <3052169-Watermelon914@ users.noreply.gitlab.com> * Adds admin input requests circuit component Co-authored-by: Watermelon914 <37270891+Watermelon914@users.noreply.github.com> Co-authored-by: Watermelon914 <3052169-Watermelon914@ users.noreply.gitlab.com>
This commit is contained in:
101
code/modules/wiremod/components/admin/input_request.dm
Normal file
101
code/modules/wiremod/components/admin/input_request.dm
Normal file
@@ -0,0 +1,101 @@
|
||||
#define COMP_INPUT_STRING "string"
|
||||
#define COMP_INPUT_NUMBER "number"
|
||||
#define COMP_INPUT_LIST "list"
|
||||
|
||||
/**
|
||||
* # Input Request Component
|
||||
*
|
||||
* Requests an input from someone.
|
||||
*/
|
||||
/obj/item/circuit_component/input_request
|
||||
display_name = "Input Request"
|
||||
desc = "Converts a string into a typepath. Useful for adding components."
|
||||
circuit_flags = CIRCUIT_FLAG_INPUT_SIGNAL|CIRCUIT_FLAG_ADMIN
|
||||
|
||||
/// Options for input requests
|
||||
var/datum/port/input/option/input_options
|
||||
|
||||
/// The input path to convert into a typepath
|
||||
var/datum/port/input/entity
|
||||
|
||||
/// The custom parameter of the option
|
||||
var/datum/port/input/parameter
|
||||
|
||||
/// The response from the player
|
||||
var/datum/port/output/input_response
|
||||
|
||||
/// Triggered when the input is received
|
||||
var/datum/port/output/input_triggered
|
||||
|
||||
/// Triggered when the player fails to give an input.
|
||||
var/datum/port/output/input_failed
|
||||
|
||||
/obj/item/circuit_component/input_request/populate_options()
|
||||
var/static/list/component_options = list(
|
||||
COMP_INPUT_STRING,
|
||||
COMP_INPUT_NUMBER,
|
||||
COMP_INPUT_LIST
|
||||
)
|
||||
|
||||
input_options = add_option_port("Option", component_options)
|
||||
|
||||
/obj/item/circuit_component/input_request/populate_ports()
|
||||
entity = add_input_port("Entity", PORT_TYPE_ATOM)
|
||||
input_response = add_output_port("Response", PORT_TYPE_ANY)
|
||||
input_triggered = add_output_port("Input Sent", PORT_TYPE_SIGNAL)
|
||||
input_failed = add_output_port("Input Failed", PORT_TYPE_SIGNAL)
|
||||
|
||||
update_options()
|
||||
|
||||
/obj/item/circuit_component/input_request/input_received(datum/port/input/port)
|
||||
var/mob/player = entity.value
|
||||
if(!istype(player))
|
||||
return
|
||||
|
||||
INVOKE_ASYNC(src, .proc/request_input_from_player, player)
|
||||
|
||||
/obj/item/circuit_component/input_request/proc/request_input_from_player(mob/player)
|
||||
var/new_option = input_options.value
|
||||
switch(new_option)
|
||||
if(COMP_INPUT_STRING)
|
||||
var/player_input = input(player, "Input a value", "Input value") as null|text
|
||||
if(!player_input)
|
||||
return
|
||||
input_response.set_output(player_input)
|
||||
if(COMP_INPUT_NUMBER)
|
||||
var/player_input = input(player, "Input a value", "Input value") as null|num
|
||||
if(!player_input)
|
||||
return
|
||||
input_response.set_output(player_input)
|
||||
if(COMP_INPUT_LIST)
|
||||
var/list/data = parameter.value
|
||||
if(!islist(data))
|
||||
return
|
||||
var/player_input = input(player, "Input a value", "Input value") as null|anything in data
|
||||
if(!player_input)
|
||||
return
|
||||
input_response.set_output(player_input)
|
||||
input_triggered.set_output(COMPONENT_SIGNAL)
|
||||
|
||||
/obj/item/circuit_component/input_request/pre_input_received(datum/port/input/port)
|
||||
if(port == input_options)
|
||||
update_options(port)
|
||||
|
||||
/obj/item/circuit_component/input_request/proc/update_options(datum/port/input/port)
|
||||
var/new_option = input_options.value
|
||||
if(parameter)
|
||||
remove_input_port(parameter)
|
||||
parameter = null
|
||||
|
||||
switch(new_option)
|
||||
if(COMP_INPUT_STRING)
|
||||
input_response.set_datatype(PORT_TYPE_STRING)
|
||||
if(COMP_INPUT_NUMBER)
|
||||
input_response.set_datatype(PORT_TYPE_NUMBER)
|
||||
if(COMP_INPUT_LIST)
|
||||
parameter = add_input_port("Options List", PORT_TYPE_LIST)
|
||||
input_response.set_datatype(PORT_TYPE_STRING)
|
||||
|
||||
#undef COMP_INPUT_STRING
|
||||
#undef COMP_INPUT_NUMBER
|
||||
#undef COMP_INPUT_LIST
|
||||
Reference in New Issue
Block a user