mirror of
https://github.com/goonstation/goonstation-2020.git
synced 2026-07-10 14:42:20 +01:00
036a29b765
includes a lot of small things + fixes. big ones are Simple Lights, New Grab stuff, Disorient Eye/Ear protection armor values, access reprogrammer and deconstruction device also added flabo to the list of contributors, we missed her on the first go! check changelog for full list, i merged that too
157 lines
3.6 KiB
Plaintext
157 lines
3.6 KiB
Plaintext
/obj/screen
|
|
anchored = 1
|
|
plane = PLANE_HUD//wow WOW why won't you use /obj/screen/hud, HUD OBJECTS???
|
|
New()
|
|
..()
|
|
appearance_flags |= NO_CLIENT_COLOR
|
|
|
|
/obj/screen/hud
|
|
plane = PLANE_HUD
|
|
var/datum/hud/master
|
|
var/id = ""
|
|
var/tooltipTheme
|
|
var/obj/item/item
|
|
|
|
clicked(list/params)
|
|
sendclick(params, usr)
|
|
|
|
proc/sendclick(list/params,mob/user = null)
|
|
if (master && (!master.click_check || (user in master.mobs)))
|
|
master.clicked(src.id, user, params)
|
|
|
|
//WIRE TOOLTIPS
|
|
MouseEntered(location, control, params)
|
|
if (src.id == "stats" && istype(master, /datum/hud/human))
|
|
var/datum/hud/human/H = master
|
|
H.update_stats()
|
|
if (usr.client.tooltipHolder && src.tooltipTheme)
|
|
usr.client.tooltipHolder.showHover(src, list(
|
|
"params" = params,
|
|
"title" = src.name,
|
|
"content" = (src.desc ? src.desc : null),
|
|
"theme" = src.tooltipTheme
|
|
))
|
|
|
|
MouseExited()
|
|
if (usr.client.tooltipHolder)
|
|
usr.client.tooltipHolder.hideHover()
|
|
|
|
MouseWheel(dx, dy, loc, ctrl, parms)
|
|
if (master && (!master.click_check || (usr in master.mobs)))
|
|
master.scrolled(src.id, dx, dy, usr, parms, src)
|
|
|
|
/datum/hud
|
|
var/list/mob/living/mobs = list()
|
|
var/list/client/clients = list()
|
|
var/list/obj/screen/hud/objects = list()
|
|
var/click_check = 1
|
|
|
|
disposing()
|
|
for (var/mob/M in src.mobs)
|
|
M.detach_hud(src)
|
|
for (var/obj/screen/S in src.objects)
|
|
if (S:master == src)
|
|
S:master = null
|
|
for (var/client/C in src.clients)
|
|
remove_client(C)
|
|
|
|
src.clear_master()
|
|
|
|
proc/clear_master() //only some have masters. i use this for clean gc. itzs messy, im sorry
|
|
.= 0
|
|
|
|
proc/check_objects()
|
|
for (var/i = 1; i <= src.objects.len; i++)
|
|
var/j = 0
|
|
while (j+i <= src.objects.len && isnull(src.objects[j+i]))
|
|
j++
|
|
if (j)
|
|
src.objects.Cut(i, i+j)
|
|
|
|
proc/add_client(client/C)
|
|
check_objects()
|
|
C.screen += src.objects
|
|
src.clients += C
|
|
|
|
proc/remove_client(client/C)
|
|
src.clients -= C
|
|
for (var/atom/A in src.objects)
|
|
C.screen -= A
|
|
|
|
proc/create_screen(id, name, icon, state, loc, layer = HUD_LAYER, dir = SOUTH, tooltipTheme = null)
|
|
var/obj/screen/hud/S = new
|
|
S.name = name
|
|
S.id = id
|
|
S.master = src
|
|
S.icon = icon
|
|
S.icon_state = state
|
|
S.screen_loc = loc
|
|
S.layer = layer
|
|
S.dir = dir
|
|
S.tooltipTheme = tooltipTheme
|
|
src.objects += S
|
|
|
|
for (var/client/C in src.clients)
|
|
C.screen += S
|
|
return S
|
|
|
|
proc/add_object(atom/movable/A, layer = HUD_LAYER, loc)
|
|
if (loc)
|
|
A.screen_loc = loc
|
|
A.layer = layer
|
|
A.plane = PLANE_HUD
|
|
if (!src.objects.Find(A))
|
|
src.objects += A
|
|
for (var/client/C in src.clients)
|
|
C.screen += A
|
|
|
|
proc/remove_object(atom/movable/A)
|
|
A.plane = initial(A.plane) // object should really be restoring this by itself, but we'll just make sure it doesnt get trapped in the HUD plane
|
|
if (src.objects)
|
|
src.objects -= A
|
|
for (var/client/C in src.clients)
|
|
C.screen -= A
|
|
|
|
proc/add_screen(obj/screen/S)
|
|
if (!src.objects.Find(S))
|
|
src.objects += S
|
|
for (var/client/C in src.clients)
|
|
C.screen += S
|
|
|
|
proc/set_visible_id(id, visible)
|
|
var/obj/screen/S = get_by_id(id)
|
|
if(S)
|
|
if(visible)
|
|
S.invisibility = 0
|
|
else
|
|
S.invisibility = 101
|
|
return
|
|
|
|
proc/set_visible(obj/screen/S, visible)
|
|
if(S)
|
|
if(visible)
|
|
S.invisibility = 0
|
|
else
|
|
S.invisibility = 101
|
|
return
|
|
|
|
proc/remove_screen(obj/screen/S)
|
|
src.objects -= S
|
|
for (var/client/C in src.clients)
|
|
C.screen -= S
|
|
|
|
proc/remove_screen_id(var/id)
|
|
var/obj/screen/S = get_by_id(id)
|
|
if(S)
|
|
src.objects -= S
|
|
for (var/client/C in src.clients)
|
|
C.screen -= S
|
|
|
|
proc/get_by_id(var/id)
|
|
for(var/obj/screen/hud/SC in src.objects)
|
|
if(SC.id == id)
|
|
return SC
|
|
return null
|
|
|
|
proc/clicked(id)
|
|
proc/scrolled(id, dx, dy, usr, parms) |