mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2025-12-21 15:42:35 +00:00
Changes the way savefile version upgrades are done, letting each sub-setting handle it own upgrade path, while also making it easier to transfer settings between preferences and individual characters save slots.
241 lines
8.0 KiB
Plaintext
241 lines
8.0 KiB
Plaintext
// These are not flags, binary operations not intended
|
|
#define TOPIC_NOACTION 0
|
|
#define TOPIC_HANDLED 1
|
|
#define TOPIC_REFRESH 2
|
|
|
|
/datum/category_group/player_setup_category/general_preferences
|
|
name = "General"
|
|
sort_order = 1
|
|
category_item_type = /datum/category_item/player_setup_item/general
|
|
|
|
/datum/category_group/player_setup_category/skill_preferences
|
|
name = "Skills"
|
|
sort_order = 2
|
|
category_item_type = /datum/category_item/player_setup_item/skills
|
|
|
|
/datum/category_group/player_setup_category/occupation_preferences
|
|
name = "Occupation"
|
|
sort_order = 3
|
|
category_item_type = /datum/category_item/player_setup_item/occupation
|
|
|
|
/datum/category_group/player_setup_category/appearance_preferences
|
|
name = "Antagonism"
|
|
sort_order = 4
|
|
category_item_type = /datum/category_item/player_setup_item/antagonism
|
|
|
|
/datum/category_group/player_setup_category/global_preferences
|
|
name = "Global"
|
|
sort_order = 5
|
|
category_item_type = /datum/category_item/player_setup_item/player_global
|
|
|
|
/****************************
|
|
* Category Collection Setup *
|
|
****************************/
|
|
/datum/category_collection/player_setup_collection
|
|
category_group_type = /datum/category_group/player_setup_category
|
|
var/datum/preferences/preferences
|
|
var/datum/category_group/player_setup_category/selected_category = null
|
|
|
|
/datum/category_collection/player_setup_collection/New(var/datum/preferences/preferences)
|
|
src.preferences = preferences
|
|
..()
|
|
selected_category = categories[1]
|
|
|
|
/datum/category_collection/player_setup_collection/Destroy()
|
|
preferences = null
|
|
selected_category = null
|
|
return ..()
|
|
|
|
/datum/category_collection/player_setup_collection/proc/sanitize_setup()
|
|
for(var/datum/category_group/player_setup_category/PS in categories)
|
|
PS.sanitize_setup()
|
|
|
|
/datum/category_collection/player_setup_collection/proc/load_character(var/savefile/S)
|
|
for(var/datum/category_group/player_setup_category/PS in categories)
|
|
PS.load_character(S)
|
|
|
|
/datum/category_collection/player_setup_collection/proc/save_character(var/savefile/S)
|
|
for(var/datum/category_group/player_setup_category/PS in categories)
|
|
PS.save_character(S)
|
|
|
|
/datum/category_collection/player_setup_collection/proc/load_preferences(var/savefile/S)
|
|
for(var/datum/category_group/player_setup_category/PS in categories)
|
|
PS.load_preferences(S)
|
|
|
|
/datum/category_collection/player_setup_collection/proc/save_preferences(var/savefile/S)
|
|
for(var/datum/category_group/player_setup_category/PS in categories)
|
|
PS.save_preferences(S)
|
|
|
|
/datum/category_collection/player_setup_collection/proc/update_setup(var/savefile/preferences, var/savefile/character)
|
|
for(var/datum/category_group/player_setup_category/PS in categories)
|
|
. = . || PS.update_setup(preferences, character)
|
|
|
|
/datum/category_collection/player_setup_collection/proc/header()
|
|
var/dat = ""
|
|
for(var/datum/category_group/player_setup_category/PS in categories)
|
|
if(PS == selected_category)
|
|
dat += "[PS.name] " // TODO: Check how to properly mark a href/button selected in a classic browser window
|
|
else
|
|
dat += "<a href='?src=\ref[src];category=\ref[PS]'>[PS.name]</a> "
|
|
return dat
|
|
|
|
/datum/category_collection/player_setup_collection/proc/content(var/mob/user)
|
|
if(selected_category)
|
|
return selected_category.content(user)
|
|
|
|
/datum/category_collection/player_setup_collection/Topic(var/href,var/list/href_list)
|
|
if(..())
|
|
return 1
|
|
var/mob/user = usr
|
|
if(!user.client)
|
|
return 1
|
|
|
|
if(href_list["category"])
|
|
var/category = locate(href_list["category"])
|
|
if(category && category in categories)
|
|
selected_category = category
|
|
. = 1
|
|
|
|
if(.)
|
|
user.client.prefs.ShowChoices(user)
|
|
|
|
/**************************
|
|
* Category Category Setup *
|
|
**************************/
|
|
/datum/category_group/player_setup_category
|
|
var/sort_order = 0
|
|
|
|
/datum/category_group/player_setup_category/dd_SortValue()
|
|
return sort_order
|
|
|
|
/datum/category_group/player_setup_category/proc/sanitize_setup()
|
|
for(var/datum/category_item/player_setup_item/PI in items)
|
|
PI.sanitize_preferences()
|
|
for(var/datum/category_item/player_setup_item/PI in items)
|
|
PI.sanitize_character()
|
|
|
|
/datum/category_group/player_setup_category/proc/load_character(var/savefile/S)
|
|
// Load all data, then sanitize it.
|
|
// Need due to, for example, the 01_basic module relying on species having been loaded to sanitize correctly but that isn't loaded until module 03_body.
|
|
for(var/datum/category_item/player_setup_item/PI in items)
|
|
PI.load_character(S)
|
|
for(var/datum/category_item/player_setup_item/PI in items)
|
|
PI.sanitize_character()
|
|
|
|
/datum/category_group/player_setup_category/proc/save_character(var/savefile/S)
|
|
// Sanitize all data, then save it
|
|
for(var/datum/category_item/player_setup_item/PI in items)
|
|
PI.sanitize_character()
|
|
for(var/datum/category_item/player_setup_item/PI in items)
|
|
PI.save_character(S)
|
|
|
|
/datum/category_group/player_setup_category/proc/load_preferences(var/savefile/S)
|
|
for(var/datum/category_item/player_setup_item/PI in items)
|
|
PI.load_preferences(S)
|
|
for(var/datum/category_item/player_setup_item/PI in items)
|
|
PI.sanitize_preferences()
|
|
|
|
/datum/category_group/player_setup_category/proc/save_preferences(var/savefile/S)
|
|
for(var/datum/category_item/player_setup_item/PI in items)
|
|
PI.sanitize_preferences()
|
|
for(var/datum/category_item/player_setup_item/PI in items)
|
|
PI.save_preferences(S)
|
|
|
|
/datum/category_group/player_setup_category/proc/update_setup(var/savefile/preferences, var/savefile/character)
|
|
for(var/datum/category_item/player_setup_item/PI in items)
|
|
. = . || PI.update_setup(preferences, character)
|
|
|
|
/datum/category_group/player_setup_category/proc/content(var/mob/user)
|
|
. = "<table style='width:100%'><tr style='vertical-align:top'><td style='width:50%'>"
|
|
var/current = 0
|
|
var/halfway = items.len / 2
|
|
for(var/datum/category_item/player_setup_item/PI in items)
|
|
if(halfway && current++ >= halfway)
|
|
halfway = 0
|
|
. += "</td><td></td><td style='width:50%'>"
|
|
. += "[PI.content(user)]<br>"
|
|
. += "</td></tr></table>"
|
|
|
|
/datum/category_group/player_setup_category/occupation_preferences/content(var/mob/user)
|
|
for(var/datum/category_item/player_setup_item/PI in items)
|
|
. += "[PI.content(user)]<br>"
|
|
|
|
/**********************
|
|
* Category Item Setup *
|
|
**********************/
|
|
/datum/category_item/player_setup_item
|
|
var/sort_order = 0
|
|
var/datum/preferences/pref
|
|
|
|
/datum/category_item/player_setup_item/New()
|
|
..()
|
|
var/datum/category_collection/player_setup_collection/psc = category.collection
|
|
pref = psc.preferences
|
|
|
|
/datum/category_item/player_setup_item/Destroy()
|
|
pref = null
|
|
return ..()
|
|
|
|
/datum/category_item/player_setup_item/dd_SortValue()
|
|
return sort_order
|
|
|
|
/*
|
|
* Called when the item is asked to load per character settings
|
|
*/
|
|
/datum/category_item/player_setup_item/proc/load_character(var/savefile/S)
|
|
return
|
|
|
|
/*
|
|
* Called when the item is asked to save per character settings
|
|
*/
|
|
/datum/category_item/player_setup_item/proc/save_character(var/savefile/S)
|
|
return
|
|
|
|
/*
|
|
* Called when the item is asked to load user/global settings
|
|
*/
|
|
/datum/category_item/player_setup_item/proc/load_preferences(var/savefile/S)
|
|
return
|
|
|
|
/*
|
|
* Called when the item is asked to save user/global settings
|
|
*/
|
|
/datum/category_item/player_setup_item/proc/save_preferences(var/savefile/S)
|
|
return
|
|
|
|
/*
|
|
* Called when the item is asked to update user/global settings
|
|
*/
|
|
/datum/category_item/player_setup_item/proc/update_setup(var/savefile/preferences, var/savefile/character)
|
|
return 0
|
|
|
|
/datum/category_item/player_setup_item/proc/content()
|
|
return
|
|
|
|
/datum/category_item/player_setup_item/proc/sanitize_character()
|
|
return
|
|
|
|
/datum/category_item/player_setup_item/proc/sanitize_preferences()
|
|
return
|
|
|
|
/datum/category_item/player_setup_item/Topic(var/href,var/list/href_list)
|
|
if(..())
|
|
return 1
|
|
var/mob/user = usr
|
|
if(!user.client)
|
|
return 1
|
|
|
|
. = OnTopic(href, href_list, user)
|
|
if(. == TOPIC_REFRESH)
|
|
user.client.prefs.ShowChoices(user)
|
|
|
|
/datum/category_item/player_setup_item/CanUseTopic(var/mob/user)
|
|
return 1
|
|
|
|
/datum/category_item/player_setup_item/proc/OnTopic(var/href,var/list/href_list, var/mob/user)
|
|
return TOPIC_NOACTION
|
|
|
|
/datum/category_item/player_setup_item/proc/preference_mob()
|
|
if(pref && pref.client && pref.client.mob)
|
|
return pref.client.mob
|