R&D machinery refactor (#18295)

* RnD machinery refactor

* Small changes

* Removed designs selling
This commit is contained in:
Core0verload
2016-06-08 17:18:22 +12:00
committed by oranges
parent cf27511dc9
commit 3af3bd2938
22 changed files with 653 additions and 1050 deletions
+35 -42
View File
@@ -22,33 +22,26 @@
owner = O
max_amount = max(0, max_amt)
if(mat_list[MAT_METAL])
materials[MAT_METAL] = new /datum/material/metal()
if(mat_list[MAT_GLASS])
materials[MAT_GLASS] = new /datum/material/glass()
if(mat_list[MAT_SILVER])
materials[MAT_SILVER] = new /datum/material/silver()
if(mat_list[MAT_GOLD])
materials[MAT_GOLD] = new /datum/material/gold()
if(mat_list[MAT_DIAMOND])
materials[MAT_DIAMOND] = new /datum/material/diamond()
if(mat_list[MAT_URANIUM])
materials[MAT_URANIUM] = new /datum/material/uranium()
if(mat_list[MAT_PLASMA])
materials[MAT_PLASMA] = new /datum/material/plasma()
if(mat_list[MAT_BANANIUM])
materials[MAT_BANANIUM] = new /datum/material/bananium()
var/list/possible_mats = list()
for(var/mat_type in subtypesof(/datum/material))
var/datum/material/MT = mat_type
possible_mats[initial(MT.id)] = mat_type
for(var/id in mat_list)
if(possible_mats[id])
var/mat_path = possible_mats[id]
materials[id] = new mat_path()
/datum/material_container/Destroy()
owner = null
return ..()
//For inserting an amount of material
/datum/material_container/proc/insert_amount(amt, material_type = null)
/datum/material_container/proc/insert_amount(amt, id = null)
if(amt > 0 && has_space(amt))
var/total_amount_saved = total_amount
if(material_type)
var/datum/material/M = materials[material_type]
if(id)
var/datum/material/M = materials[id]
if(M)
M.amount += amt
total_amount += amt
@@ -120,8 +113,8 @@
return total_amount_save - total_amount
/datum/material_container/proc/use_amount_type(amt, material_type)
var/datum/material/M = materials[material_type]
/datum/material_container/proc/use_amount_type(amt, id)
var/datum/material/M = materials[id]
if(M)
if(M.amount >= amt)
M.amount -= amt
@@ -129,9 +122,9 @@
return amt
return 0
/datum/material_container/proc/can_use_amount(amt, material_type, list/mats)
if(amt && material_type)
var/datum/material/M = materials[material_type]
/datum/material_container/proc/can_use_amount(amt, id, list/mats)
if(amt && id)
var/datum/material/M = materials[id]
if(M && M.amount >= amt)
return TRUE
else if(istype(mats))
@@ -153,23 +146,23 @@
while(sheet_amt > MAX_STACK_SIZE)
new M.sheet_type(get_turf(owner), MAX_STACK_SIZE)
count += MAX_STACK_SIZE
use_amount_type(sheet_amt * MINERAL_MATERIAL_AMOUNT, M.material_type)
use_amount_type(sheet_amt * MINERAL_MATERIAL_AMOUNT, M.id)
sheet_amt -= MAX_STACK_SIZE
if(round(M.amount / MINERAL_MATERIAL_AMOUNT))
new M.sheet_type(get_turf(owner), sheet_amt)
count += sheet_amt
use_amount_type(sheet_amt * MINERAL_MATERIAL_AMOUNT, M.material_type)
use_amount_type(sheet_amt * MINERAL_MATERIAL_AMOUNT, M.id)
return count
return 0
/datum/material_container/proc/retrieve_sheets(sheet_amt, material_type)
if(materials[material_type])
return retrieve(sheet_amt, materials[material_type])
/datum/material_container/proc/retrieve_sheets(sheet_amt, id)
if(materials[id])
return retrieve(sheet_amt, materials[id])
return 0
/datum/material_container/proc/retrieve_amount(amt, material_type)
return retrieve_sheets(amount2sheet(amt),material_type)
/datum/material_container/proc/retrieve_amount(amt, id)
return retrieve_sheets(amount2sheet(amt), id)
/datum/material_container/proc/retrieve_all()
var/result = 0
@@ -203,8 +196,8 @@
return sheet_amt * MINERAL_MATERIAL_AMOUNT
return 0
/datum/material_container/proc/amount(material_type)
var/datum/material/M = materials[material_type]
/datum/material_container/proc/amount(id)
var/datum/material/M = materials[id]
return M ? M.amount : 0
//returns the amount of material relevant to this container;
@@ -221,45 +214,45 @@
/datum/material
var/name
var/amount = 0
var/material_type = null
var/id = null
var/sheet_type = null
/datum/material/metal
name = "Metal"
material_type = MAT_METAL
id = MAT_METAL
sheet_type = /obj/item/stack/sheet/metal
/datum/material/glass
name = "Glass"
material_type = MAT_GLASS
id = MAT_GLASS
sheet_type = /obj/item/stack/sheet/glass
/datum/material/silver
name = "Silver"
material_type = MAT_SILVER
id = MAT_SILVER
sheet_type = /obj/item/stack/sheet/mineral/silver
/datum/material/gold
name = "Gold"
material_type = MAT_GOLD
id = MAT_GOLD
sheet_type = /obj/item/stack/sheet/mineral/gold
/datum/material/diamond
name = "Diamond"
material_type = MAT_DIAMOND
id = MAT_DIAMOND
sheet_type = /obj/item/stack/sheet/mineral/diamond
/datum/material/uranium
name = "Uranium"
material_type = MAT_URANIUM
id = MAT_URANIUM
sheet_type = /obj/item/stack/sheet/mineral/uranium
/datum/material/plasma
name = "Solid Plasma"
material_type = MAT_PLASMA
id = MAT_PLASMA
sheet_type = /obj/item/stack/sheet/mineral/plasma
/datum/material/bananium
name = "Bananium"
material_type = MAT_BANANIUM
id = MAT_BANANIUM
sheet_type = /obj/item/stack/sheet/mineral/bananium