mirror of
https://github.com/PolarisSS13/Polaris.git
synced 2026-07-19 04:05:56 +01:00
Merge pull request #8394 from Mechoid/VirgoSetupPreview
Ports Virgo's character setup display.
This commit is contained in:
@@ -115,7 +115,6 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
S["synth_green"] >> pref.g_synth
|
||||
S["synth_blue"] >> pref.b_synth
|
||||
S["synth_markings"] >> pref.synth_markings
|
||||
pref.preview_icon = null
|
||||
S["bgstate"] >> pref.bgstate
|
||||
S["body_descriptors"] >> pref.body_descriptors
|
||||
S["ear_style"] >> pref.ear_style
|
||||
@@ -405,9 +404,6 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
|
||||
/datum/category_item/player_setup_item/general/body/content(var/mob/user)
|
||||
. = list()
|
||||
if(!pref.preview_icon)
|
||||
pref.update_preview_icon()
|
||||
user << browse_rsc(pref.preview_icon, "previewicon.png")
|
||||
|
||||
var/datum/species/mob_species = GLOB.all_species[pref.species]
|
||||
. += "<table><tr style='vertical-align:top'><td><b>Body</b> "
|
||||
@@ -530,7 +526,6 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
. += "</table><br>"
|
||||
|
||||
. += "</td><td><b>Preview</b><br>"
|
||||
. += "<div class='statusDisplay'><center><img src=previewicon.png width=[pref.preview_icon.Width()] height=[pref.preview_icon.Height()]></center></div>"
|
||||
. += "<br><a href='?src=\ref[src];cycle_bg=1'>Cycle background</a>"
|
||||
. += "<br><a href='?src=\ref[src];toggle_preview_value=[EQUIP_PREVIEW_LOADOUT]'>[pref.equip_preview_mob & EQUIP_PREVIEW_LOADOUT ? "Hide loadout" : "Show loadout"]</a>"
|
||||
. += "<br><a href='?src=\ref[src];toggle_preview_value=[EQUIP_PREVIEW_JOB]'>[pref.equip_preview_mob & EQUIP_PREVIEW_JOB ? "Hide job gear" : "Show job gear"]</a>"
|
||||
|
||||
@@ -233,7 +233,7 @@
|
||||
|
||||
. = OnTopic(href, href_list, usr)
|
||||
if(. & TOPIC_UPDATE_PREVIEW)
|
||||
pref_mob.client.prefs.preview_icon = null
|
||||
pref_mob.client.prefs.update_preview_icon()
|
||||
if(. & TOPIC_REFRESH)
|
||||
pref_mob.client.prefs.ShowChoices(usr)
|
||||
|
||||
|
||||
@@ -80,7 +80,14 @@ var/list/preferences_datums = list()
|
||||
var/antag_vis = "Hidden" //How visible antag association is to others.
|
||||
|
||||
//Mob preview
|
||||
var/icon/preview_icon = null
|
||||
var/list/char_render_holders //Should only be a key-value list of north/south/east/west = obj/screen.
|
||||
var/static/list/preview_screen_locs = list(
|
||||
"1" = "character_preview_map:1,5:-12",
|
||||
"2" = "character_preview_map:1,3:15",
|
||||
"4" = "character_preview_map:1:7,2:10",
|
||||
"8" = "character_preview_map:1:-7,1:5",
|
||||
"BG" = "character_preview_map:1,1 to 1,5"
|
||||
)
|
||||
|
||||
//Jobs, uses bitflags
|
||||
var/job_civilian_high = 0
|
||||
@@ -165,6 +172,9 @@ var/list/preferences_datums = list()
|
||||
if(load_preferences())
|
||||
load_character()
|
||||
|
||||
/datum/preferences/Destroy()
|
||||
. = ..()
|
||||
QDEL_LIST_ASSOC_VAL(char_render_holders)
|
||||
|
||||
/datum/preferences/proc/ZeroSkills(var/forced = 0)
|
||||
for(var/V in SKILLS) for(var/datum/skill/S in SKILLS[V])
|
||||
@@ -226,6 +236,10 @@ var/list/preferences_datums = list()
|
||||
close_load_dialog(user)
|
||||
return
|
||||
|
||||
if(!char_render_holders)
|
||||
update_preview_icon()
|
||||
show_character_previews()
|
||||
|
||||
var/dat = "<html><body><center>"
|
||||
|
||||
if(path)
|
||||
@@ -246,9 +260,48 @@ var/list/preferences_datums = list()
|
||||
|
||||
dat += "</html></body>"
|
||||
//user << browse(dat, "window=preferences;size=635x736")
|
||||
var/datum/browser/popup = new(user, "Character Setup","Character Setup", 800, 800, src)
|
||||
winshow(user, "preferences_window", TRUE)
|
||||
var/datum/browser/popup = new(user, "preferences_browser", "Character Setup", 800, 800)
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
popup.open(FALSE) // Skip registring onclose on the browser pane
|
||||
onclose(user, "preferences_window", src) // We want to register on the window itself
|
||||
|
||||
/datum/preferences/proc/update_character_previews(mutable_appearance/MA)
|
||||
if(!client)
|
||||
return
|
||||
|
||||
var/obj/screen/BG= LAZYACCESS(char_render_holders, "BG")
|
||||
if(!BG)
|
||||
BG = new
|
||||
BG.plane = TURF_PLANE
|
||||
BG.icon = 'icons/effects/128x48.dmi'
|
||||
LAZYSET(char_render_holders, "BG", BG)
|
||||
client.screen |= BG
|
||||
BG.icon_state = bgstate
|
||||
BG.screen_loc = preview_screen_locs["BG"]
|
||||
|
||||
for(var/D in global.cardinal)
|
||||
var/obj/screen/O = LAZYACCESS(char_render_holders, "[D]")
|
||||
if(!O)
|
||||
O = new
|
||||
LAZYSET(char_render_holders, "[D]", O)
|
||||
client.screen |= O
|
||||
O.appearance = MA
|
||||
O.dir = D
|
||||
O.screen_loc = preview_screen_locs["[D]"]
|
||||
|
||||
/datum/preferences/proc/show_character_previews()
|
||||
if(!client || !char_render_holders)
|
||||
return
|
||||
for(var/render_holder in char_render_holders)
|
||||
client.screen |= char_render_holders[render_holder]
|
||||
|
||||
/datum/preferences/proc/clear_character_previews()
|
||||
for(var/index in char_render_holders)
|
||||
var/obj/screen/S = char_render_holders[index]
|
||||
client?.screen -= S
|
||||
qdel(S)
|
||||
char_render_holders = null
|
||||
|
||||
/datum/preferences/proc/process_link(mob/user, list/href_list)
|
||||
if(!user) return
|
||||
@@ -298,6 +351,10 @@ var/list/preferences_datums = list()
|
||||
overwrite_character(text2num(href_list["overwrite"]))
|
||||
sanitize_preferences()
|
||||
close_load_dialog(usr)
|
||||
else if(href_list["close"])
|
||||
// User closed preferences window, cleanup anything we need to.
|
||||
clear_character_previews()
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
|
||||
|
||||
@@ -82,6 +82,8 @@
|
||||
player_setup.load_character(S)
|
||||
S.cd = "/character[default_slot]"
|
||||
player_setup.save_character(S)
|
||||
|
||||
clear_character_previews() // Recalculate them on next show
|
||||
|
||||
return 1
|
||||
|
||||
|
||||
@@ -599,7 +599,7 @@
|
||||
|
||||
src << browse(null, "window=latechoices") //closes late choices window
|
||||
src << browse(null, "window=News") //closes news window
|
||||
//src << browse(null, "window=playersetup") //closes the player setup window
|
||||
src << browse(null, "window=preferences_window") //closes the player setup window
|
||||
panel.close()
|
||||
|
||||
/mob/new_player/proc/has_admin_rights()
|
||||
|
||||
@@ -260,19 +260,7 @@
|
||||
mannequin.toggle_wing(setting = TRUE)
|
||||
COMPILE_OVERLAYS(mannequin)
|
||||
|
||||
preview_icon = icon('icons/effects/128x48.dmi', bgstate)
|
||||
preview_icon.Scale(48+32, 16+32)
|
||||
|
||||
var/icon/stamp = getFlatIcon(mannequin, defdir=NORTH)
|
||||
preview_icon.Blend(stamp, ICON_OVERLAY, 25, 17)
|
||||
|
||||
stamp = getFlatIcon(mannequin, defdir=WEST)
|
||||
preview_icon.Blend(stamp, ICON_OVERLAY, 1, 9)
|
||||
|
||||
stamp = getFlatIcon(mannequin, defdir=SOUTH)
|
||||
preview_icon.Blend(stamp, ICON_OVERLAY, 49, 1)
|
||||
|
||||
preview_icon.Scale(preview_icon.Width() * 2, preview_icon.Height() * 2) // Scaling here to prevent blurring in the browser.
|
||||
update_character_previews(new /mutable_appearance(mannequin))
|
||||
|
||||
/datum/preferences/proc/get_highest_job()
|
||||
var/datum/job/highJob
|
||||
|
||||
@@ -1454,6 +1454,31 @@ window "browserwindow"
|
||||
on-show = ".winset\"rpane.infob.is-visible=true?rpane.infob.pos=130,0;rpane.textb.is-visible=true;rpane.browseb.is-visible=true;rpane.browseb.is-checked=true;rpane.rpanewindow.pos=0,30;rpane.rpanewindow.size=0x0;rpane.rpanewindow.left=browserwindow\""
|
||||
on-hide = ".winset\"rpane.infob.is-visible=true?rpane.infob.is-checked=true rpane.infob.pos=65,0 rpane.rpanewindow.left=infowindow:rpane.rpanewindow.left=textwindow rpane.textb.is-visible=true rpane.rpanewindow.pos=0,30 rpane.rpanewindow.size=0x0\""
|
||||
|
||||
window "preferences_window"
|
||||
elem "preferences_window"
|
||||
type = MAIN
|
||||
pos = 281,0
|
||||
size = 1000x800
|
||||
anchor1 = none
|
||||
anchor2 = none
|
||||
is-visible = false
|
||||
saved-params = "pos;size;is-minimized;is-maximized"
|
||||
statusbar = false
|
||||
elem "preferences_browser"
|
||||
type = BROWSER
|
||||
pos = 0,0
|
||||
size = 800x800
|
||||
anchor1 = 0,0
|
||||
anchor2 = 80,100
|
||||
saved-params = ""
|
||||
elem "character_preview_map"
|
||||
type = MAP
|
||||
pos = 800,0
|
||||
size = 200x800
|
||||
anchor1 = 80,0
|
||||
anchor2 = 100,100
|
||||
right-click = false
|
||||
|
||||
window "infowindow"
|
||||
elem "infowindow"
|
||||
type = MAIN
|
||||
|
||||
Reference in New Issue
Block a user