package ocelot.desktop.node.nodes import ocelot.desktop.color.IntColor import ocelot.desktop.graphics.Graphics import ocelot.desktop.inventory.SyncedInventory import ocelot.desktop.inventory.item.FloppyItem import ocelot.desktop.node.{EntityNode, LabeledEntityNode} import ocelot.desktop.ui.widget.slot.FloppySlotWidget import ocelot.desktop.windows.DiskDriveWindow import totoro.ocelot.brain.entity.FloppyDiskDrive import totoro.ocelot.brain.entity.traits.Inventory import totoro.ocelot.brain.loot.Loot import totoro.ocelot.brain.nbt.NBTTagCompound import totoro.ocelot.brain.util.DyeColor class DiskDriveNode(val diskDrive: FloppyDiskDrive, initDisk: Boolean) extends EntityNode(diskDrive) with LabeledEntityNode with SyncedInventory { def this(diskDrive: FloppyDiskDrive) = { this(diskDrive, false) } override type I = FloppyItem override def brainInventory: Inventory = diskDrive.inventory.owner val slot: FloppySlotWidget = new FloppySlotWidget(Slot(0)) if (initDisk) { slot.item = new FloppyItem.Factory.Loot(Loot.OpenOsFloppy).build() } override def load(nbt: NBTTagCompound): Unit = { super[EntityNode].load(nbt) super[SyncedInventory].load(nbt) } override def save(nbt: NBTTagCompound): Unit = { super[EntityNode].save(nbt) super[SyncedInventory].save(nbt) } override def icon: String = "nodes/DiskDrive" override protected val canOpen = true private val colorMap: Map[DyeColor, Int] = Map( DyeColor.Black -> 0x444444, // 0x1E1B1B DyeColor.Red -> 0xB3312C, DyeColor.Green -> 0x339911, // 0x3B511A DyeColor.Brown -> 0x51301A, DyeColor.Blue -> 0x6666FF, // 0x253192 DyeColor.Purple -> 0x7B2FBE, DyeColor.Cyan -> 0x66FFFF, // 0x287697 DyeColor.Silver -> 0xABABAB, DyeColor.Gray -> 0x666666, // 0x434343 DyeColor.Pink -> 0xD88198, DyeColor.Lime -> 0x66FF66, // 0x41CD34 DyeColor.Yellow -> 0xFFFF66, // 0xDECF2A DyeColor.LightBlue -> 0xAAAAFF, // 0x6689D3 DyeColor.Magenta -> 0xC354CD, DyeColor.Orange -> 0xEB8844, DyeColor.White -> 0xF0F0F0 ) override def draw(g: Graphics): Unit = { super.draw(g) if (System.currentTimeMillis() - diskDrive.lastDiskAccess < 400 && Math.random() > 0.1) { g.sprite("nodes/DiskDriveActivity", position.x + 2, position.y + 2, size.width - 4, size.height - 4) } for (item <- slot.item) { g.sprite( "nodes/DiskDriveFloppy", position.x + 2, position.y + 2, size.width - 4, size.height - 4, IntColor(colorMap(item.color)), ) } } override val window: Option[DiskDriveWindow] = Some(new DiskDriveWindow(this)) }