diff --git a/baystation12.dme b/baystation12.dme index a8ceac79f0..58d1d35007 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -96,6 +96,29 @@ #include "code\controllers\subsystems.dm" #include "code\controllers\verbs.dm" #include "code\controllers\voting.dm" +#include "code\controllers\Processes\air.dm" +#include "code\controllers\Processes\disease.dm" +#include "code\controllers\Processes\emergencyShuttle.dm" +#include "code\controllers\Processes\event.dm" +#include "code\controllers\Processes\inactivity.dm" +#include "code\controllers\Processes\lighting.dm" +#include "code\controllers\Processes\machinery.dm" +#include "code\controllers\Processes\mob.dm" +#include "code\controllers\Processes\nanoui.dm" +#include "code\controllers\Processes\obj.dm" +#include "code\controllers\Processes\pipenet.dm" +#include "code\controllers\Processes\powernet.dm" +#include "code\controllers\Processes\Shuttle.dm" +#include "code\controllers\Processes\sun.dm" +#include "code\controllers\Processes\supply.dm" +#include "code\controllers\Processes\ticker.dm" +#include "code\controllers\Processes\vote.dm" +#include "code\controllers\ProcessScheduler\core\_define.dm" +#include "code\controllers\ProcessScheduler\core\_stubs.dm" +#include "code\controllers\ProcessScheduler\core\process.dm" +#include "code\controllers\ProcessScheduler\core\processScheduler.dm" +#include "code\controllers\ProcessScheduler\core\updateQueue.dm" +#include "code\controllers\ProcessScheduler\core\updateQueueWorker.dm" #include "code\controllers\subsystem\alarms.dm" #include "code\datums\ai_laws.dm" #include "code\datums\browser.dm" diff --git a/code/controllers/master_controller.dm b/code/controllers/master_controller.dm index bb5a3e48b0..7e52419905 100644 --- a/code/controllers/master_controller.dm +++ b/code/controllers/master_controller.dm @@ -5,7 +5,6 @@ var/global/datum/controller/game_controller/master_controller //Set in world.New() var/global/controller_iteration = 0 -var/global/last_tick_timeofday = world.timeofday var/global/last_tick_duration = 0 var/global/air_processing_killed = 0 @@ -53,8 +52,8 @@ datum/controller/game_controller/New() if(!syndicate_code_phrase) syndicate_code_phrase = generate_code_phrase() if(!syndicate_code_response) syndicate_code_response = generate_code_phrase() - if(!emergency_shuttle) emergency_shuttle = new /datum/emergency_shuttle_controller() - if(!shuttle_controller) shuttle_controller = new /datum/shuttle_controller() +// if(!emergency_shuttle) emergency_shuttle = new /datum/emergency_shuttle_controller() // handled in scheduler +// if(!shuttle_controller) shuttle_controller = new /datum/shuttle_controller() datum/controller/game_controller/proc/setup() world.tick_lag = config.Ticklag @@ -65,12 +64,12 @@ datum/controller/game_controller/proc/setup() spawn(20) createRandomZlevel() - if(!air_master) +/* if(!air_master) // handled in scheduler air_master = new /datum/controller/air_system() air_master.Setup() if(!ticker) - ticker = new /datum/controller/gameticker() + ticker = new /datum/controller/gameticker()*/ setup_objects() setupgenetics() @@ -80,11 +79,11 @@ datum/controller/game_controller/proc/setup() transfer_controller = new - spawn(0) +/* spawn(0) // handled in scheduler if(ticker) ticker.pregame() - lighting_controller.initializeLighting() + lighting_controller.initializeLighting()*/ datum/controller/game_controller/proc/setup_objects() @@ -135,10 +134,6 @@ datum/controller/game_controller/proc/process() while(1) //far more efficient than recursively calling ourself if(!Failsafe) new /datum/controller/failsafe() - var/currenttime = world.timeofday - last_tick_duration = (currenttime - last_tick_timeofday) / 10 - last_tick_timeofday = currenttime - if(processing) var/timer var/start_time = world.timeofday diff --git a/code/datums/sun.dm b/code/datums/sun.dm index 6ffb77a78d..a78c89ac46 100644 --- a/code/datums/sun.dm +++ b/code/datums/sun.dm @@ -17,9 +17,9 @@ solar_next_update = world.time // init the timer angle = rand (0,360) // the station position to the sun is randomised at round start -/hook/startup/proc/createSun() +/*/hook/startup/proc/createSun() // handled in scheduler sun = new /datum/sun() - return 1 + return 1*/ // calculate the sun's position given the time of day // at the standard rate (100%) the angle is increase/decreased by 6 degrees every minute. diff --git a/code/game/gamemodes/gameticker.dm b/code/game/gamemodes/gameticker.dm index ad624aec9b..a431e697f1 100644 --- a/code/game/gamemodes/gameticker.dm +++ b/code/game/gamemodes/gameticker.dm @@ -156,9 +156,12 @@ var/global/datum/controller/gameticker/ticker if(admins_number == 0) send2adminirc("Round has started with no admins online.") - supply_controller.process() //Start the supply shuttle regenerating points -- TLE +/* supply_controller.process() //Start the supply shuttle regenerating points -- TLE // handled in scheduler master_controller.process() //Start master_controller.process() lighting_controller.process() //Start processing DynamicAreaLighting updates + */ + + processScheduler.start() for(var/obj/multiz/ladder/L in world) L.connect() //Lazy hackfix for ladders. TODO: move this to an actual controller. ~ Z @@ -313,7 +316,7 @@ var/global/datum/controller/gameticker/ticker mode.process() - emergency_shuttle.process() +// emergency_shuttle.process() //handled in scheduler var/game_finished = 0 var/mode_finished = 0 diff --git a/code/game/gamemodes/malfunction/malfunction.dm b/code/game/gamemodes/malfunction/malfunction.dm index 2ea49b24e4..4de2b75f00 100644 --- a/code/game/gamemodes/malfunction/malfunction.dm +++ b/code/game/gamemodes/malfunction/malfunction.dm @@ -89,7 +89,7 @@ /datum/game_mode/malfunction/process() if (apcs >= 3 && malf_mode_declared) - AI_win_timeleft -= ((apcs/6)*last_tick_duration) //Victory timer now de-increments based on how many APCs are hacked. --NeoFite + AI_win_timeleft -= ((apcs/6)*tickerProcess.getLastTickerTimeDuration()) //Victory timer now de-increments based on how many APCs are hacked. --NeoFite ..() if (AI_win_timeleft<=0) check_win() diff --git a/code/global.dm b/code/global.dm index fa07f74b1f..3836229649 100644 --- a/code/global.dm +++ b/code/global.dm @@ -259,3 +259,6 @@ var/max_explosion_range = 14 var/global/obj/item/device/radio/intercom/global_announcer = new(null) var/list/station_departments = list("Command", "Medical", "Engineering", "Science", "Security", "Cargo", "Civilian") + +var/global/const/TICKS_IN_DAY = 864000 +var/global/const/TICKS_IN_SECOND = 10 \ No newline at end of file diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 720abe8e2a..1d8c10e43c 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -798,20 +798,61 @@ note dizziness decrements automatically in the mob's Life() proc. stat(null,"CPU:\t[world.cpu]") stat(null,"Instances:\t[world.contents.len]") if(statpanel("Status") && master_controller) - stat(null,"MasterController-[last_tick_duration] ([master_controller.processing?"On":"Off"]-[controller_iteration])") +/* stat(null,"MasterController-[last_tick_duration] ([master_controller.processing?"On":"Off"]-[controller_iteration])") // all this is now under the scheduler stat(null,"Air-[master_controller.air_cost]\tSun-[master_controller.sun_cost]") stat(null,"Mob-[master_controller.mobs_cost]\t#[mob_list.len]") stat(null,"Dis-[master_controller.diseases_cost]\t#[active_diseases.len]") stat(null,"Mch-[master_controller.machines_cost]\t#[machines.len]") stat(null,"Obj-[master_controller.objects_cost]\t#[processing_objects.len]") stat(null,"Net-[master_controller.networks_cost]\tPnet-[master_controller.powernets_cost]") - stat(null,"NanoUI-[master_controller.nano_cost]\t#[nanomanager.processing_uis.len]") + stat(null,"NanoUI-[master_controller.nano_cost]\t#[nanomanager.processing_uis.len]")*/ stat(null,"Event-[master_controller.events_cost]\t#[event_manager.active_events.len]") alarm_manager.stat_entry() stat(null,"Tick-[master_controller.ticker_cost]\tALL-[master_controller.total_cost]") else stat(null,"MasterController-ERROR") + + if(processScheduler.getIsRunning()) + var/datum/controller/process/process + + process = processScheduler.getProcess("ticker") + stat(null, "TIC\t - #[process.getTicks()]\t - [process.getLastRunTime()]") + + process = processScheduler.getProcess("air") + stat(null, "AIR\t - #[process.getTicks()]\t - [process.getLastRunTime()]") + + process = processScheduler.getProcess("lighting") + stat(null, "LIG\t - #[process.getTicks()]\t - [process.getLastRunTime()]") + + process = processScheduler.getProcess("mob") + stat(null, "MOB([mob_list.len])\t - #[process.getTicks()]\t - [process.getLastRunTime()]") + + process = processScheduler.getProcess("machinery") + stat(null, "MAC([machines.len])\t - #[process.getTicks()]\t - [process.getLastRunTime()]") + + process = processScheduler.getProcess("obj") + stat(null, "OBJ([processing_objects.len])\t - #[process.getTicks()]\t - [process.getLastRunTime()]") + + process = processScheduler.getProcess("pipenet") + stat(null, "PIP([pipe_networks.len])\t - #[process.getTicks()]\t - [process.getLastRunTime()]") + + process = processScheduler.getProcess("powernet") + stat(null, "POW([powernets.len])\t - #[process.getTicks()]\t - [process.getLastRunTime()]") + + process = processScheduler.getProcess("nanoui") + stat(null, "NAN([nanomanager.processing_uis.len])\t - #[process.getTicks()]\t - [process.getLastRunTime()]") + + process = processScheduler.getProcess("disease") + stat(null, "DIS([active_diseases.len])\t - #[process.getTicks()]\t - [process.getLastRunTime()]") + + process = processScheduler.getProcess("sun") + stat(null, "SUN\t - #[process.getTicks()]\t - [process.getLastRunTime()]") + + else + stat(null, "processScheduler is not running.") + + if(listed_turf && client) if(!TurfAdjacent(listed_turf)) listed_turf = null diff --git a/code/world.dm b/code/world.dm index 2fd24cf9f5..8e5feb58a3 100644 --- a/code/world.dm +++ b/code/world.dm @@ -60,15 +60,22 @@ var/global/datum/global_init/init = new () // Create autolathe recipes, as above. populate_lathe_recipes() + processScheduler = new master_controller = new /datum/controller/game_controller() spawn(1) + + processScheduler.deferSetupFor(/datum/controller/process/ticker) + processScheduler.setup() + master_controller.setup() + + spawn(3000) //so we aren't adding to the round-start lag if(config.ToRban) ToRban_autoupdate() - if(config.kick_inactive) - KickInactiveClients() +/* if(config.kick_inactive) // handled in scheduler + KickInactiveClients()*/ #undef RECOMMENDED_VERSION @@ -209,6 +216,9 @@ var/world_topic_spam_protect_time = world.timeofday /*spawn(0) world << sound(pick('sound/AI/newroundsexy.ogg','sound/misc/apcdestroyed.ogg','sound/misc/bangindonk.ogg')) // random end sounds!! - LastyBatsy */ + + processScheduler.stop() + for(var/client/C in clients) if(config.server) //if you set a server location in config.txt, it sends you there instead of trying to reconnect to the same world address. -- NeoFite C << link("byond://[config.server]") @@ -228,7 +238,7 @@ var/world_topic_spam_protect_time = world.timeofday log_access("AFK: [key_name(C)]") C << "\red You have been inactive for more than 10 minutes and have been disconnected." del(C) -#undef INACTIVITY_KICK +//#undef INACTIVITY_KICK /hook/startup/proc/loadMode()