/
SSpersistent_data.dm
67 lines (58 loc) · 2.07 KB
/
SSpersistent_data.dm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/**
* # Persistent Data Subsystem
*
* Provides a centralised handler for persistent data reading and writing.
* The subsystem does not do any actual spawning itself, as this focuses on objects and mobs
* Should anything that is turf persistence related added in, that can be chucked into this SS
* Its quite a simple subsystem. For now, anyways.
*
*/
SUBSYSTEM_DEF(persistent_data)
name = "Persistent Data"
init_order = INIT_ORDER_PERSISTENCE // -95 | Loads after EVERYTHING else
flags = SS_NO_FIRE
/// List of atoms registered into the subsystem for persistent data storage. Can be anything at all
var/list/registered_atoms = list()
/// Set to true after a the end of the round to prevent griefing being saved
var/data_saved = FALSE
/datum/controller/subsystem/persistent_data/Initialize()
// Load all the data of registered atoms
for(var/atom/A in registered_atoms)
A.persistent_load()
/datum/controller/subsystem/persistent_data/Shutdown()
save()
/datum/controller/subsystem/persistent_data/proc/save()
// Stops data from being saved twice
if(data_saved)
return
data_saved = TRUE
// Save all the data of registered atoms
for(var/atom/A in registered_atoms)
A.persistent_save()
/**
* Proc to register an atom with SSpersistent_data
*
* This will add any provided atom to the list of registered atoms, and add it to the Initialization queue
* If the system has already initialized, it calls persistent_load() at that moment
*
* Arguments:
* * A - Atom to register
*/
/datum/controller/subsystem/persistent_data/proc/register(atom/A)
registered_atoms |= A
if(initialized)
A.persistent_load()
/**
* Atom Persistent Loader
*
* Overridden on every atom which needs to load persistent data
*/
/atom/proc/persistent_load()
stack_trace("peristent_load() called on an atom which does not have persistent data storage!")
/**
* Atom Persistent Saver
*
* Overridden on every atom which needs to save persistent data
*/
/atom/proc/persistent_save()
stack_trace("peristent_save() called on an atom which does not have persistent data storage!")