improve performance of vis_overlays by handling dir by using vis_flags (#53816)

vis dir changes are now handled by vis_flags
This commit is contained in:
Couls
2020-09-24 05:00:41 -04:00
committed by GitHub
parent c35c9c4b20
commit f174cd671c
2 changed files with 1 additions and 19 deletions
@@ -55,7 +55,6 @@ SUBSYSTEM_DEF(vis_overlays)
if(!thing.managed_vis_overlays)
thing.managed_vis_overlays = list(overlay)
RegisterSignal(thing, COMSIG_ATOM_DIR_CHANGE, .proc/rotate_vis_overlay)
else
thing.managed_vis_overlays += overlay
return overlay
@@ -79,20 +78,3 @@ SUBSYSTEM_DEF(vis_overlays)
thing.managed_vis_overlays -= overlays
if(!length(thing.managed_vis_overlays))
thing.managed_vis_overlays = null
UnregisterSignal(thing, COMSIG_ATOM_DIR_CHANGE)
/datum/controller/subsystem/vis_overlays/proc/rotate_vis_overlay(atom/thing, old_dir, new_dir)
SIGNAL_HANDLER
if(old_dir == new_dir)
return
var/rotation = dir2angle(old_dir) - dir2angle(new_dir)
var/list/overlays_to_remove = list()
for(var/i in thing.managed_vis_overlays - unique_vis_overlays)
var/obj/effect/overlay/vis/overlay = i
add_vis_overlay(thing, overlay.icon, overlay.icon_state, overlay.layer, overlay.plane, turn(overlay.dir, rotation), overlay.alpha, overlay.appearance_flags)
overlays_to_remove += overlay
for(var/i in thing.managed_vis_overlays & unique_vis_overlays)
var/obj/effect/overlay/vis/overlay = i
overlay.dir = turn(overlay.dir, rotation)
remove_vis_overlay(thing, overlays_to_remove)