From 623a1051698424f0a80eed1e5586163fc737d1b8 Mon Sep 17 00:00:00 2001 From: duncathan salt Date: Fri, 8 Dec 2017 12:06:51 -0600 Subject: [PATCH 1/2] hopefully optimizes process_cell() a touch (#33329) * hopeful optimizations + code cleanup to process_cell() and lindaturftile * minor fixes * break and right paren * extraneous define --- .../environmental/LINDA_turf_tile.dm | 145 ++++++++---------- 1 file changed, 62 insertions(+), 83 deletions(-) diff --git a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm index 5ef9469295..f2d1a241f2 100644 --- a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm +++ b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm @@ -7,7 +7,7 @@ //list of open turfs adjacent to us var/list/atmos_adjacent_turfs //bitfield of dirs in which we are superconducitng - var/atmos_supeconductivity = 0 + var/atmos_supeconductivity = NONE //used to determine whether we should archive var/archived_cycle = 0 @@ -25,8 +25,7 @@ var/pressure_direction = 0 var/datum/excited_group/excited_group - var/excited = 0 - var/recently_active = 0 + var/excited = FALSE var/datum/gas_mixture/turf/air var/obj/effect/hotspot/active_hotspot @@ -54,10 +53,10 @@ /turf/open/assume_air(datum/gas_mixture/giver) //use this for machines to adjust air if(!giver) - return 0 + return FALSE air.merge(giver) update_visuals() - return 1 + return TRUE /turf/open/remove_air(amount) var/datum/gas_mixture/ours = return_air() @@ -83,7 +82,7 @@ /turf/temperature_expose() if(temperature > heat_capacity) - to_be_destroyed = 1 + to_be_destroyed = TRUE /turf/proc/archive() temperature_archived = temperature @@ -102,7 +101,7 @@ #if DM_VERSION >= 513 #warning 512 is stable now for sure, remove the old code #endif - + #if DM_VERSION >= 512 if (atmos_overlay_types) for(var/overlay in atmos_overlay_types-new_overlay_types) //doesn't remove overlays that would only be added @@ -175,64 +174,48 @@ for(var/t in adjacent_turfs) var/turf/open/enemy_tile = t - if(fire_count > enemy_tile.current_cycle) - enemy_tile.archive() + if(fire_count <= enemy_tile.current_cycle) + continue + enemy_tile.archive() - /******************* GROUP HANDLING START *****************************************************************/ + /******************* GROUP HANDLING START *****************************************************************/ - var/should_share_air = FALSE - var/datum/gas_mixture/enemy_air = enemy_tile.air - if(enemy_tile.excited) - //cache for sanic speed - var/datum/excited_group/enemy_excited_group = enemy_tile.excited_group - if(our_excited_group) - if(enemy_excited_group) - if(our_excited_group != enemy_excited_group) - //combine groups (this also handles updating the excited_group var of all involved turfs) - our_excited_group.merge_groups(enemy_excited_group) - our_excited_group = excited_group //update our cache - should_share_air = TRUE - else - if((recently_active == 1 && enemy_tile.recently_active == 1) || our_air.compare(enemy_air)) - our_excited_group.add_turf(enemy_tile) //add enemy to our group - should_share_air = TRUE + var/should_share_air = FALSE + var/datum/gas_mixture/enemy_air = enemy_tile.air + + //cache for sanic speed + var/datum/excited_group/enemy_excited_group = enemy_tile.excited_group + + if(our_excited_group && enemy_excited_group) + if(our_excited_group != enemy_excited_group) + //combine groups (this also handles updating the excited_group var of all involved turfs) + our_excited_group.merge_groups(enemy_excited_group) + our_excited_group = excited_group //update our cache + should_share_air = TRUE + + else if(our_air.compare(enemy_air)) + if(!enemy_tile.excited) + SSair.add_to_active(enemy_tile) + var/datum/excited_group/EG = our_excited_group || enemy_excited_group || new + if(!our_excited_group) + EG.add_turf(src) + if(!enemy_excited_group) + EG.add_turf(enemy_tile) + our_excited_group = excited_group + should_share_air = TRUE + + //air sharing + if(should_share_air) + var/difference = our_air.share(enemy_air, adjacent_turfs_length) + if(difference) + if(difference > 0) + consider_pressure_difference(enemy_tile, difference) else - if(enemy_excited_group) - if((recently_active == 1 && enemy_tile.recently_active == 1) || our_air.compare(enemy_air)) - enemy_excited_group.add_turf(src) //join self to enemy group - our_excited_group = excited_group //update our cache - should_share_air = TRUE - else - if((recently_active == 1 && enemy_tile.recently_active == 1) || our_air.compare(enemy_air)) - var/datum/excited_group/EG = new //generate new group - EG.add_turf(src) - EG.add_turf(enemy_tile) - our_excited_group = excited_group //update our cache - should_share_air = TRUE - else - if(our_air.compare(enemy_air)) //compare if - SSair.add_to_active(enemy_tile) //excite enemy - if(our_excited_group) - our_excited_group.add_turf(enemy_tile) //add enemy to group - else - var/datum/excited_group/EG = new //generate new group - EG.add_turf(src) - EG.add_turf(enemy_tile) - our_excited_group = excited_group //update our cache - should_share_air = TRUE - - //air sharing - if(should_share_air) - var/difference = our_air.share(enemy_air, adjacent_turfs_length) - if(difference) - if(difference > 0) - consider_pressure_difference(enemy_tile, difference) - else - enemy_tile.consider_pressure_difference(src, -difference) - LAST_SHARE_CHECK + enemy_tile.consider_pressure_difference(src, -difference) + LAST_SHARE_CHECK - /******************* GROUP HANDLING FINISH *********************************************************************/ + /******************* GROUP HANDLING FINISH *********************************************************************/ if (planet_atmos) //share our air with the "atmosphere" "above" the turf var/datum/gas_mixture/G = new @@ -250,12 +233,8 @@ update_visuals() - var/remove = TRUE - if(our_air.temperature > MINIMUM_TEMPERATURE_START_SUPERCONDUCTION) - if(consider_superconductivity(starting = 1)) - remove = FALSE - - if ((!our_excited_group && remove) || (cached_atmos_cooldown > (EXCITED_GROUP_DISMANTLE_CYCLES * 2))) + if((!our_excited_group && !(our_air.temperature > MINIMUM_TEMPERATURE_START_SUPERCONDUCTION && consider_superconductivity(starting = TRUE))) \ + || (cached_atmos_cooldown > (EXCITED_GROUP_DISMANTLE_CYCLES * 2))) SSair.remove_from_active(src) atmos_cooldown = cached_atmos_cooldown @@ -279,9 +258,9 @@ var/const/PROBABILITY_OFFSET = 25 var/const/PROBABILITY_BASE_PRECENT = 75 set waitfor = 0 - . = 0 + . = FALSE if (!anchored && !pulledby) - . = 1 + . = TRUE if (last_high_pressure_movement_air_cycle < SSair.times_fired) var/move_prob = 100 if (pressure_resistance > 0) @@ -304,7 +283,6 @@ /datum/excited_group/proc/add_turf(turf/open/T) turf_list += T T.excited_group = src - T.recently_active = 1 reset_cooldowns() /datum/excited_group/proc/merge_groups(datum/excited_group/E) @@ -328,25 +306,27 @@ dismantle_cooldown = 0 //argument is so world start can clear out any turf differences quickly. -/datum/excited_group/proc/self_breakdown(space_is_all_consuming = 0) +/datum/excited_group/proc/self_breakdown(space_is_all_consuming = FALSE) var/datum/gas_mixture/A = new //make local for sanic speed var/list/A_gases = A.gases var/list/turf_list = src.turf_list var/turflen = turf_list.len - var/space_in_group = 0 + var/space_in_group = FALSE for(var/t in turf_list) var/turf/open/T = t if (space_is_all_consuming && !space_in_group && istype(T.air, /datum/gas_mixture/immutable/space)) - space_in_group = 1 + space_in_group = TRUE qdel(A) - A = new/datum/gas_mixture/immutable/space() + A = new /datum/gas_mixture/immutable/space() + A_gases = A.gases //update the cache + break A.merge(T.air) for(var/id in A_gases) - A_gases[id][MOLES] = A_gases[id][MOLES]/turflen + A_gases[id][MOLES] /= turflen for(var/t in turf_list) var/turf/open/T = t @@ -359,8 +339,7 @@ /datum/excited_group/proc/dismantle() for(var/t in turf_list) var/turf/open/T = t - T.excited = 0 - T.recently_active = 0 + T.excited = FALSE T.excited_group = null SSair.active_turfs -= T garbage_collect() @@ -432,7 +411,7 @@ //Make sure still hot enough to continue conducting heat if(temp < MINIMUM_TEMPERATURE_FOR_SUPERCONDUCTION) SSair.active_super_conductivity -= src - return 0 + return FALSE /turf/open/finish_superconduction() //Conduct with air on my tile if I have it @@ -442,21 +421,21 @@ /turf/proc/consider_superconductivity() if(!thermal_conductivity) - return 0 + return FALSE SSair.active_super_conductivity |= src - return 1 + return TRUE /turf/open/consider_superconductivity(starting) if(air.temperature < (starting?MINIMUM_TEMPERATURE_START_SUPERCONDUCTION:MINIMUM_TEMPERATURE_FOR_SUPERCONDUCTION)) - return 0 + return FALSE if(air.heat_capacity() < M_CELL_WITH_RATIO) // Was: MOLES_CELLSTANDARD*0.1*0.05 Since there are no variables here we can make this a constant. - return 0 + return FALSE return ..() /turf/closed/consider_superconductivity(starting) if(temperature < (starting?MINIMUM_TEMPERATURE_START_SUPERCONDUCTION:MINIMUM_TEMPERATURE_FOR_SUPERCONDUCTION)) - return 0 + return FALSE return ..() /turf/proc/radiate_to_spess() //Radiate excess tile heat to space @@ -465,7 +444,7 @@ if((heat_capacity > 0) && (abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER)) var/heat = thermal_conductivity*delta_temperature* \ - (heat_capacity*700000/(heat_capacity+700000)) //700000 is the heat_capacity from a space turf, hardcoded here + (heat_capacity*HEAT_CAPACITY_VACUUM/(heat_capacity+HEAT_CAPACITY_VACUUM)) temperature -= heat/heat_capacity /turf/open/proc/temperature_share_open_to_solid(turf/sharer)