Files
Stephen 036a29b765 all mbc code from jan 1st to 2/16/2020
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
2020-02-17 01:36:01 -05:00

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)