From 110d15ff504a2744ddaaf96a13bb004d71adf847 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Sat, 8 Feb 2014 13:51:34 +0100 Subject: [PATCH] fixed match error; adding a tiny delay when switching primary components. this is mainly required for term.read, sh and lua to react to screens/gpu disappearing and reappearing --- .../li/cil/oc/server/network/Component.scala | 1 + .../lua/rom/boot/03_component.lua | 22 ++++++++++++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/main/java/li/cil/oc/server/network/Component.scala b/src/main/java/li/cil/oc/server/network/Component.scala index 84de1eeea..cb55ce6a4 100644 --- a/src/main/java/li/cil/oc/server/network/Component.scala +++ b/src/main/java/li/cil/oc/server/network/Component.scala @@ -36,6 +36,7 @@ trait Component extends network.Component with Node { case peripheral: PeripheralCallback => multi.environments.find { case (_, environment: ManagedPeripheral) => environment.methods.contains(peripheral.name) + case _ => false } match { case Some((_, environment)) => method -> Some(environment) case _ => method -> None diff --git a/src/main/resources/assets/opencomputers/lua/rom/boot/03_component.lua b/src/main/resources/assets/opencomputers/lua/rom/boot/03_component.lua index 6386a0132..f49d08dd3 100644 --- a/src/main/resources/assets/opencomputers/lua/rom/boot/03_component.lua +++ b/src/main/resources/assets/opencomputers/lua/rom/boot/03_component.lua @@ -2,6 +2,7 @@ local component = require("component") local computer = require("computer") local event = require("event") +local adding = {} local removing = {} local primaries = {} @@ -57,12 +58,27 @@ function component.setPrimary(componentType, address) if wasAvailable and address == primaries[componentType].address then return end - primaries[componentType] = address and component.proxy(address) or nil + primaries[componentType] = nil + local wasAdding = adding[componentType] + if wasAdding then + event.cancel(wasAdding) + adding[componentType] = nil + end + local primary = address and component.proxy(address) or nil if wasAvailable then computer.pushSignal("component_unavailable", componentType) end - if component.isAvailable(componentType) then - computer.pushSignal("component_available", componentType) + if primary then + if wasAvailable or wasAdding then + adding[componentType] = event.timer(0.1, function() + primaries[componentType] = primary + adding[componentType] = nil + computer.pushSignal("component_available", componentType) + end) + else + primaries[componentType] = primary + computer.pushSignal("component_available", componentType) + end end end