Files
CHOMPStation2/code/game/machinery/computer3/storage.dm
Kelenius db30c15e4c Updates to science
Protolathe and CI build procs moved to them from RD console.
Protolathe and CI now have a build queue. Designs take varying time to
build.
P and CI material storage is now a list instead of a set of vars.
origin_tech is now a list.
All sheets now contain exactly 2000 units of matter.
In design datum, chemicals and materials are two separate lists.
Designs are now sorted. The method is kinda hacky but flexible. They
have a var, sort_string. Designs are sorted alphabetically using it.
Circuits how show whether they build a machine or a computer in CI menu.
Adds item construction, for now protolathe is used.
2015-04-04 13:38:03 +03:00

185 lines
4.2 KiB
Plaintext

/*
Computer devices that can store programs, files, etc.
*/
/obj/item/part/computer/storage
name = "Storage Device"
desc = "A device used for storing and retrieving digital information."
// storage capacity, kb
var/volume = 0
var/max_volume = 64 // should be enough for anyone
var/driveletter = null // drive letter according to the computer
var/list/files = list() // a list of files in the memory (ALL files)
var/removeable = 0 // determinse if the storage device is a removable hard drive (ie floppy)
var/writeprotect = 0 // determines if the drive forbids writing.
// note that write-protect is hardware and does not respect emagging.
var/list/spawnfiles = list()// For mappers, special drives, and data disks
New()
..()
if(islist(spawnfiles))
if(removeable && spawnfiles.len)
var/obj/item/part/computer/storage/removable/R = src
R.inserted = new(src)
if(writeprotect)
R.inserted.writeprotect = 1
for(var/typekey in spawnfiles)
addfile(new typekey(),1)
// Add a file to the hard drive, returns 0 if failed
// forced is used when spawning files on a write-protect drive
proc/addfile(var/datum/file/F,var/forced = 0)
if(!F || (F in files))
return 1
if(writeprotect && !forced)
return 0
if(volume + F.volume > max_volume)
if(!forced)
return 0
max_volume = volume + F.volume
files.Add(F)
volume += F.volume
F.computer = computer
F.device = src
return 1
proc/removefile(var/datum/file/F,var/forced = 0)
if(!F || !(F in files))
return 1
if(writeprotect && !forced)
return 0
files -= F
volume -= F.volume
if(F.device == src)
F.device = null
F.computer = null
return 1
init(var/obj/machinery/computer/target)
computer = target
for(var/datum/file/F in files)
F.computer = computer
/*
Standard hard drives for computers. Used in computer construction
*/
/obj/item/part/computer/storage/hdd
name = "Hard Drive"
max_volume = 25000
icon_state = "hdd1"
/obj/item/part/computer/storage/hdd/big
name = "Big Hard Drive"
max_volume = 50000
icon_state = "hdd2"
/obj/item/part/computer/storage/hdd/gigantic
name = "Gigantic Hard Drive"
max_volume = 75000
icon_state = "hdd3"
/*
Removeable hard drives for portable storage
*/
/obj/item/part/computer/storage/removable
name = "Disk Drive"
max_volume = 3000
removeable = 1
attackby_types = list(/obj/item/weapon/disk/file, /obj/item/weapon/pen)
var/obj/item/weapon/disk/file/inserted = null
proc/eject_disk(var/forced = 0)
if(!forced)
return
files = list()
inserted.loc = computer.loc
if(usr)
if(!usr.get_active_hand())
usr.put_in_active_hand(inserted)
else if(forced && !usr.get_inactive_hand())
usr.put_in_inactive_hand(inserted)
for(var/datum/file/F in inserted.files)
F.computer = null
inserted = null
attackby(obj/O as obj, mob/user as mob)
if(inserted && istype(O,/obj/item/weapon/pen))
usr << "You use [O] to carefully pry [inserted] out of [src]."
eject_disk(forced = 1)
return
if(istype(O,/obj/item/weapon/disk/file))
if(inserted)
usr << "There's already a disk in [src]!"
return
usr << "You insert [O] into [src]."
usr.drop_item()
O.loc = src
inserted = O
writeprotect = inserted.writeprotect
files = inserted.files
for(var/datum/file/F in inserted.files)
F.computer = computer
return
..()
addfile(var/datum/file/F)
if(!F || !inserted)
return 0
if(F in inserted.files)
return 1
if(inserted.volume + F.volume > inserted.max_volume)
return 0
inserted.files.Add(F)
F.computer = computer
F.device = inserted
return 1
/*
Removable hard drive presents...
removeable disk!
*/
/obj/item/weapon/disk/file
//parent_type = /obj/item/part/computer/storage // todon't: do this
name = "Data Disk"
desc = "A device that can be inserted and removed into computers easily as a form of portable data storage. This one stores 1 Megabyte"
var/list/files
var/list/spawn_files = list()
var/writeprotect = 0
var/volume = 0
var/max_volume = 1028
New()
..()
icon_state = "datadisk[rand(0,6)]"
src.pixel_x = rand(-5, 5)
src.pixel_y = rand(-5, 5)
files = list()
if(istype(spawn_files))
for(var/typekey in spawn_files)
var/datum/file/F = new typekey()
F.device = src
files += F
volume += F.volume