From db5882b667556bdfa59e7c285c100317cbfcb9d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Wed, 9 Apr 2014 15:05:28 +0200 Subject: [PATCH] Re-using sneak keybind for extended tooltip to avoid conflict. Added bluescreens (show error on crash on installed GPUs' screen). --- .../assets/opencomputers/lang/de_DE.lang | 1 - .../assets/opencomputers/lang/en_US.lang | 1 - .../scala/li/cil/oc/client/KeyBindings.scala | 5 ++-- .../scala/li/cil/oc/common/item/Memory.scala | 1 - .../oc/server/component/GraphicsCard.scala | 29 +++++++++++++++++-- src/main/scala/li/cil/oc/util/ItemCosts.scala | 7 ++++- 6 files changed, 34 insertions(+), 10 deletions(-) diff --git a/src/main/resources/assets/opencomputers/lang/de_DE.lang b/src/main/resources/assets/opencomputers/lang/de_DE.lang index 712e1f669..75900c08e 100644 --- a/src/main/resources/assets/opencomputers/lang/de_DE.lang +++ b/src/main/resources/assets/opencomputers/lang/de_DE.lang @@ -124,7 +124,6 @@ oc:container.Rack=Serverschrank oc:container.Server=Server # Keybinds -key.extendedTooltip=Tooltip erweitern key.materialCosts=Materialkosten anzeigen key.clipboardPaste=Zwischenablage einfügen diff --git a/src/main/resources/assets/opencomputers/lang/en_US.lang b/src/main/resources/assets/opencomputers/lang/en_US.lang index 22f70e5eb..6aa34e106 100644 --- a/src/main/resources/assets/opencomputers/lang/en_US.lang +++ b/src/main/resources/assets/opencomputers/lang/en_US.lang @@ -124,7 +124,6 @@ oc:container.Rack=Server Rack oc:container.Server=Server # Keybinds -key.extendedTooltip=Expand Tooltip key.materialCosts=Show Material Costs key.clipboardPaste=Paste Clipboard diff --git a/src/main/scala/li/cil/oc/client/KeyBindings.scala b/src/main/scala/li/cil/oc/client/KeyBindings.scala index d9e55ce09..bf2746e41 100644 --- a/src/main/scala/li/cil/oc/client/KeyBindings.scala +++ b/src/main/scala/li/cil/oc/client/KeyBindings.scala @@ -1,5 +1,6 @@ package li.cil.oc.client +import cpw.mods.fml.client.FMLClientHandler import cpw.mods.fml.client.registry.KeyBindingRegistry.KeyHandler import cpw.mods.fml.common.TickType import java.util @@ -11,18 +12,16 @@ object KeyBindings { def showMaterialCosts = Keyboard.isKeyDown(materialCosts.keyCode) - val extendedTooltip = new KeyBinding("key.extendedTooltip", Keyboard.KEY_LSHIFT) + val extendedTooltip = FMLClientHandler.instance.getClient.gameSettings.keyBindSneak val materialCosts = new KeyBinding("key.materialCosts", Keyboard.KEY_LMENU) val clipboardPaste = new KeyBinding("key.clipboardPaste", Keyboard.KEY_INSERT) object Handler extends KeyHandler(Array( - extendedTooltip, materialCosts, clipboardPaste ), Array( - false, false, false )) { diff --git a/src/main/scala/li/cil/oc/common/item/Memory.scala b/src/main/scala/li/cil/oc/common/item/Memory.scala index 3dc31f42d..98e565345 100644 --- a/src/main/scala/li/cil/oc/common/item/Memory.scala +++ b/src/main/scala/li/cil/oc/common/item/Memory.scala @@ -6,7 +6,6 @@ import li.cil.oc.util.Tooltip import net.minecraft.client.renderer.texture.IconRegister import net.minecraft.entity.player.EntityPlayer import net.minecraft.item.{EnumRarity, ItemStack} -import scala.Array class Memory(val parent: Delegator, val tier: Int) extends Delegate { val baseName = "Memory" diff --git a/src/main/scala/li/cil/oc/server/component/GraphicsCard.scala b/src/main/scala/li/cil/oc/server/component/GraphicsCard.scala index 76e810fa1..ecb5f9ec1 100644 --- a/src/main/scala/li/cil/oc/server/component/GraphicsCard.scala +++ b/src/main/scala/li/cil/oc/server/component/GraphicsCard.scala @@ -220,9 +220,32 @@ abstract class GraphicsCard extends ManagedComponent { case Some(buffer) => buffer.synchronized { val (w, h) = buffer.resolution buffer.foreground = 0xFFFFFF - buffer.background = 0x000000 - if (buffer.buffer.fill(0, 0, w, h, ' ')) { - buffer.owner.onScreenFill(0, 0, w, h, ' ') + message.source.host match { + case machine: machine.Machine if machine.lastError != null => + if (buffer.depth > PackedColor.Depth.OneBit) buffer.background = 0x0000FF + else buffer.background = 0x000000 + if (buffer.buffer.fill(0, 0, w, h, ' ')) { + buffer.owner.onScreenFill(0, 0, w, h, ' ') + } + try { + val message = "Unrecoverable error:\n" + machine.lastError + "\n" + val wrapRegEx = s"(.{1,${math.max(1, w - 2)}})\\s".r + val lines = wrapRegEx.replaceAllIn(message, m => m.group(1) + "\n").lines.toArray + for ((line, idx) <- lines.zipWithIndex) { + val col = (w - line.length) / 2 + val row = (h - lines.length) / 2 + idx + buffer.buffer.set(col, row, line) + buffer.owner.onScreenSet(col, row, line) + } + } + catch { + case t: Throwable => t.printStackTrace() + } + case _ => + buffer.background = 0x000000 + if (buffer.buffer.fill(0, 0, w, h, ' ')) { + buffer.owner.onScreenFill(0, 0, w, h, ' ') + } } } case _ => diff --git a/src/main/scala/li/cil/oc/util/ItemCosts.scala b/src/main/scala/li/cil/oc/util/ItemCosts.scala index 7143b5b49..24fd888e7 100644 --- a/src/main/scala/li/cil/oc/util/ItemCosts.scala +++ b/src/main/scala/li/cil/oc/util/ItemCosts.scala @@ -129,5 +129,10 @@ object ItemCosts { // We don't use this in OC because the NBT of items can change dynamically, // for example by components being assigned an address, which will break the // equals check. - private def fuzzyEquals(stack1: ItemStack, stack2: ItemStack) = stack1.isItemEqual(stack2) || (stack1.itemID == stack2.itemID && (stack1.getItemDamage == OreDictionary.WILDCARD_VALUE || stack2.getItemDamage == OreDictionary.WILDCARD_VALUE)) // && ItemStack.areItemStackTagsEqual(stack1, stack2) + private def fuzzyEquals(stack1: ItemStack, stack2: ItemStack) = + stack1.itemID == stack2.itemID && + (stack1.getItemDamage == stack2.getItemDamage || + stack1.getItemDamage == OreDictionary.WILDCARD_VALUE || + stack2.getItemDamage == OreDictionary.WILDCARD_VALUE || + stack1.getItem.isDamageable) // && ItemStack.areItemStackTagsEqual(stack1, stack2) }