From c4227d24765d7172c6bc6e526a3de91d7bd93928 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Sun, 28 Dec 2014 15:51:45 +0100 Subject: [PATCH] Allow changing the color of drones' lights to an arbitrary color via API (`drone.setLightColor`/`drone.getLightColor`). --- .../opencomputers/textures/entity/drone.png | Bin 631 -> 0 bytes .../assets/opencomputers/textures/model/drone.png | Bin 0 -> 555 bytes .../client/renderer/entity/ModelQuadcopter.scala | 14 +++++++++++++- .../scala/li/cil/oc/common/entity/Drone.scala | 6 ++++++ .../scala/li/cil/oc/server/component/Drone.scala | 10 ++++++++++ 5 files changed, 29 insertions(+), 1 deletion(-) delete mode 100644 src/main/resources/assets/opencomputers/textures/entity/drone.png create mode 100644 src/main/resources/assets/opencomputers/textures/model/drone.png diff --git a/src/main/resources/assets/opencomputers/textures/entity/drone.png b/src/main/resources/assets/opencomputers/textures/entity/drone.png deleted file mode 100644 index d26229b5cae1cc162b3ba4cae780f640cabc2f41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 631 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>Jib?}~LR=*!B_$*z#Kpy>q@+|;RfB?p)YQ~8G&EFHR5Ud; z)z#Gl0|TX{rTzW=(;g%T1O)i``Gtgp2nh*gJV@2j(n`7?pZXvvG&D5jeq#2+jNstl z+=p4o_Y=ax!qOk4B;Jq9e2^w9E9>LqBO@atC@7fqF#Z4k|6S!LjDQYMFA4Gs26Bl2 z49#KFZ!$12rh2+KhE&|T5^_E7umO*Xsm}QuotNL3&HeS?U&r%gUObP7UetoFiBA+> z@9<+k!7ZX-`^PwO{tkvIOjcZ<+>JdC6#loV>$zudFDo~VLu9Xy;ps~v9Ilx@2PD4d z-^<@)Us)fo)FC;2{k29T-}gzbh5xl!ME-4vXwva@&t^%^75xx$sA8Yd!QA2~H3!%E zhpvjQNQw_-OgAz7GGAQX{&7mv1(ypeCb~BWpF7#Wzmdu5ONTLsleC6SQi9-|aHbAE z26b76Wzz*(+Mm8Vd(og=U+=*eo`BPgm#>*NWX3KvHhz$C#qlB|i|h%R%d<7kJ~#Zp zZ0vVl;hx$x{d#|kxeuoQRS0B%ue&Ptbkn>)itAY}REMnn9mn|0b7t}McL#emuiG5c zy592NMtPpQ-)@v2Kc2Q$KH_$X^M2WF*?%7-=^rsH`PN>y;IXO0)=T^2&DT#n*fLfpNs(>FVdQ&MBb@0BL#>p8x;= diff --git a/src/main/resources/assets/opencomputers/textures/model/drone.png b/src/main/resources/assets/opencomputers/textures/model/drone.png new file mode 100644 index 0000000000000000000000000000000000000000..f8074e3cdfc5b7839f8ba9bbeffcfaeb24529066 GIT binary patch literal 555 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>Jib4W>LR=*!B_$*z#Kpy>q@@1;|F5d58Wa?ysi~==qN1jz zrlFw`7#JumEv>Gu?&s$h5D?(+?;jEpqNSxJBqS6Z92^=NDkvxz78WKWBje-aBP%Nl zG~}1+dOM)`G9^KN!9Xr9z#zWq(RBs}MpsW4$B>F!S3+*)9aa#yv$&!6y~WF)|Nq~N z6`N!8gfV7o5NDB5(Tu%qj8|A$G@|!&{aY2o;G*EJ_%}h-aL)bxC$!E#XHlu2HY4_V zRm;BOa|U8f?SJPeq~EFi!SSR`^;y>{&YX=ha|PynKUh%9ImzJU^8R3kSNe()c^Qko z#!pwPe~`tLtz=;IietlrX*^#hXdPITe#appcfyB`W0MM^IVY4bL;z8I6DR-fzqY3g zzMs$7VaNQW%9TFm0T+v{JE58*TVx}C7;}0^6P5)!LKa) z->^@$s*s)dEs!<#&%(7V54bN$$ZH=k)69Oivbx~Gve$Fg9jfiCf5ZNH*WGDfznRVX z%KW~)G;Uj^^=tO>> 16) & 0xFF).toByte + val g = ((lightColor >>> 8) & 0xFF).toByte + val b = ((lightColor >>> 0) & 0xFF).toByte + GL11.glColor3ub(r, g, b) + light0.render(scale) light1.render(scale) light2.render(scale) @@ -147,6 +156,9 @@ final class ModelQuadcopter extends ModelBase { light3.rotateAngleX = tilt light3.rotateAngleZ = -tilt + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE) + GL11.glColor3ub(0x66.toByte, 0xDD.toByte, 0x55.toByte) + light0.render(scale) light1.render(scale) light2.render(scale) diff --git a/src/main/scala/li/cil/oc/common/entity/Drone.scala b/src/main/scala/li/cil/oc/common/entity/Drone.scala index cd5fd43fe..dbb372731 100644 --- a/src/main/scala/li/cil/oc/common/entity/Drone.scala +++ b/src/main/scala/li/cil/oc/common/entity/Drone.scala @@ -196,6 +196,8 @@ class Drone(val world: World) extends Entity(world) with MachineHost with intern dataWatcher.addObject(10, "") // Inventory size for client. dataWatcher.addObject(11, byte2Byte(0: Byte)) + // Light color. + dataWatcher.addObject(12, int2Integer(0x66DD55)) } def initializeAfterPlacement(stack: ItemStack, player: EntityPlayer, position: Vec3) { @@ -232,6 +234,7 @@ class Drone(val world: World) extends Entity(world) with MachineHost with intern def globalBufferSize = dataWatcher.getWatchableObjectInt(9) def statusText = dataWatcher.getWatchableObjectString(10) def inventorySize = dataWatcher.getWatchableObjectByte(11) & 0xFF + def lightColor = dataWatcher.getWatchableObjectInt(12) def setRunning(value: Boolean) = dataWatcher.updateObject(2, byte2Byte(if (value) 1: Byte else 0: Byte)) // Round target values to low accuracy to avoid floating point errors accumulating. @@ -244,6 +247,7 @@ class Drone(val world: World) extends Entity(world) with MachineHost with intern def globalBufferSize_=(value: Int) = dataWatcher.updateObject(9, int2Integer(value)) def statusText_=(value: String) = dataWatcher.updateObject(10, Option(value).map(_.lines.map(_.take(10)).take(2).mkString("\n")).getOrElse("")) def inventorySize_=(value: Int) = dataWatcher.updateObject(11, byte2Byte(value.toByte)) + def lightColor_=(value: Int) = dataWatcher.updateObject(12, int2Integer(value)) @SideOnly(Side.CLIENT) override def setPositionAndRotation2(x: Double, y: Double, z: Double, yaw: Float, pitch: Float, data: Int) { @@ -436,6 +440,7 @@ class Drone(val world: World) extends Entity(world) with MachineHost with intern selectedSlot = nbt.getByte("selectedSlot") & 0xFF selectedTank = nbt.getByte("selectedTank") & 0xFF statusText = nbt.getString("statusText") + lightColor = nbt.getInteger("lightColor") } override def writeEntityToNBT(nbt: NBTTagCompound) { @@ -455,5 +460,6 @@ class Drone(val world: World) extends Entity(world) with MachineHost with intern nbt.setByte("selectedSlot", selectedSlot.toByte) nbt.setByte("selectedTank", selectedTank.toByte) nbt.setString("statusText", statusText) + nbt.setInteger("lightColor", lightColor) } } diff --git a/src/main/scala/li/cil/oc/server/component/Drone.scala b/src/main/scala/li/cil/oc/server/component/Drone.scala index ae01c8237..9e4bcdd42 100644 --- a/src/main/scala/li/cil/oc/server/component/Drone.scala +++ b/src/main/scala/li/cil/oc/server/component/Drone.scala @@ -58,6 +58,16 @@ class Drone(val host: entity.Drone) extends prefab.ManagedEnvironment with trait result(host.statusText) } + @Callback(doc = "function():number -- Get the current color of the flap lights as an integer encoded RGB value (0xRRGGBB).") + def getLightColor(context: Context, args: Arguments): Array[AnyRef] = result(host.lightColor) + + @Callback(doc = "function(value:number):number -- Set the color of the flap lights to the specified integer encoded RGB value (0xRRGGBB).") + def setLightColor(context: Context, args: Arguments): Array[AnyRef] = { + host.lightColor = args.checkInteger(0) + context.pause(0.1) + result(host.lightColor) + } + // ----------------------------------------------------------------------- // @Callback(doc = "function(dx:number, dy:number, dz:number) -- Change the target position by the specified offset.")