From d3c3377f13fa4e08a74044ba721b88a64a358e98 Mon Sep 17 00:00:00 2001 From: Lohikar Date: Sat, 8 Jul 2017 16:25:12 -0500 Subject: [PATCH] Minor parallax performance tweaks (#2967) Speeds up parallax's update-values proc a little, but not much. --- code/_onclick/hud/parallax.dm | 50 +++++++++++++++------------ code/modules/client/client defines.dm | 3 +- 2 files changed, 29 insertions(+), 24 deletions(-) diff --git a/code/_onclick/hud/parallax.dm b/code/_onclick/hud/parallax.dm index a670da71e3c..6ba065620b0 100644 --- a/code/_onclick/hud/parallax.dm +++ b/code/_onclick/hud/parallax.dm @@ -4,6 +4,8 @@ #define PARALLAX_IMAGE_WIDTH 8 #define PARALLAX_IMAGE_TILES (PARALLAX_IMAGE_WIDTH**2) #define GRID_WIDTH 3 +#define PARALLAX_SCALED_WIDTH (PARALLAX_IMAGE_WIDTH*WORLD_ICON_SIZE) +#define PARALLAX_SCALED_GRID_WIDTH (PARALLAX_SCALED_WIDTH*GRID_WIDTH) /obj/screen/parallax var/base_offset_x = 0 @@ -81,10 +83,6 @@ if(bgobj.parallax_speed) C.parallax_movable += parallax_layer - if(!C.parallax_offset.len) - C.parallax_offset["horizontal"] = 0 - C.parallax_offset["vertical"] = 0 - C.screen |= C.parallax_dustmaster /datum/hud/proc/update_parallax() @@ -114,36 +112,40 @@ if(!SSparallax.parallax_initialized) return - if(!(locate(/turf/space) in trange(C.view,get_turf(C.eye))) && !(locate(/turf/simulated/open) in trange(C.view,get_turf(C.eye)))) - return - //ACTUALLY MOVING THE PARALLAX - var/turf/posobj = get_turf(C.eye) + var/turf/posobj = C.eye ? C.eye:loc : C.mob:loc + if (!isturf(posobj)) + posobj = get_turf(posobj) + + if(!(locate(/turf/space) in RANGE_TURFS(C.view, posobj)) && !(locate(/turf/simulated/open) in RANGE_TURFS(C.view, posobj))) + return if(!C.previous_turf || (C.previous_turf.z != posobj.z)) C.previous_turf = posobj //Doing it this way prevents parallax layers from "jumping" when you change Z-Levels. - var/offsetx = C.parallax_offset["horizontal"] + posobj.x - C.previous_turf.x - var/offsety = C.parallax_offset["vertical"] + posobj.y - C.previous_turf.y - C.parallax_offset["horizontal"] = offsetx - C.parallax_offset["vertical"] = offsety + C.parallax_offset_x += posobj.x - C.previous_turf.x + C.parallax_offset_y += posobj.y - C.previous_turf.y C.previous_turf = posobj - for(var/obj/screen/parallax/bgobj in C.parallax_movable) - var/accumulated_offset_x = bgobj.base_offset_x - round(offsetx * bgobj.parallax_speed * C.prefs.parallax_speed) - var/accumulated_offset_y = bgobj.base_offset_y - round(offsety * bgobj.parallax_speed * C.prefs.parallax_speed) + var/offsetx = C.parallax_offset_x * C.prefs.parallax_speed + var/offsety = C.parallax_offset_y * C.prefs.parallax_speed - if(accumulated_offset_x > PARALLAX_IMAGE_WIDTH*WORLD_ICON_SIZE) - accumulated_offset_x -= PARALLAX_IMAGE_WIDTH*WORLD_ICON_SIZE*GRID_WIDTH //3x3 grid, 15 tiles * 64 icon_size * 3 grid size - if(accumulated_offset_x < -(PARALLAX_IMAGE_WIDTH*WORLD_ICON_SIZE*2)) - accumulated_offset_x += PARALLAX_IMAGE_WIDTH*WORLD_ICON_SIZE*GRID_WIDTH + for(var/thing in C.parallax_movable) + var/obj/screen/parallax/bgobj = thing + var/accumulated_offset_x = bgobj.base_offset_x - round(offsetx * bgobj.parallax_speed) + var/accumulated_offset_y = bgobj.base_offset_y - round(offsety * bgobj.parallax_speed) - if(accumulated_offset_y > PARALLAX_IMAGE_WIDTH*WORLD_ICON_SIZE) - accumulated_offset_y -= PARALLAX_IMAGE_WIDTH*WORLD_ICON_SIZE*GRID_WIDTH - if(accumulated_offset_y < -(PARALLAX_IMAGE_WIDTH*WORLD_ICON_SIZE*2)) - accumulated_offset_y += PARALLAX_IMAGE_WIDTH*WORLD_ICON_SIZE*GRID_WIDTH + if(accumulated_offset_x > PARALLAX_SCALED_WIDTH) + accumulated_offset_x -= PARALLAX_SCALED_GRID_WIDTH //3x3 grid, 15 tiles * 64 icon_size * 3 grid size + if(accumulated_offset_x < -(PARALLAX_SCALED_WIDTH*2)) + accumulated_offset_x += PARALLAX_SCALED_GRID_WIDTH + + if(accumulated_offset_y > PARALLAX_SCALED_WIDTH) + accumulated_offset_y -= PARALLAX_SCALED_GRID_WIDTH + if(accumulated_offset_y < -(PARALLAX_SCALED_WIDTH*2)) + accumulated_offset_y += PARALLAX_SCALED_GRID_WIDTH bgobj.screen_loc = "CENTER:[accumulated_offset_x],CENTER:[accumulated_offset_y]" @@ -259,3 +261,5 @@ #undef PARALLAX2_ICON_NUMBER #undef PARALLAX_IMAGE_WIDTH #undef PARALLAX_IMAGE_TILES +#undef PARALLAX_SCALED_WIDTH +#undef PARALLAX_SCALED_GRID_WIDTH diff --git a/code/modules/client/client defines.dm b/code/modules/client/client defines.dm index 9b227dd1865..3eb59afa59b 100644 --- a/code/modules/client/client defines.dm +++ b/code/modules/client/client defines.dm @@ -66,7 +66,8 @@ //////////// var/list/parallax = list() var/list/parallax_movable = list() - var/list/parallax_offset = list() + var/parallax_offset_x = 0 + var/parallax_offset_y = 0 var/turf/previous_turf = null var/obj/screen/plane_master/parallax_master/parallax_master = null var/obj/screen/plane_master/parallax_dustmaster/parallax_dustmaster = null