From 70170f0ddef700783b269ef5586b380db905daa1 Mon Sep 17 00:00:00 2001 From: Novacat <35587478+Novacat@users.noreply.github.com> Date: Thu, 13 May 2021 02:25:31 -0400 Subject: [PATCH] Allow more than one ore processor (#8072) * Allow more than one ore processor Port of https://github.com/VOREStation/VOREStation/pull/10280 * Forgot these files --- code/_helpers/global_lists.dm | 14 ++++++++++ .../mining/machinery/machine_processing.dm | 28 ++++++------------- code/modules/mining/mine_turfs.dm | 4 +-- code/modules/mining/mineral_effect.dm | 2 +- code/modules/mining/ore_datum.dm | 2 -- 5 files changed, 25 insertions(+), 25 deletions(-) diff --git a/code/_helpers/global_lists.dm b/code/_helpers/global_lists.dm index d6ce4723e5..f293a54444 100644 --- a/code/_helpers/global_lists.dm +++ b/code/_helpers/global_lists.dm @@ -71,6 +71,10 @@ var/global/list/endgame_safespawns = list() var/global/list/syndicate_access = list(access_maint_tunnels, access_syndicate, access_external_airlocks) +// Ores (for mining) +GLOBAL_LIST_EMPTY(ore_data) +GLOBAL_LIST_EMPTY(alloy_data) + // Strings which corraspond to bodypart covering flags, useful for outputting what something covers. var/global/list/string_part_flags = list( "head" = HEAD, @@ -215,6 +219,16 @@ var/global/list/string_slot_flags = list( var/datum/poster/P = new T NT_poster_designs += P + //Ores + paths = typesof(/ore)-/ore + for(var/oretype in paths) + var/ore/OD = new oretype() + GLOB.ore_data[OD.name] = OD + + paths = typesof(/datum/alloy)-/datum/alloy + for(var/alloytype in paths) + GLOB.alloy_data += new alloytype() + //Closet appearances paths = typesof(/decl/closet_appearance) for(var/T in paths) diff --git a/code/modules/mining/machinery/machine_processing.dm b/code/modules/mining/machinery/machine_processing.dm index 08e9decb3d..d9502882ef 100644 --- a/code/modules/mining/machinery/machine_processing.dm +++ b/code/modules/mining/machinery/machine_processing.dm @@ -71,7 +71,7 @@ for(var/ore in machine.ores_processing) if(!machine.ores_stored[ore] && !show_all_ores) continue - var/ore/O = ore_data[ore] + var/ore/O = GLOB.ore_data[ore] if(!O) continue dat += "[capitalize(O.display_name)][machine.ores_stored[ore]]" if(machine.ores_processing[ore]) @@ -165,7 +165,6 @@ var/sheets_per_tick = 10 var/list/ores_processing[0] var/list/ores_stored[0] - var/static/list/alloy_data var/active = FALSE var/tick = 0 @@ -192,24 +191,13 @@ "mhydrogen" = 40, "verdantium" = 60) -/obj/machinery/mineral/processing_unit/New() - ..() - // initialize static alloy_data list - if(!alloy_data) - alloy_data = list() - for(var/alloytype in typesof(/datum/alloy)-/datum/alloy) - alloy_data += new alloytype() - - // TODO - Initializing this here is insane. Put it in global lists init or something. ~Leshana - if(!ore_data || !ore_data.len) - for(var/oretype in typesof(/ore)-/ore) - var/ore/OD = new oretype() - ore_data[OD.name] = OD - ores_processing[OD.name] = 0 - ores_stored[OD.name] = 0 - /obj/machinery/mineral/processing_unit/Initialize() . = ..() + for(var/ore in GLOB.ore_data) + var/ore/OD = GLOB.ore_data[ore] + ores_processing[OD.name] = 0 + ores_stored[OD.name] = 0 + // TODO - Eschew input/output machinery and just use dirs ~Leshana //Locate our output and input machinery. for (var/dir in cardinal) @@ -269,13 +257,13 @@ if(ores_stored[metal] > 0 && ores_processing[metal] != 0) - var/ore/O = ore_data[metal] + var/ore/O = GLOB.ore_data[metal] if(!O) continue if(ores_processing[metal] == PROCESS_ALLOY && O.alloy) //Alloying. - for(var/datum/alloy/A in alloy_data) + for(var/datum/alloy/A in GLOB.alloy_data) if(A.metaltag in tick_alloys) continue diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index d9fd4fd5ae..17b5887725 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -655,7 +655,7 @@ turf/simulated/mineral/floor/light_corner else mineral_name = pickweight(list("marble" = 3,/* "quartz" = 10,*/ "copper" = 20, "tin" = 15, "bauxite" = 15, "uranium" = 10, "platinum" = 10, "hematite" = 70, "rutile" = 15, "carbon" = 70, "diamond" = 2, "gold" = 10, "silver" = 10, "phoron" = 20, "lead" = 3,/* "void opal" = 1,*/ "verdantium" = 1/*, "painite" = 1*/)) - if(mineral_name && (mineral_name in ore_data)) - mineral = ore_data[mineral_name] + if(mineral_name && (mineral_name in GLOB.ore_data)) + mineral = GLOB.ore_data[mineral_name] UpdateMineral() update_icon() diff --git a/code/modules/mining/mineral_effect.dm b/code/modules/mining/mineral_effect.dm index 12781a7ea4..f8bc4a03d6 100644 --- a/code/modules/mining/mineral_effect.dm +++ b/code/modules/mining/mineral_effect.dm @@ -21,7 +21,7 @@ /obj/effect/mineral/proc/get_scan_overlay() if(!scanner_image) - var/ore/O = ore_data[ore_key] + var/ore/O = GLOB.ore_data[ore_key] if(O) scanner_image = image(icon, loc = get_turf(src), icon_state = (O.scan_icon ? O.scan_icon : icon_state)) else diff --git a/code/modules/mining/ore_datum.dm b/code/modules/mining/ore_datum.dm index 0e125bee74..5a26dcf0fd 100644 --- a/code/modules/mining/ore_datum.dm +++ b/code/modules/mining/ore_datum.dm @@ -1,5 +1,3 @@ -var/global/list/ore_data = list() - /ore var/name var/display_name