mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-19 05:26:28 +00:00
## About The Pull Request Admins can now customize the location, potency and production stats for the space vines event, they can also use the new checkbox input system to select any number of mutations for the vine. Also fixes a bug where random event kudzu was always spawning without mutations. Also adds support for minimum number of options for the checkbox system rather than it being hardcoded to one (0 mutation kudzu support) ## Why It's Good For The Game Space vines was practically begging to have admin customization added to it since its very impractical for admins to make custom kudzu, with this admins can create space vine threats tailored to the round by selecting interesting locations/mutations based on current station circumstances. Also bugfix + dehardcoding a thing. ## Changelog 🆑 admin: Admins can now control the spawn location, potency, production and starting mutations of the space vines event. fix: The space vine event will now correctly give vines mutations when they spawn rather than always being mutation free. code: Checkbox tgui inputs now support setting a minimum number of inputs rather than it being hardcoded to 1. /🆑
133 lines
3.5 KiB
Plaintext
133 lines
3.5 KiB
Plaintext
/**
|
|
* ### tgui_input_checkbox
|
|
* Opens a window with a list of checkboxes and returns a list of selected choices.
|
|
*
|
|
* user - The mob to display the window to
|
|
* message - The message inside the window
|
|
* title - The title of the window
|
|
* list/items - The list of items to display
|
|
* min_checked - The minimum number of checkboxes that must be checked (defaults to 1)
|
|
* max_checked - The maximum number of checkboxes that can be checked (optional)
|
|
* timeout - The timeout for the input (optional)
|
|
*/
|
|
/proc/tgui_input_checkboxes(mob/user, message, title = "Select", list/items, min_checked = 1, max_checked = 50, timeout = 0)
|
|
if (!user)
|
|
user = usr
|
|
if(!length(items))
|
|
return
|
|
if (!istype(user))
|
|
if (istype(user, /client))
|
|
var/client/client = user
|
|
user = client.mob
|
|
else
|
|
return
|
|
if(!user.client.prefs.read_preference(/datum/preference/toggle/tgui_input))
|
|
return input(user, message, title) as null|anything in items
|
|
var/datum/tgui_checkbox_input/input = new(user, message, title, items, min_checked, max_checked, timeout)
|
|
input.ui_interact(user)
|
|
input.wait()
|
|
if (input)
|
|
. = input.choices
|
|
qdel(input)
|
|
|
|
/// Window for tgui_input_checkboxes
|
|
/datum/tgui_checkbox_input
|
|
/// Title of the window
|
|
var/title
|
|
/// Message to display
|
|
var/message
|
|
/// List of items to display
|
|
var/list/items
|
|
/// List of selected items
|
|
var/list/choices
|
|
/// Time when the input was created
|
|
var/start_time
|
|
/// Timeout for the input
|
|
var/timeout
|
|
/// Whether the input was closed
|
|
var/closed
|
|
/// Minimum number of checkboxes that must be checked
|
|
var/min_checked
|
|
/// Maximum number of checkboxes that can be checked
|
|
var/max_checked
|
|
|
|
/datum/tgui_checkbox_input/New(mob/user, message, title, list/items, min_checked, max_checked, timeout)
|
|
src.title = title
|
|
src.message = message
|
|
src.items = items.Copy()
|
|
src.min_checked = min_checked
|
|
src.max_checked = max_checked
|
|
|
|
if (timeout)
|
|
src.timeout = timeout
|
|
start_time = world.time
|
|
QDEL_IN(src, timeout)
|
|
|
|
/datum/tgui_checkbox_input/Destroy(force, ...)
|
|
SStgui.close_uis(src)
|
|
QDEL_NULL(items)
|
|
|
|
return ..()
|
|
|
|
/datum/tgui_checkbox_input/proc/wait()
|
|
while (!closed && !QDELETED(src))
|
|
stoplag(1)
|
|
|
|
/datum/tgui_checkbox_input/ui_interact(mob/user, datum/tgui/ui)
|
|
ui = SStgui.try_update_ui(user, src, ui)
|
|
if(!ui)
|
|
ui = new(user, src, "CheckboxInput")
|
|
ui.open()
|
|
|
|
/datum/tgui_checkbox_input/ui_close(mob/user)
|
|
. = ..()
|
|
closed = TRUE
|
|
|
|
/datum/tgui_checkbox_input/ui_state(mob/user)
|
|
return GLOB.always_state
|
|
|
|
/datum/tgui_checkbox_input/ui_data(mob/user)
|
|
var/list/data = list()
|
|
|
|
if(timeout)
|
|
data["timeout"] = CLAMP01((timeout - (world.time - start_time) - 1 SECONDS) / (timeout - 1 SECONDS))
|
|
|
|
return data
|
|
|
|
/datum/tgui_checkbox_input/ui_static_data(mob/user)
|
|
var/list/data = list()
|
|
|
|
data["items"] = items
|
|
data["min_checked"] = min_checked
|
|
data["max_checked"] = max_checked
|
|
data["large_buttons"] = user.client.prefs.read_preference(/datum/preference/toggle/tgui_input_large)
|
|
data["message"] = message
|
|
data["swapped_buttons"] = user.client.prefs.read_preference(/datum/preference/toggle/tgui_input_swapped)
|
|
data["title"] = title
|
|
|
|
return data
|
|
|
|
/datum/tgui_checkbox_input/ui_act(action, list/params)
|
|
. = ..()
|
|
if (.)
|
|
return
|
|
|
|
switch(action)
|
|
if("submit")
|
|
var/list/selections = params["entry"]
|
|
if(length(selections) >= min_checked && length(selections) <= max_checked)
|
|
set_choices(selections)
|
|
closed = TRUE
|
|
SStgui.close_uis(src)
|
|
return TRUE
|
|
|
|
if("cancel")
|
|
closed = TRUE
|
|
SStgui.close_uis(src)
|
|
return TRUE
|
|
|
|
return FALSE
|
|
|
|
/datum/tgui_checkbox_input/proc/set_choices(list/selections)
|
|
src.choices = selections.Copy()
|