Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 20 additions & 12 deletions code/_onclick/hud/rendering/render_plate.dm
Original file line number Diff line number Diff line change
Expand Up @@ -64,21 +64,29 @@
* * relay_plane: plane we are relaying this plane master to
*/
/atom/movable/screen/plane_master/proc/relay_render_to_plane(mob/mymob, relay_plane)
if(relay in mymob.client.screen) //backdrop can be called multiple times
return
// we may need to regenerate it
if(!render_target && generate_render_target)
render_target = "*[name]: AUTOGENERATED RENDER TGT"
relay = new()
relay.render_source = render_target
relay.plane = relay_plane
relay.layer = (plane + abs(LOWEST_EVER_PLANE))*0.5 //layer must be positive but can be a decimal
if(relay && render_target != relay.render_target) // our relay target has changed. this will probably never happen but just in case
relay.render_source = render_target
// todo: we may actually need to delete and remake this
if(mymob.client.render_plates_shown[relay]) //backdrop can be called multiple times
return
if(!relay) // don't generate a new one just because we cleared our client's screen
relay = new()
relay.render_source = render_target
relay.plane = relay_plane
relay.layer = (plane + abs(LOWEST_EVER_PLANE))*0.5 //layer must be positive but can be a decimal

if(blend_mode_override)
relay.blend_mode = blend_mode_override
else
relay.blend_mode = blend_mode
relay.mouse_opacity = mouse_opacity
relay.name = render_target
if(blend_mode_override)
relay.blend_mode = blend_mode_override
else
relay.blend_mode = blend_mode
relay.mouse_opacity = mouse_opacity
relay.name = render_target
mymob.client.add_to_screen(relay)
// this list is used to check if a plane has already had its relay added
// this is faster than checking membership in `screen`, ideally
mymob.client.render_plates_shown[relay] = TRUE
if(blend_mode != BLEND_MULTIPLY)
blend_mode = BLEND_DEFAULT
5 changes: 5 additions & 0 deletions code/modules/client/client_defines.dm
Original file line number Diff line number Diff line change
Expand Up @@ -136,3 +136,8 @@
/// If this client has any windows scaling applied
var/window_scaling

/// An alist used to make checks for whether a render plate has been added to a client's screen faster.
/// render relay plate -> TRUE
/// This must be cleared whenever screen is cleared manually.
var/alist/render_plates_shown = alist()

1 change: 1 addition & 0 deletions code/modules/client/client_procs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -931,6 +931,7 @@ CLIENT_VERB(fix_stat_panel)
continue

remove_from_screen(object)
render_plates_shown = alist()

///opens the particle editor UI for the in_atom object for this client
/client/proc/open_particle_editor(atom/movable/in_atom)
Expand Down
3 changes: 2 additions & 1 deletion code/modules/mob/living/brain/brain_item.dm
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,8 @@
..()
spawn(5)
if(brainmob && brainmob.client)
brainmob.client.screen.len = null //clear the hud
brainmob.client.screen.Cut() //clear the hud
brainmob.client.render_plates_shown = alist()

/obj/item/organ/brain/proc/transfer_identity(mob/living/carbon/H)
name = "[H]'s brain"
Expand Down
5 changes: 3 additions & 2 deletions code/modules/mob/living/simple_animal/simple_animal.dm
Original file line number Diff line number Diff line change
Expand Up @@ -85,8 +85,9 @@
return ..()

/mob/living/simple_animal/Login()
if(src && src.client)
src.client.screen = null
if(client)
client.screen = null
client.render_plates_shown = alist()
..()

/mob/living/simple_animal/updatehealth()
Expand Down
1 change: 1 addition & 0 deletions code/modules/mob/login.dm
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@

client.images = null
client.screen = null //remove hud items just in case
client.render_plates_shown = alist()
if(!hud_used)
create_hud()
if(hud_used)
Expand Down
1 change: 1 addition & 0 deletions code/modules/mob/mob_verbs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,7 @@
log_game("[usr.key] AM failed due to disconnect.")
return
client.screen.Cut()
client.render_plates_shown = alist()
if(!client)
log_game("[usr.key] AM failed due to disconnect.")
return
Expand Down
3 changes: 2 additions & 1 deletion code/modules/organs/limb_objects.dm
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,8 @@
overlays += lipstick

if(brainmob && brainmob.client)
brainmob.client.screen.len = null //clear the hud
brainmob.client.screen.Cut() //clear the hud
brainmob.client.render_plates_shown = alist()

transfer_identity(H)

Expand Down