From d0e97e8d4bbcd3cd157af41c0f8882b9ea9a3761 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Sat, 7 Dec 2013 17:03:22 +0100 Subject: [PATCH] tinting robots based on their level; including distance of zero in normal network messages to have a uniform signal signature --- assets/opencomputers/textures/blocks/robot.png | Bin 935 -> 926 bytes li/cil/oc/client/PacketHandler.scala | 4 +++- .../renderer/tileentity/RobotRenderer.scala | 14 ++++++++++++-- li/cil/oc/common/tileentity/Robot.scala | 5 ++++- li/cil/oc/server/component/GraphicsCard.scala | 4 ++-- li/cil/oc/server/component/NetworkCard.scala | 2 +- 6 files changed, 22 insertions(+), 7 deletions(-) diff --git a/assets/opencomputers/textures/blocks/robot.png b/assets/opencomputers/textures/blocks/robot.png index 9e28095043def4a2aa1e5d9a939906edff26bd9c..ffc46a13ef564f2685d28021f8030b9cac05b17a 100644 GIT binary patch delta 866 zcmV-o1D*V*2c8FzNq_cGOjJcwR8#-}08&y?I5;?{sHhwq98641aBy&pjEqlDPf<}( zO-)T28XC(fDPii(P(qoag`gv7+ehlhufl9HjJ zp|i8IJ3Bi%Iyx{gFo1x7kB^UOX=#_2m%zZlUteE;e}9~uoL*jDLqkK2jg6F)lzn}D zuCA`Sy1Fn%&ws)I00KTqL_t(|+FX<8mg67{g)ayLwwc~s;`C%vCsTKNZ`;fJzsw3J zztHhHf#|c)y}}@4Ri5Wc-K+1vuS@|Ssnk*;0}^0R82c45uV7xMPg4-p46-AnC#S&q zd(V7pS5q?>Tk~wrL1IYIQX?f2rAB@=dgfC&W`>I?nSYh;gkI>hIV9(c9p<*xX)|#- z?!V7+1vE)S5s`}omE457R(B)r)Q*eMjZzEU06F2JC=yZWyL`AlTi8)ys-Cg)Go?^~ zBF8nvaYT?A4k!8K*Xy9yZ`-#wb*LI(9nrC1WJq4@L_ORqTlI^URTGuZS^Nt*C+a@H zIJdvBrhhYSc|v`B=nSPl-#;uOWff}He&Qwvz1B_cRm9|z+{ZCVuVQ{aE(Xp;&Xm=i zI`b{Ch$cm~Oki%SUga(>z6fXf#^y=F{?KXJJYi;-NL>Et7{_T2CMt`jC@DtTtxF9h zOs8eVD*l*GTN25b4U#-RO--P~{@*@6-hO`m`+vKbwF{a2jQzkN(bci8R~c{O6ujZo zL0xNmb8ByXcVlO5AF^BXh-1kdupbaWH-k?6?Wyx}Eg+VEANk_!ibT2-5PY(%ZJ>Js_4hIQ3f=ouaW95L|&Ri2aUz;JdsP5K9#` zfLq##&49p4zt;Rn=y*FIyafMMHN2&ge?&kmd*p%0MDrI3DFULN1AD>IEiGhZWGE;oAt50> zJv|^GAS^5_K0ZD|LP9GmD;q4-XG*ZEaLkR9RVBPEJl^V`Fu7bt5AqP*6}@TwHf| zcT!SPKtMoZVqzpDBv)5g9UUD@OG`O9Ij*j*#>U29Utd~UTL1t5^YimMIy!1J1q2jqOR zMQ&T2CKKiJUHTEA#nHCOqV z#lMkrqJOFbjC1)zYdX`GC)EAD&QSXM{lg+sR-q=%7cR2bZQbQwMNIyX>o_CnRg8~E zMbEj&nX>k%PJIb1qE1mI6ByfCx8}b7`6Qg_8=EHy`$I=%{e+o8BJuvAW8Alof)^7t zi@GQ&M%u1Y4J1sbWyNa!Hl3ygvXxVicJV>oFRGWi+%hC`yQ zV_oes4&oFX@X= zx*HIDv#ch}o5s7wRzR%Y2Dc5|hAiF>2tN{;gpXzFGpz^2a)MJIvgj0z?SSA6Y(eZJ z_GE!)c_Sc}Dk=b#5o-Z~m42=Hk>lCI5(kSk}l5k%{In5>f<2)d%*1 zSDVj~h=71h^|A^ish1=IqUzGhZ7&Bww>SR_FaRUQHfAw*dl>)#002ovPDHLkV1msA BZ}k8G diff --git a/li/cil/oc/client/PacketHandler.scala b/li/cil/oc/client/PacketHandler.scala index bbfeb37b3..cd8cb3a3a 100644 --- a/li/cil/oc/client/PacketHandler.scala +++ b/li/cil/oc/client/PacketHandler.scala @@ -132,7 +132,9 @@ class PacketHandler extends CommonPacketHandler { def onRobotXp(p: PacketParser) = p.readTileEntity[RobotProxy]() match { - case Some(t) => t.robot.xp = p.readDouble() + case Some(t) => + t.robot.xp = p.readDouble() + t.robot.updateXpInfo() case _ => // Invalid packet. } diff --git a/li/cil/oc/client/renderer/tileentity/RobotRenderer.scala b/li/cil/oc/client/renderer/tileentity/RobotRenderer.scala index c7e81dfa7..989872c2a 100644 --- a/li/cil/oc/client/renderer/tileentity/RobotRenderer.scala +++ b/li/cil/oc/client/renderer/tileentity/RobotRenderer.scala @@ -99,7 +99,7 @@ object RobotRenderer extends TileEntitySpecialRenderer { compileList() - def renderChassis(isRunning: Boolean = false, offset: Double = 0) { + def renderChassis(isRunning: Boolean = false, level: Int = 0, offset: Double = 0) { val size = 0.3f val l = 0.5f - size val h = 0.5f + size @@ -114,6 +114,15 @@ object RobotRenderer extends TileEntitySpecialRenderer { } bindTexture(texture) + if (level > 19) { + GL11.glColor3f(0.4f, 1, 1) + } + else if (level > 9) { + GL11.glColor3f(1, 1, 0.4f) + } + else { + GL11.glColor3f(0.5f, 0.5f, 0.5f) + } if (!isRunning) { GL11.glTranslatef(0, -2 * gap, 0) } @@ -122,6 +131,7 @@ object RobotRenderer extends TileEntitySpecialRenderer { GL11.glTranslatef(0, 2 * gap, 0) } GL11.glCallList(displayList + 1) + GL11.glColor3f(1, 1, 1) if (MinecraftForgeClient.getRenderPass == 0) { RenderState.disableLighting() @@ -202,7 +212,7 @@ object RobotRenderer extends TileEntitySpecialRenderer { if (MinecraftForgeClient.getRenderPass == 0) { val offset = timeJitter + worldTime / 20.0 - renderChassis(robot.isRunning, offset) + renderChassis(robot.isRunning, robot.level, offset) } robot.equippedItem match { diff --git a/li/cil/oc/common/tileentity/Robot.scala b/li/cil/oc/common/tileentity/Robot.scala index d04552667..705321cb5 100644 --- a/li/cil/oc/common/tileentity/Robot.scala +++ b/li/cil/oc/common/tileentity/Robot.scala @@ -98,7 +98,9 @@ class Robot(isRemote: Boolean) extends Computer(isRemote) with ISidedInventory w // xp(level) = base + (level * const) ^ exp // pow(xp(level) - base, 1/exp) / const = level level = (Math.pow(xp - Settings.get.baseXpToLevel, 1 / Settings.get.exponentialXpGrowth) / Settings.get.constantXpGrowth).toInt min 30 - battery.setLocalBufferSize(Settings.get.bufferRobot + Settings.get.bufferPerLevel * level) + if (battery != null) { + battery.setLocalBufferSize(Settings.get.bufferRobot + Settings.get.bufferPerLevel * level) + } } // ----------------------------------------------------------------------- // @@ -337,6 +339,7 @@ class Robot(isRemote: Boolean) extends Computer(isRemote) with ISidedInventory w equippedItem = Option(ItemStack.loadItemStackFromNBT(nbt.getCompoundTag("equipped"))) } xp = nbt.getDouble(Settings.namespace + "xp") + updateXpInfo() animationTicksTotal = nbt.getInteger("animationTicksTotal") animationTicksLeft = nbt.getInteger("animationTicksLeft") moveFromX = nbt.getInteger("moveFromX") diff --git a/li/cil/oc/server/component/GraphicsCard.scala b/li/cil/oc/server/component/GraphicsCard.scala index df022aa8e..4a116730c 100644 --- a/li/cil/oc/server/component/GraphicsCard.scala +++ b/li/cil/oc/server/component/GraphicsCard.scala @@ -49,7 +49,7 @@ abstract class GraphicsCard extends ManagedComponent { def bind(context: Context, args: Arguments): Array[AnyRef] = { val address = args.checkString(0) node.network.node(address) match { - case null => Array(Unit, "invalid address") + case null => result(false, "invalid address") case node: Node if node.host.isInstanceOf[Buffer] => screenAddress = Option(address) screenInstance = Some(node.host.asInstanceOf[Buffer]) @@ -62,7 +62,7 @@ abstract class GraphicsCard extends ManagedComponent { s.background = 0x000000 result(true) }) - case _ => Array(Unit, "not a screen") + case _ => result(false, "not a screen") } } diff --git a/li/cil/oc/server/component/NetworkCard.scala b/li/cil/oc/server/component/NetworkCard.scala index 162851a05..3550065ac 100644 --- a/li/cil/oc/server/component/NetworkCard.scala +++ b/li/cil/oc/server/component/NetworkCard.scala @@ -75,7 +75,7 @@ class NetworkCard extends ManagedComponent { openPorts.clear() if (message.name == "network.message") message.data match { case Array(port: Integer, args@_*) if openPorts.contains(port) => - node.sendToReachable("computer.signal", Seq("modem_message", message.source.address, Int.box(port)) ++ args: _*) + node.sendToReachable("computer.signal", Seq("modem_message", message.source.address, Int.box(port), Int.box(0)) ++ args: _*) case _ => } }