Merge pull request #5967 from Citadel-Station-13/upstream-merge-36130

[MIRROR] [READY] Refactors wet floors to a component
This commit is contained in:
deathride58
2018-03-17 23:47:15 +00:00
committed by GitHub
23 changed files with 240 additions and 174 deletions
+3 -3
View File
@@ -304,6 +304,9 @@
if(AM && isturf(AM.loc))
step(AM, turn(AM.dir, 180))
/atom/proc/handle_slip(mob/living/carbon/C, knockdown_amount, obj/O, lube)
return
//returns the mob's dna info as a list, to be inserted in an object's blood_DNA list
/mob/living/proc/get_blood_dna_list()
if(get_blood_id() != "blood")
@@ -354,9 +357,6 @@
/atom/proc/handle_fall()
return
/atom/proc/handle_slip()
return
/atom/proc/singularity_act()
return
+1 -1
View File
@@ -202,6 +202,6 @@
var/turf/T = get_turf(loc)
if(isopenturf(T))
var/turf/open/theturf = T
theturf.MakeSlippery(TURF_WET_WATER, min_wet_time = 10, wet_time_to_add = 5)
theturf.MakeSlippery(TURF_WET_WATER, min_wet_time = 10 SECONDS, wet_time_to_add = 5 SECONDS)
user.visible_message("[user] empties out \the [src] onto the floor using the release valve.", "<span class='info'>You quietly empty out \the [src] using its release valve.</span>")
@@ -43,8 +43,7 @@
for(var/turf/T in view(freeze_range,loc))
if(isfloorturf(T))
var/turf/open/floor/F = T
F.wet = TURF_WET_PERMAFROST
addtimer(CALLBACK(F, /turf/open/floor.proc/MakeDry, TURF_WET_PERMAFROST), rand(3000, 3100))
F.MakeSlippery(TURF_WET_PERMAFROST, 6 MINUTES)
for(var/mob/living/carbon/L in T)
L.adjustStaminaLoss(stamina_damage)
L.adjust_bodytemperature(-230)
+1 -1
View File
@@ -247,7 +247,7 @@
soundloop.stop()
if(isopenturf(loc))
var/turf/open/tile = loc
tile.MakeSlippery(TURF_WET_WATER, min_wet_time = 5, wet_time_to_add = 1)
tile.MakeSlippery(TURF_WET_WATER, min_wet_time = 5 SECONDS, wet_time_to_add = 1 SECONDS)
/obj/machinery/shower/attackby(obj/item/I, mob/user, params)
+19 -124
View File
@@ -1,12 +1,16 @@
/turf/open
var/slowdown = 0 //negative for faster, positive for slower
var/wet = 0
var/wet_time = 0 // Time in seconds that this floor will be wet for.
var/mutable_appearance/wet_overlay
var/postdig_icon_change = FALSE
var/postdig_icon
var/list/archdrops
var/wet
/turf/open/Initialize()
. = ..()
if(wet)
AddComponent(/datum/component/wet_floor, wet, INFINITY, 0, INFINITY, TRUE)
/turf/open/indestructible
name = "floor"
@@ -164,11 +168,11 @@
for(var/mob/living/L in contents)
if(L.bodytemperature <= 50)
L.apply_status_effect(/datum/status_effect/freon)
MakeSlippery(TURF_WET_PERMAFROST, 5)
MakeSlippery(TURF_WET_PERMAFROST, 50)
return 1
/turf/open/proc/water_vapor_gas_act()
MakeSlippery(TURF_WET_WATER, min_wet_time = 10, wet_time_to_add = 5)
MakeSlippery(TURF_WET_WATER, min_wet_time = 100, wet_time_to_add = 50)
for(var/mob/living/simple_animal/slime/M in src)
M.apply_water()
@@ -177,7 +181,7 @@
for(var/obj/effect/O in src)
if(is_cleanable(O))
qdel(O)
return 1
return TRUE
/turf/open/handle_slip(mob/living/carbon/C, knockdown_amount, obj/O, lube)
if(C.movement_type & FLYING)
@@ -224,132 +228,23 @@
/turf/open/copyTurf(turf/T)
. = ..()
if(. && isopenturf(T) && wet_time)
var/turf/open/O = T
O.MakeSlippery(wet_setting = wet, wet_time_to_add = wet_time) //we're copied, copy how wet we are also
if(. && isopenturf(T))
GET_COMPONENT(slip, /datum/component/wet_floor)
if(slip)
var/datum/component/wet_floor/WF = T.AddComponent(/datum/component/wet_floor)
WF.InheritComponent(slip)
/turf/open/proc/MakeSlippery(wet_setting = TURF_WET_WATER, min_wet_time = 0, wet_time_to_add = 0) // 1 = Water, 2 = Lube, 3 = Ice, 4 = Permafrost, 5 = Slide
wet_time = max(wet_time+wet_time_to_add, min_wet_time)
if(wet >= wet_setting)
return
wet = wet_setting
UpdateSlip()
if(wet_setting != TURF_DRY)
if(wet_overlay)
cut_overlay(wet_overlay)
else
wet_overlay = mutable_appearance()
var/turf/open/floor/F = src
if(istype(F))
if(wet_setting == TURF_WET_PERMAFROST)
wet_overlay.icon = 'icons/effects/water.dmi'
wet_overlay.icon_state = "ice_floor"
else if(wet_setting == TURF_WET_ICE)
wet_overlay.icon = 'icons/turf/overlays.dmi'
wet_overlay.icon_state = "snowfloor"
else
wet_overlay.icon = 'icons/effects/water.dmi'
wet_overlay.icon_state = "wet_floor_static"
else
wet_overlay.icon = 'icons/effects/water.dmi'
wet_overlay.icon_state = "wet_static"
add_overlay(wet_overlay)
HandleWet()
/turf/open/proc/MakeSlippery(wet_setting = TURF_WET_WATER, min_wet_time = 0, wet_time_to_add = 0, max_wet_time = MAXIMUM_WET_TIME, permanent)
AddComponent(/datum/component/wet_floor, wet_setting, min_wet_time, wet_time_to_add, max_wet_time, permanent)
/turf/open/proc/UpdateSlip()
var/intensity
var/lube_flags
switch(wet)
if(TURF_WET_WATER)
intensity = 60
lube_flags = NO_SLIP_WHEN_WALKING
if(TURF_WET_LUBE)
intensity = 80
lube_flags = SLIDE | GALOSHES_DONT_HELP
if(TURF_WET_ICE)
intensity = 120
lube_flags = SLIDE | GALOSHES_DONT_HELP
if(TURF_WET_PERMAFROST)
intensity = 120
lube_flags = SLIDE_ICE | GALOSHES_DONT_HELP
else
qdel(GetComponent(/datum/component/slippery))
return
var/datum/component/slippery/S = LoadComponent(/datum/component/slippery, NONE, CALLBACK(src, .proc/AfterSlip))
S.intensity = intensity
S.lube_flags = lube_flags
/turf/open/proc/AfterSlip(mob/living/L)
if(wet == TURF_WET_LUBE)
L.confused = max(L.confused, 8)
/turf/open/proc/MakeDry(wet_setting = TURF_WET_WATER)
if(wet > wet_setting || !wet)
return
spawn(rand(0,20))
if(wet == TURF_WET_PERMAFROST)
wet = TURF_WET_ICE
else if(wet == TURF_WET_ICE)
wet = TURF_WET_WATER
else
wet = TURF_DRY
if(wet_overlay)
cut_overlay(wet_overlay)
UpdateSlip()
/turf/open/proc/HandleWet()
if(!wet)
//It's possible for this handler to get called after all the wetness is
//cleared, so bail out if that is the case
return
if(!wet_time && wet < TURF_WET_ICE)
MakeDry(TURF_WET_ICE)
if(wet_time > MAXIMUM_WET_TIME)
wet_time = MAXIMUM_WET_TIME
if(wet == TURF_WET_ICE && air.temperature > T0C)
for(var/obj/O in contents)
if(O.flags_2 & FROZEN_2)
O.make_unfrozen()
MakeDry(TURF_WET_ICE)
MakeSlippery(TURF_WET_WATER)
if(wet != TURF_WET_PERMAFROST)
switch(air.temperature)
if(-INFINITY to T0C)
if(wet != TURF_WET_ICE && wet)
MakeDry(TURF_WET_ICE)
MakeSlippery(TURF_WET_ICE)
if(T0C to T20C)
wet_time = max(0, wet_time-1)
if(T20C to T0C + 40)
wet_time = max(0, wet_time-2)
if(T0C + 40 to T0C + 60)
wet_time = max(0, wet_time-3)
if(T0C + 60 to T0C + 80)
wet_time = max(0, wet_time-5)
if(T0C + 80 to T0C + 100)
wet_time = max(0, wet_time-10)
if(T0C + 100 to INFINITY)
wet_time = 0
else if (GetTemperature() > BODYTEMP_COLD_DAMAGE_LIMIT) //seems like a good place
MakeDry(TURF_WET_PERMAFROST)
else
wet_time = max(0, wet_time-5)
if(wet && wet < TURF_WET_ICE && !wet_time)
MakeDry(TURF_WET_ICE)
if(!wet && wet_time)
wet_time = 0
if(wet)
addtimer(CALLBACK(src, .proc/HandleWet), 15, TIMER_UNIQUE)
/turf/open/proc/MakeDry(wet_setting = TURF_WET_WATER, immediate = FALSE, amount = INFINITY)
SendSignal(COMSIG_TURF_MAKE_DRY, wet_setting, immediate, amount)
/turf/open/get_dumping_location()
return src
/turf/open/proc/ClearWet()//Nuclear option of immediately removing slipperyness from the tile instead of the natural drying over time
wet = TURF_DRY
UpdateSlip()
if(wet_overlay)
cut_overlay(wet_overlay)
qdel(GetComponent(/datum/component/wet_floor))
/turf/open/rad_act(pulse_strength)
. = ..()
+2 -2
View File
@@ -21,10 +21,10 @@
GET_COMPONENT(chasm_component, /datum/component/chasm)
chasm_component.drop(AM)
/turf/open/chasm/MakeSlippery(wet_setting = TURF_WET_WATER, min_wet_time = 0, wet_time_to_add = 0)
/turf/open/chasm/MakeSlippery()
return
/turf/open/chasm/MakeDry(wet_setting = TURF_WET_WATER)
/turf/open/chasm/MakeDry()
return
/turf/open/chasm/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir)
@@ -33,10 +33,10 @@
/turf/open/floor/plating/asteroid/burn_tile()
return
/turf/open/floor/plating/asteroid/MakeSlippery(wet_setting = TURF_WET_WATER, min_wet_time = 0, wet_time_to_add = 0)
/turf/open/floor/plating/asteroid/MakeSlippery()
return
/turf/open/floor/plating/asteroid/MakeDry(wet_setting = TURF_WET_WATER)
/turf/open/floor/plating/asteroid/MakeDry()
return
/turf/open/floor/plating/asteroid/attackby(obj/item/W, mob/user, params)
@@ -143,22 +143,15 @@
planetary_atmos = TRUE
baseturfs = /turf/open/floor/plating/ice
slowdown = 1
wet = TURF_WET_PERMAFROST
attachment_holes = FALSE
/turf/open/floor/plating/ice/Initialize()
. = ..()
UpdateSlip()
MakeSlippery(TURF_WET_PERMAFROST, INFINITY, 0, INFINITY, TRUE)
/turf/open/floor/plating/ice/try_replace_tile(obj/item/stack/tile/T, mob/user, params)
return
/turf/open/floor/plating/ice/HandleWet()
if(wet == TURF_WET_ICE)
return
..()
MakeSlippery(TURF_WET_ICE) //rewet after ..() clears out lube/ice etc.
/turf/open/floor/plating/ice/smooth
icon_state = "smooth"
smooth = SMOOTH_MORE | SMOOTH_BORDER
+1 -1
View File
@@ -14,7 +14,7 @@
/turf/open/lava/ex_act(severity, target)
contents_explosion(severity, target)
/turf/open/lava/MakeSlippery(wet_setting = TURF_WET_WATER, min_wet_time = 0, wet_time_to_add = 0)
/turf/open/lava/MakeSlippery()
return
/turf/open/lava/MakeDry(wet_setting = TURF_WET_WATER)
+3 -6
View File
@@ -7,10 +7,7 @@
initial_gas_mix = LAVALAND_DEFAULT_ATMOS
planetary_atmos = TRUE
slowdown = 1
wet = TURF_WET_WATER
/turf/open/water/HandleWet()
if(wet == TURF_WET_WATER)
return
..()
MakeSlippery(TURF_WET_WATER) //rewet after ..() clears out lube/ice etc.
/turf/open/water/Initialize()
. = ..()
MakeSlippery(TURF_WET_WATER, INFINITY, 0, INFINITY, TRUE)
+4 -4
View File
@@ -84,6 +84,9 @@
/turf/open/space/proc/CanBuildHere()
return TRUE
/turf/open/space/handle_slip()
return
/turf/open/space/attackby(obj/item/C, mob/user, params)
..()
if(!CanBuildHere())
@@ -162,10 +165,7 @@
A.newtonian_move(A.inertia_dir)
/turf/open/space/MakeSlippery(wet_setting = TURF_WET_WATER, min_wet_time = 0, wet_time_to_add = 0)
return
/turf/open/space/handle_slip()
/turf/open/space/MakeSlippery()
return
/turf/open/space/singularity_act()