// 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/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 += "[PS.name] " 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/content(var/mob/user) . = "
" 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 . += "" . += "[PI.content(user)]
" . += "
" /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)]
" /********************** * 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 /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