mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-29 15:08:34 +01:00
Add Multishock integration (#17766)
* Add Multishock integration * Add a note about etiquitte * Little fix to the vore panel
This commit is contained in:
@@ -253,6 +253,7 @@
|
||||
|
||||
// Instantiate tgui panel
|
||||
tgui_say = new(src, "tgui_say")
|
||||
tgui_shocker = new(src, "tgui_shock")
|
||||
initialize_commandbar_spy()
|
||||
tgui_panel = new(src, "browseroutput")
|
||||
|
||||
@@ -302,6 +303,7 @@
|
||||
|
||||
// Initialize tgui panel
|
||||
tgui_say.initialize()
|
||||
tgui_shocker.initialize()
|
||||
|
||||
connection_time = world.time
|
||||
connection_realtime = world.realtime
|
||||
|
||||
@@ -0,0 +1,149 @@
|
||||
/client/var/datum/tgui_shock/tgui_shocker
|
||||
|
||||
/client/verb/configure_shocker()
|
||||
set name = "Configure MultiShock Integration"
|
||||
set category = "OOC.Game Settings"
|
||||
|
||||
if(tgui_shocker)
|
||||
tgui_shocker.tgui_interact(mob)
|
||||
|
||||
/mob/proc/attempt_multishock(flag)
|
||||
client?.attempt_multishock(flag)
|
||||
|
||||
/client/proc/attempt_multishock(flag)
|
||||
tgui_shocker?.shock(flag)
|
||||
|
||||
// NOTE: This datum controls TWO UIs, `window` is hidden and provides all of the WebSocket shit, `tgui_interact` is a
|
||||
// normal configuration UI!
|
||||
/datum/tgui_shock
|
||||
/// The user who opened the window
|
||||
var/client/client
|
||||
/// The modal window
|
||||
var/datum/tgui_window/window
|
||||
|
||||
var/port = 8765
|
||||
var/enabled_flags = 0
|
||||
var/intensity = 15
|
||||
var/duration = 1
|
||||
|
||||
var/connected = FALSE
|
||||
var/selected_device = -1
|
||||
var/list/available_devices
|
||||
|
||||
//////////////////////////////////////////
|
||||
// SHOCK.JS UI //
|
||||
//////////////////////////////////////////
|
||||
/datum/tgui_shock/New(client/client, id)
|
||||
src.client = client
|
||||
window = new(client, id)
|
||||
window.subscribe(src, PROC_REF(on_message))
|
||||
window.is_browser = TRUE
|
||||
|
||||
/datum/tgui_shock/proc/initialize()
|
||||
set waitfor = FALSE
|
||||
window.initialize(
|
||||
inline_js = file2text('html/shock.js')
|
||||
)
|
||||
|
||||
/datum/tgui_shock/proc/connect()
|
||||
window.send_message("connect", list(
|
||||
"port" = port,
|
||||
))
|
||||
|
||||
/datum/tgui_shock/proc/request_devices()
|
||||
if(!connected)
|
||||
return
|
||||
window.send_message("enumerateShockers")
|
||||
|
||||
/datum/tgui_shock/proc/shock(flag)
|
||||
if(!connected || !selected_device)
|
||||
return
|
||||
|
||||
if(flag != SHOCKFLAG_TEST)
|
||||
if(!(enabled_flags & flag))
|
||||
return
|
||||
|
||||
window.send_message("shock", list(
|
||||
"intensity" = intensity,
|
||||
"duration" = duration,
|
||||
"shocker_ids" = list(
|
||||
selected_device
|
||||
),
|
||||
"warning" = FALSE,
|
||||
))
|
||||
|
||||
/datum/tgui_shock/proc/estop()
|
||||
window.send_message("estop")
|
||||
|
||||
/datum/tgui_shock/proc/on_message(type, payload, href_list)
|
||||
if(type == "connected")
|
||||
connected = TRUE
|
||||
else if(type == "disconnected")
|
||||
connected = FALSE
|
||||
else if(type == "error")
|
||||
connected = FALSE
|
||||
log_debug("WebSocket Error [json_encode(payload)]")
|
||||
else if(type == "incomingMessage")
|
||||
if(payload["lastCall"] == "get_devices")
|
||||
available_devices = json_decode(payload["data"])
|
||||
|
||||
//////////////////////////////////////////
|
||||
// TGUI //
|
||||
//////////////////////////////////////////
|
||||
/datum/tgui_shock/tgui_state(mob/user)
|
||||
return GLOB.tgui_always_state
|
||||
|
||||
/datum/tgui_shock/tgui_interact(mob/user, datum/tgui/ui, datum/tgui/parent_ui, custom_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui)
|
||||
if(!ui)
|
||||
ui = new(user, src, "ShockConfigurator", "Shock Configurator")
|
||||
ui.open()
|
||||
|
||||
/datum/tgui_shock/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state)
|
||||
var/list/data = ..()
|
||||
|
||||
data["port"] = port
|
||||
data["connected"] = connected
|
||||
data["intensity"] = intensity
|
||||
data["duration"] = duration
|
||||
data["selectedDevice"] = selected_device
|
||||
data["availableDevices"] = available_devices
|
||||
data["enabledFlags"] = enabled_flags
|
||||
|
||||
return data
|
||||
|
||||
/datum/tgui_shock/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state)
|
||||
. = ..()
|
||||
|
||||
switch(action)
|
||||
if("connect")
|
||||
if(connected)
|
||||
estop()
|
||||
else
|
||||
// TODO: preferences
|
||||
connect()
|
||||
. = TRUE
|
||||
if("request_devices")
|
||||
request_devices()
|
||||
. = TRUE
|
||||
if("estop")
|
||||
estop()
|
||||
. = TRUE
|
||||
if("setSelectedDevice")
|
||||
selected_device = text2num(params["device"])
|
||||
. = TRUE
|
||||
if("test")
|
||||
shock(SHOCKFLAG_TEST)
|
||||
. = TRUE
|
||||
if("set_flag")
|
||||
enabled_flags ^= text2num(params["flag"])
|
||||
. = TRUE
|
||||
if("port")
|
||||
port = text2num(params["port"])
|
||||
. = TRUE
|
||||
if("intensity")
|
||||
intensity = text2num(params["intensity"])
|
||||
. = TRUE
|
||||
if("duration")
|
||||
duration = text2num(params["duration"])
|
||||
. = TRUE
|
||||
Reference in New Issue
Block a user