mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-29 02:21:44 +00:00
## About The Pull Request This is part of my ongoing project to remove the Stat panel which you can read/contribute to here: https://hackmd.io/443_dE5lRWeEAp9bjGcKYw Replaces the pAI button at the bottom of Ghost's HUD with a new button for Ghost settings Default look  With fun verbs (admin only, the 2 buttons at the top right), No body, and lag switches on (disables T-Ray and Zooming)  The ghost icon next to "re-enter body" is the DNR button, which requires double click. Extra view is now easier to understand, 0 is "default", anything more is extra vision you get. Goes to 3 for regular users, 7 for BYOND members. Removes the "Ghost" tab from the stat panel entirely, this replaces it. ## Why It's Good For The Game The Ghost tab of the stat panel is filled with barely functional stuff, like "Jump to Mob" which allows you to jump to "oranges ear" which teleports you to nullspace, or the 4 different jump to verbs for different things which is irrelevant from the Orbit menu and the many improvements it got over the years, and even the Notifications panel, which seems pretty useful, but because it's delegated to a small button filled with the rest of these it gets entirely drowned out. This puts all the important things in front of the user at the click of a button, meant to be easy to navigate and giving important information first. ## Changelog 🆑 add: Added a 'Ghost settings' button, taking the spot of the pAI candidate button and replacing the "Ghost" tab of the Stat panel. This button contains buttons pertinent to your time as an Observer. /🆑
145 lines
4.0 KiB
Plaintext
145 lines
4.0 KiB
Plaintext
//This is intended to be a full wrapper. DO NOT directly modify its values
|
|
///Container for client viewsize
|
|
/datum/view_data
|
|
/// Width offset to apply to the default view string if we're not suppressed for some reason
|
|
var/width = 0
|
|
/// Height offset to apply to the default view string, see above
|
|
var/height = 0
|
|
/// This client's current "default" view, in the format "WidthxHeight"
|
|
/// We add/remove from this when we want to change their window size
|
|
var/default = ""
|
|
/// This client's current zoom level, if it's not being suppressed
|
|
/// If it's 0, we autoscale to the size of the window. Otherwise it's treated as the ratio between
|
|
/// the pixels on the map and output pixels. Only looks proper nice in increments of whole numbers (iirc)
|
|
/// Stored here so other parts of the code have a non blocking way of getting a user's functional zoom
|
|
var/zoom = 0
|
|
/// If the view is currently being suppressed by some other "monitor"
|
|
/// For when you want to own the client's eye without fucking with their viewport
|
|
/// Doesn't make sense for a binocoler to effect your view in a camera console
|
|
var/is_suppressed = FALSE
|
|
/// The client that owns this view packet
|
|
var/client/chief = null
|
|
|
|
/datum/view_data/New(client/owner, view_string)
|
|
default = view_string
|
|
chief = owner
|
|
apply()
|
|
|
|
/datum/view_data/Destroy()
|
|
chief = null
|
|
return ..()
|
|
|
|
/datum/view_data/proc/setDefault(string)
|
|
default = string
|
|
apply()
|
|
|
|
/datum/view_data/proc/afterViewChange()
|
|
if(isZooming())
|
|
assertFormat()
|
|
else
|
|
resetFormat()
|
|
if(chief?.mob)
|
|
SEND_SIGNAL(chief.mob, COMSIG_VIEWDATA_UPDATE, getView())
|
|
|
|
/datum/view_data/proc/assertFormat()//T-Pose
|
|
winset(chief, "mapwindow.map", "zoom=0")
|
|
zoom = 0
|
|
|
|
/datum/view_data/proc/resetFormat()//Cuck
|
|
zoom = chief?.prefs.read_preference(/datum/preference/numeric/pixel_size)
|
|
winset(chief, "mapwindow.map", "zoom=[zoom]")
|
|
chief?.attempt_auto_fit_viewport() // If you change zoom mode, fit the viewport
|
|
|
|
/datum/view_data/proc/setZoomMode()
|
|
winset(chief, "mapwindow.map", "zoom-mode=[chief?.prefs.read_preference(/datum/preference/choiced/scaling_method)]")
|
|
|
|
/datum/view_data/proc/isZooming()
|
|
return (width || height)
|
|
|
|
/datum/view_data/proc/resetToDefault()
|
|
width = 0
|
|
height = 0
|
|
apply()
|
|
|
|
/datum/view_data/proc/add(toAdd)
|
|
width += toAdd
|
|
height += toAdd
|
|
apply()
|
|
|
|
/datum/view_data/proc/addTo(toAdd)
|
|
var/list/shitcode = getviewsize(toAdd)
|
|
width += shitcode[1]
|
|
height += shitcode[2]
|
|
apply()
|
|
|
|
/datum/view_data/proc/setTo(to_set)
|
|
var/list/shitcode = getviewsize(to_set) //Backward compatibility to account
|
|
width = shitcode[1] //for a change in how sizes get calculated. we used to include world.view in
|
|
height = shitcode[2] //this, but it was jank, so I had to move it
|
|
apply()
|
|
|
|
/datum/view_data/proc/setBoth(wid, hei)
|
|
width = wid
|
|
height = hei
|
|
apply()
|
|
|
|
/datum/view_data/proc/setWidth(wid)
|
|
width = wid
|
|
apply()
|
|
|
|
/datum/view_data/proc/setHeight(hei)
|
|
width = hei
|
|
apply()
|
|
|
|
/datum/view_data/proc/addToWidth(toAdd)
|
|
width += toAdd
|
|
apply()
|
|
|
|
/datum/view_data/proc/addToHeight(screen, toAdd)
|
|
height += toAdd
|
|
apply()
|
|
|
|
/datum/view_data/proc/apply()
|
|
chief?.change_view(getView())
|
|
afterViewChange()
|
|
|
|
/datum/view_data/proc/supress()
|
|
is_suppressed = TRUE
|
|
apply()
|
|
|
|
/datum/view_data/proc/unsupress()
|
|
is_suppressed = FALSE
|
|
apply()
|
|
|
|
/datum/view_data/proc/getView()
|
|
var/list/temp = getviewsize(default)
|
|
if(is_suppressed)
|
|
return "[temp[1]]x[temp[2]]"
|
|
return "[width + temp[1]]x[height + temp[2]]"
|
|
|
|
/datum/view_data/proc/zoomIn()
|
|
resetToDefault()
|
|
animate(chief, pixel_x = 0, pixel_y = 0, 0, FALSE, LINEAR_EASING, ANIMATION_END_NOW)
|
|
|
|
/datum/view_data/proc/zoomOut(radius = 0, offset = 0, direction = FALSE)
|
|
if(direction)
|
|
var/_x = 0
|
|
var/_y = 0
|
|
switch(direction)
|
|
if(NORTH)
|
|
_y = offset
|
|
if(EAST)
|
|
_x = offset
|
|
if(SOUTH)
|
|
_y = -offset
|
|
if(WEST)
|
|
_x = -offset
|
|
animate(chief, pixel_x = ICON_SIZE_X*_x, pixel_y = ICON_SIZE_Y*_y, 0, FALSE, LINEAR_EASING, ANIMATION_END_NOW)
|
|
//Ready for this one?
|
|
setTo(radius)
|
|
|
|
/proc/getScreenSize(widescreen)
|
|
if(widescreen)
|
|
return CONFIG_GET(string/default_view)
|
|
return CONFIG_GET(string/default_view_square)
|