mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-26 13:37:58 +01:00
[TGUI] Loadout (#27026)
* [TGUI] Loadout * Loadout Tweaks * Cleanup * Almost there * Allow to sort alphabetical * UX tweaks * Note and remove tweaks from scarf * Oh fuck * Ooops * Sorting features * Global search * Rebuild * Sure * Rebuildo and some review changes * TGUI REBUILDO! --------- Co-authored-by: ROdenFL <ROdenFL@yandex.ru> Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com>
This commit is contained in:
@@ -1,5 +1,10 @@
|
||||
/datum/gear_tweak/proc/get_contents(metadata)
|
||||
return
|
||||
/datum/gear_tweak
|
||||
/// Displayed in TGUI name
|
||||
var/display_type
|
||||
/// Font Awesome icon
|
||||
var/fa_icon
|
||||
/// Explains what is this do in TGUI tooltip
|
||||
var/info
|
||||
|
||||
/datum/gear_tweak/proc/get_metadata(user, metadata)
|
||||
return
|
||||
@@ -10,102 +15,51 @@
|
||||
/datum/gear_tweak/proc/tweak_gear_data(metadata, datum/gear_data)
|
||||
return
|
||||
|
||||
/datum/gear_tweak/proc/tweak_item(obj/item/I, metadata)
|
||||
/datum/gear_tweak/proc/tweak_item(obj/item/gear, metadata)
|
||||
return
|
||||
|
||||
/*
|
||||
* Color adjustment
|
||||
*/
|
||||
|
||||
// MARK: Color
|
||||
/datum/gear_tweak/color
|
||||
display_type = "Color"
|
||||
fa_icon = "palette"
|
||||
info = "Recolorable"
|
||||
var/list/valid_colors
|
||||
|
||||
/datum/gear_tweak/color/New(list/colors)
|
||||
valid_colors = colors
|
||||
..()
|
||||
|
||||
/datum/gear_tweak/color/get_contents(metadata)
|
||||
return "Color: <font color='[metadata]'>⚫</font>"
|
||||
|
||||
/datum/gear_tweak/color/get_default()
|
||||
return valid_colors ? valid_colors[1] : COLOR_GRAY
|
||||
|
||||
/datum/gear_tweak/color/get_metadata(user, metadata)
|
||||
if(valid_colors)
|
||||
return input(user, "Choose an item color.", "Character Preference", metadata) as null|anything in valid_colors
|
||||
return tgui_input_list(user, "Choose an item color.", "Recolor Gear", valid_colors, metadata)
|
||||
return tgui_input_color(user, "Choose an item color.", "Global Preference", metadata)
|
||||
|
||||
/datum/gear_tweak/color/tweak_item(obj/item/I, metadata)
|
||||
if(valid_colors && !(metadata in valid_colors))
|
||||
/datum/gear_tweak/color/tweak_item(obj/item/gear, metadata)
|
||||
if((valid_colors && !(metadata in valid_colors)) || !metadata)
|
||||
return
|
||||
I.color = metadata
|
||||
|
||||
/*
|
||||
* Path adjustment
|
||||
*/
|
||||
gear.color = metadata
|
||||
|
||||
/datum/gear_tweak/path
|
||||
var/list/valid_paths
|
||||
// MARK: Rename
|
||||
/datum/gear_tweak/rename
|
||||
display_type = "Name"
|
||||
fa_icon = "edit"
|
||||
info = "Renameable"
|
||||
|
||||
/datum/gear_tweak/path/New(list/paths)
|
||||
valid_paths = paths
|
||||
..()
|
||||
/datum/gear_tweak/rename/get_default()
|
||||
return ""
|
||||
|
||||
/datum/gear_tweak/path/get_contents(metadata)
|
||||
return "Type: [metadata]"
|
||||
/datum/gear_tweak/rename/get_metadata(user, metadata)
|
||||
var/new_name = tgui_input_text(user, "Rename an object. Enter empty line for stock name", "Rename Gear", metadata, MAX_NAME_LEN)
|
||||
if(isnull(new_name))
|
||||
return metadata
|
||||
return new_name
|
||||
|
||||
/datum/gear_tweak/path/get_default()
|
||||
return valid_paths[1]
|
||||
|
||||
/datum/gear_tweak/path/get_metadata(user, metadata)
|
||||
return input(user, "Choose a type.", "Character Preference", metadata) as null|anything in valid_paths
|
||||
|
||||
/datum/gear_tweak/path/tweak_gear_data(metadata, datum/gear_data/gear_data)
|
||||
if(!(metadata in valid_paths))
|
||||
/datum/gear_tweak/rename/tweak_item(obj/item/gear, metadata)
|
||||
if(!metadata)
|
||||
return
|
||||
gear_data.path = valid_paths[metadata]
|
||||
|
||||
/*
|
||||
* Content adjustment
|
||||
*/
|
||||
|
||||
/datum/gear_tweak/contents
|
||||
var/list/valid_contents
|
||||
|
||||
/datum/gear_tweak/contents/New()
|
||||
valid_contents = args.Copy()
|
||||
..()
|
||||
|
||||
/datum/gear_tweak/contents/get_contents(metadata)
|
||||
return "Contents: [english_list(metadata, and_text = ", ")]"
|
||||
|
||||
/datum/gear_tweak/contents/get_default()
|
||||
. = list()
|
||||
for(var/i = 1 to length(valid_contents))
|
||||
. += "Random"
|
||||
|
||||
/datum/gear_tweak/contents/get_metadata(user, list/metadata)
|
||||
. = list()
|
||||
for(var/i = length(metadata) to length(valid_contents))
|
||||
metadata += "Random"
|
||||
for(var/i = 1 to length(valid_contents))
|
||||
var/entry = input(user, "Choose an entry.", "Character Preference", metadata[i]) as null|anything in (valid_contents[i] + list("Random", "None"))
|
||||
if(entry)
|
||||
. += entry
|
||||
else
|
||||
return metadata
|
||||
|
||||
/datum/gear_tweak/contents/tweak_item(obj/item/I, list/metadata)
|
||||
if(length(metadata) != length(valid_contents))
|
||||
return
|
||||
for(var/i = 1 to length(valid_contents))
|
||||
var/path
|
||||
var/list/contents = valid_contents[i]
|
||||
if(metadata[i] == "Random")
|
||||
path = pick(contents)
|
||||
path = contents[path]
|
||||
else if(metadata[i] == "None")
|
||||
continue
|
||||
else
|
||||
path = contents[metadata[i]]
|
||||
new path(I)
|
||||
gear.name = metadata
|
||||
|
||||
@@ -1,14 +1,5 @@
|
||||
GLOBAL_LIST_EMPTY(loadout_categories)
|
||||
GLOBAL_LIST_EMPTY(gear_datums)
|
||||
|
||||
/datum/loadout_category
|
||||
var/category = ""
|
||||
var/list/gear = list()
|
||||
|
||||
/datum/loadout_category/New(cat)
|
||||
category = cat
|
||||
..()
|
||||
|
||||
/datum/gear
|
||||
/// Displayed name of the item listing.
|
||||
var/display_name
|
||||
@@ -48,10 +39,10 @@ GLOBAL_LIST_EMPTY(gear_datums)
|
||||
location = nlocation
|
||||
|
||||
/datum/gear/proc/spawn_item(location, metadata)
|
||||
var/datum/gear_data/gd = new(path, location)
|
||||
for(var/datum/gear_tweak/gt in gear_tweaks)
|
||||
gt.tweak_gear_data(metadata["[gt]"], gd)
|
||||
var/item = new gd.path(gd.location)
|
||||
for(var/datum/gear_tweak/gt in gear_tweaks)
|
||||
gt.tweak_item(item, metadata["[gt]"])
|
||||
var/datum/gear_data/gear_data = new(path, location)
|
||||
for(var/datum/gear_tweak/tweak in gear_tweaks)
|
||||
tweak.tweak_gear_data(metadata["[tweak]"], gear_data)
|
||||
var/item = new gear_data.path(gear_data.location)
|
||||
for(var/datum/gear_tweak/tweak in gear_tweaks)
|
||||
tweak.tweak_item(item, metadata["[tweak]"])
|
||||
return item
|
||||
|
||||
@@ -0,0 +1,61 @@
|
||||
GLOBAL_LIST_EMPTY(gear_tgui_info)
|
||||
|
||||
/datum/ui_module/loadout
|
||||
name = "Loadout"
|
||||
|
||||
/datum/ui_module/loadout/ui_state(mob/user)
|
||||
return GLOB.always_state
|
||||
|
||||
/datum/ui_module/loadout/ui_interact(mob/user, datum/tgui/ui)
|
||||
ui = SStgui.try_update_ui(user, src, ui)
|
||||
if(!ui)
|
||||
ui = new(user, src, "Loadout", name)
|
||||
ui.set_autoupdate(FALSE)
|
||||
ui.open()
|
||||
|
||||
/datum/ui_module/loadout/ui_data(mob/user)
|
||||
var/list/data = list()
|
||||
data["gear_slots"] = user?.client?.prefs.build_loadout()
|
||||
data["selected_gears"] = user?.client?.prefs?.active_character?.loadout_gear
|
||||
return data
|
||||
|
||||
/datum/ui_module/loadout/ui_static_data(mob/user)
|
||||
var/list/data = list()
|
||||
data["gears"] = GLOB.gear_tgui_info
|
||||
data["max_gear_slots"] = user?.client?.prefs?.max_gear_slots
|
||||
data["user_tier"] = user?.client?.donator_level
|
||||
return data
|
||||
|
||||
/datum/ui_module/loadout/ui_act(action, list/params)
|
||||
if(..())
|
||||
return
|
||||
. = TRUE
|
||||
|
||||
var/mob/user = usr
|
||||
var/datum/character_save/active_character = user.client.prefs.active_character
|
||||
switch(action)
|
||||
if("toggle_gear")
|
||||
var/datum/gear/gear = GLOB.gear_datums[text2path(params["gear"])]
|
||||
if(gear && ("[gear]" in active_character.loadout_gear))
|
||||
active_character.loadout_gear -= "[gear]"
|
||||
return TRUE
|
||||
|
||||
if(gear.donator_tier && user.client.donator_level < gear.donator_tier)
|
||||
to_chat(user, "<span class='warning'>That gear is only available at a higher donation tier than you are on.</span>")
|
||||
return FALSE
|
||||
|
||||
user.client.prefs.build_loadout(gear)
|
||||
return TRUE
|
||||
|
||||
if("set_tweak")
|
||||
if(!(params["gear"] in active_character.loadout_gear))
|
||||
return FALSE
|
||||
|
||||
var/datum/gear/gear = GLOB.gear_datums[text2path(params["gear"])]
|
||||
var/datum/gear_tweak/tweak = locate(text2path(params["tweak"])) in gear.gear_tweaks
|
||||
active_character.set_tweak_metadata(gear, tweak, tweak.get_metadata(user, active_character.get_tweak_metadata(gear, tweak)))
|
||||
return TRUE
|
||||
|
||||
if("clear_loadout")
|
||||
active_character.loadout_gear.Cut()
|
||||
return TRUE
|
||||
Reference in New Issue
Block a user