mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-09 16:14:13 +00:00
62 lines
1.5 KiB
Plaintext
62 lines
1.5 KiB
Plaintext
// module datum.
|
|
// this is per-object instance, and shows the condition of the modules in the object
|
|
// actual modules needed is referenced through modulestypes and the object type
|
|
|
|
/datum/module
|
|
var/status // bits set if working, 0 if broken
|
|
var/installed // bits set if installed, 0 if missing
|
|
|
|
// moduletypes datum
|
|
// this is per-object type, and shows the modules needed for a type of object
|
|
|
|
/datum/moduletypes
|
|
var/list/modcount = list() // assoc list of the count of modules for a type
|
|
|
|
|
|
var/list/modules = list( // global associative list
|
|
"/obj/machinery/power/apc" = "card_reader,power_control,id_auth,cell_power,cell_charge")
|
|
|
|
|
|
/datum/module/New(var/obj/O)
|
|
|
|
var/type = O.type // the type of the creating object
|
|
|
|
var/mneed = mods.inmodlist(type) // find if this type has modules defined
|
|
|
|
if(!mneed) // not found in module list?
|
|
qdel(src) // used to delete self, thus ending proc
|
|
return
|
|
|
|
var/needed = mods.getbitmask(type) // get a bitmask for the number of modules in this object
|
|
status = needed
|
|
installed = needed
|
|
|
|
/datum/moduletypes/proc/addmod(var/type, var/modtextlist)
|
|
modules += type // index by type text
|
|
modules[type] = modtextlist
|
|
|
|
/datum/moduletypes/proc/inmodlist(var/type)
|
|
return ("[type]" in modules)
|
|
|
|
/datum/moduletypes/proc/getbitmask(var/type)
|
|
var/count = modcount["[type]"]
|
|
if(count)
|
|
return 2**count-1
|
|
|
|
var/modtext = modules["[type]"]
|
|
var/num = 1
|
|
var/pos = 1
|
|
|
|
while(1)
|
|
pos = findtext(modtext, ",", pos, 0)
|
|
if(!pos)
|
|
break
|
|
else
|
|
pos++
|
|
num++
|
|
|
|
modcount += "[type]"
|
|
modcount["[type]"] = num
|
|
|
|
return 2**num-1
|