Files
2020-02-19 19:48:29 -08:00

88 lines
2.3 KiB
Plaintext

#define FLUID_SPAWNER_TURF_BLOCKED(t) (!t || (t.active_liquid && t.active_liquid.group && t.active_liquid.group.amt_per_tile >= 300) || !t.ocean_canpass())
var/global/ocean_reagent_id = "water"
var/global/ocean_name = "ocean"
var/global/datum/color/ocean_color = 0
datum/controller/process/fluid_turfs
var/tmp/list/processing_fluid_turfs
var/add_reagent_amount = 500
var/do_light_gen = 1
proc/handle_light_generating_turfs(var/lagcheck_at = LAG_REALTIME)
if (do_light_gen)
for (var/turf/space/fluid/F in light_generating_fluid_turfs)
F.make_light()
LAGCHECK(LAG_REALTIME)
light_generating_fluid_turfs.len = 0
/*
for (var/turf/space/fluid/F in light_generating_fluid_turfs)
var/bordering = 0
for (var/dir in cardinal)
var/turf/T = get_step(F,dir)
if(IS_VALID_FLUID_TURF(T) && !FLUID_SPAWNER_TURF_BLOCKED(T))
if (!(F in processing_fluid_turfs))
src.processing_fluid_turfs.Add(F)
if (!istype(T,/turf/space))
bordering = 1
if (bordering && !F.light)
F.make_light()
LAGCHECK(LAG_REALTIME)
light_generating_fluid_turfs.len = 0*/
setup()
name = "Fluid_Turfs"
schedule_interval = 50
src.processing_fluid_turfs = global.processing_fluid_turfs
SPAWN_DBG(20 SECONDS)
if (clients.len >= OSHAN_LIGHT_OVERLOAD)
do_light_gen = 0
handle_light_generating_turfs(90)
doWork()
var/adjacent_space = 0
var/adjacent_block = 0
var/turf/t
handle_light_generating_turfs()
for (var/turf/space/fluid/T in processing_fluid_turfs)
if (!T) continue
adjacent_space = 0
adjacent_block = 0
for (var/dir in cardinal)
LAGCHECK(LAG_HIGH)
t = get_step(T,dir)
if (t.turf_flags & CAN_BE_SPACE_SAMPLE)
adjacent_space += 1
continue
if (FLUID_SPAWNER_TURF_BLOCKED(t))
adjacent_block += 1
continue
if (t.active_liquid && t.active_liquid.group)
t.active_liquid.group.reagents.add_reagent(ocean_reagent_id,add_reagent_amount)
t.active_liquid.group.update_loop()
else
var/obj/fluid/F = t.fluid_react_single(ocean_reagent_id, add_reagent_amount)
if (F)
F.last_depth_level = 3 //lol hardcode for ocean depth when a new puddle forms
F.group.last_depth_level = 3
if (adjacent_space >= 4)
if (T.light)
T.light.disable()
if (adjacent_space + adjacent_block >= 4)
processing_fluid_turfs.Remove(T)