/*
* ViewMods Client module
* This should be used by anything that wants to change a client's view range.
* Also includes
*/
/* Defines */
#define CUSTOM_VIEWRANGES list(1, 2, 3, 4, 5, 6, "RESET")
/* Viewmods */
/client
var/list/ViewMods = list()
var/ViewModsActive = FALSE
var/ViewPreferedIconSize = 0
/client/proc/AddViewMod(id, size)
var/datum/viewmod/V = new /datum/viewmod(id, size)
ViewMods[V.id] = V
UpdateView()
/client/proc/CheckViewMod(id)
. = 0
if(ViewMods[id])
. = 1
/client/proc/RemoveViewMod(id)
if(CheckViewMod(id))
qdel(ViewMods[id])
ViewMods.Remove(id)
UpdateView()
/client/proc/UpdateView()
if(!ViewModsActive)
ViewPreferedIconSize = winget(src, "paramapwindow.map", "icon-size")
var/highest_range = 0
for(var/mod_id in ViewMods)
var/datum/viewmod/V = ViewMods[mod_id]
highest_range = max(highest_range, V.size)
SetView(highest_range ? highest_range : prefs.viewrange)
ViewModsActive = (highest_range > 0)
/client/proc/SetView(view_range)
if(view_range == prefs.viewrange)
winset(src, "paramapwindow.map", "icon-size=[ViewPreferedIconSize]")
else
winset(src, "paramapwindow.map", "icon-size=0")
view = view_range
var/view_range_calc = maxview()
if(mob?.hud_used)
// If view range is less than world.view, assume the HUD will not fit under normal mode and turn it to reduced
if(view_range_calc < world.view)
// If it's really tiny, turn their hud off completely
if(view_range_calc <= ARBITRARY_VIEWRANGE_NOHUD)
mob.hud_used.show_hud(HUD_STYLE_NOHUD)
else
mob.hud_used.show_hud(HUD_STYLE_REDUCED)
else
mob.hud_used.show_hud(HUD_STYLE_STANDARD)
/* Viewmod datums */
/datum/viewmod
var/id = ""
var/size = -1
/datum/viewmod/New(new_id, new_size = world.view)
. = ..()
id = new_id
size = new_size
/* Client verbs */
/proc/viewNum_to_text(view)
return "[(view * 2) + 1]x[(view * 2) + 1]"
/client/verb/set_view_range(view_range as null|anything in CUSTOM_VIEWRANGES)
set name = "Set View Range"
set category = "Preferences"
if(!view_range)
return
RemoveViewMod("custom")
if(view_range == "RESET")
to_chat(src, "View range reset.")
return
to_chat(src, "View range set to [viewNum_to_text(view_range)]")
AddViewMod("custom", view_range)