mirror of
https://github.com/PolarisSS13/Polaris.git
synced 2025-12-30 03:53:33 +00:00
Character setup refactoring.
Begins breaking down the large character setup in more manageable modules, allowing for easier additions, edits, and removals.
(cherry picked from commit e116721977)
Conflicts:
code/modules/client/preferences.dm
code/modules/client/preferences_savefile.dm
polaris.dme
This commit is contained in:
209
code/modules/client/preference_setup/preference_setup.dm
Normal file
209
code/modules/client/preference_setup/preference_setup.dm
Normal file
@@ -0,0 +1,209 @@
|
||||
// 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/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 += "<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/load_character(var/savefile/S)
|
||||
for(var/datum/category_item/player_setup_item/PI in items)
|
||||
PI.load_character(S)
|
||||
PI.sanitize_character()
|
||||
|
||||
/datum/category_group/player_setup_category/proc/save_character(var/savefile/S)
|
||||
for(var/datum/category_item/player_setup_item/PI in items)
|
||||
PI.sanitize_character()
|
||||
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)
|
||||
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()
|
||||
PI.save_preferences(S)
|
||||
|
||||
/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
|
||||
|
||||
/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
|
||||
Reference in New Issue
Block a user