From 51ed61cb46b97b8ad846ec3e689453c0077618fd Mon Sep 17 00:00:00 2001 From: Calclavia Date: Tue, 21 Jan 2014 20:29:04 +0800 Subject: [PATCH] Improved battery rendering --- .../electrical/battery/BatteryNetwork.java | 6 +- .../electrical/battery/RenderBattery.java | 83 +++++++++++++----- .../electrical/battery/TileBattery.java | 40 ++++++--- .../models/battery/bat_level_0.png | Bin 0 -> 737 bytes .../models/battery/bat_level_1.png | Bin 0 -> 736 bytes .../models/battery/bat_level_10.png | Bin 0 -> 608 bytes .../models/battery/bat_level_2.png | Bin 0 -> 719 bytes .../models/battery/bat_level_3.png | Bin 0 -> 703 bytes .../models/battery/bat_level_4.png | Bin 0 -> 694 bytes .../models/battery/bat_level_5.png | Bin 0 -> 686 bytes .../models/battery/bat_level_6.png | Bin 0 -> 674 bytes .../models/battery/bat_level_7.png | Bin 0 -> 661 bytes .../models/battery/bat_level_8.png | Bin 0 -> 641 bytes .../models/battery/bat_level_9.png | Bin 0 -> 633 bytes .../models/battery/bat_levels.png | Bin 209 -> 0 bytes 15 files changed, 89 insertions(+), 40 deletions(-) create mode 100644 src/main/resources/assets/resonantinduction/models/battery/bat_level_0.png create mode 100644 src/main/resources/assets/resonantinduction/models/battery/bat_level_1.png create mode 100644 src/main/resources/assets/resonantinduction/models/battery/bat_level_10.png create mode 100644 src/main/resources/assets/resonantinduction/models/battery/bat_level_2.png create mode 100644 src/main/resources/assets/resonantinduction/models/battery/bat_level_3.png create mode 100644 src/main/resources/assets/resonantinduction/models/battery/bat_level_4.png create mode 100644 src/main/resources/assets/resonantinduction/models/battery/bat_level_5.png create mode 100644 src/main/resources/assets/resonantinduction/models/battery/bat_level_6.png create mode 100644 src/main/resources/assets/resonantinduction/models/battery/bat_level_7.png create mode 100644 src/main/resources/assets/resonantinduction/models/battery/bat_level_8.png create mode 100644 src/main/resources/assets/resonantinduction/models/battery/bat_level_9.png delete mode 100644 src/main/resources/assets/resonantinduction/models/battery/bat_levels.png diff --git a/src/main/java/resonantinduction/electrical/battery/BatteryNetwork.java b/src/main/java/resonantinduction/electrical/battery/BatteryNetwork.java index 0cf3764d..fe7027a9 100644 --- a/src/main/java/resonantinduction/electrical/battery/BatteryNetwork.java +++ b/src/main/java/resonantinduction/electrical/battery/BatteryNetwork.java @@ -12,7 +12,7 @@ public class BatteryNetwork extends Network for (TileBattery battery : this.getConnectors()) { - totalEnergy += battery.getEnergy(null); + totalEnergy += battery.energy.getEnergy(); } int amountOfNodes = this.getConnectors().size() - exclusion.length; @@ -30,11 +30,11 @@ public class BatteryNetwork extends Network { if (battery == firstNode) { - battery.setEnergy(null, totalPerBatteryRemainder); + battery.energy.setEnergy(totalPerBatteryRemainder); } else { - battery.setEnergy(null, totalPerBattery); + battery.energy.setEnergy(totalPerBattery); } } } diff --git a/src/main/java/resonantinduction/electrical/battery/RenderBattery.java b/src/main/java/resonantinduction/electrical/battery/RenderBattery.java index c9dbbe68..6f29294d 100644 --- a/src/main/java/resonantinduction/electrical/battery/RenderBattery.java +++ b/src/main/java/resonantinduction/electrical/battery/RenderBattery.java @@ -5,6 +5,7 @@ package resonantinduction.electrical.battery; import static org.lwjgl.opengl.GL11.glPopMatrix; import static org.lwjgl.opengl.GL11.glPushMatrix; +import static org.lwjgl.opengl.GL11.glRotatef; import static org.lwjgl.opengl.GL11.glScalef; import static org.lwjgl.opengl.GL11.glTranslatef; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; @@ -18,6 +19,7 @@ import org.lwjgl.opengl.GL11; import resonantinduction.core.Reference; import universalelectricity.api.vector.Vector3; +import calclavia.lib.render.RenderUtility; import cpw.mods.fml.client.FMLClientHandler; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -31,7 +33,6 @@ public class RenderBattery extends TileEntitySpecialRenderer { public static final ResourceLocation TEXTURE_CAP = new ResourceLocation(Reference.DOMAIN, Reference.MODEL_PATH + "battery/bat_base_cap_tex.png"); public static final ResourceLocation TEXTURE_CASE = new ResourceLocation(Reference.DOMAIN, Reference.MODEL_PATH + "battery/bat_case_tex.png"); - public static final ResourceLocation TEXTURE_LEVELS = new ResourceLocation(Reference.DOMAIN, Reference.MODEL_PATH + "battery/bat_levels.png"); public static final WavefrontObject MODEL = (WavefrontObject) AdvancedModelLoader.loadModel(Reference.MODEL_DIRECTORY + "battery/battery.obj"); @Override @@ -41,52 +42,88 @@ public class RenderBattery extends TileEntitySpecialRenderer { glPushMatrix(); glTranslatef((float) x + 0.5F, (float) y, (float) z + 0.5F); - glScalef(0.46f, 0.46f, 0.46f); - GL11.glRotatef(90 * i, 0, 1, 0); + glScalef(0.5f, 0.5f, 0.5f); ForgeDirection dir = ForgeDirection.getOrientation(i); + switch (dir) + { + case NORTH: + glRotatef(0, 0, 1, 0); + break; + case SOUTH: + glRotatef(180, 0, 1, 0); + break; + case WEST: + glRotatef(90, 0, 1, 0); + break; + case EAST: + glRotatef(-90, 0, 1, 0); + break; + } + + /** + * If we're rendering in the world: + */ if (t.worldObj != null) { - FMLClientHandler.instance().getClient().renderEngine.bindTexture(TEXTURE_LEVELS); - MODEL.renderPart("Battery"); - - // Render top and bottom - //if (!(new Vector3(t).translate(dir).getTileEntity(t.worldObj) instanceof TileBattery)) - { - FMLClientHandler.instance().getClient().renderEngine.bindTexture(TEXTURE_CAP); + TileBattery tile = (TileBattery) t; - if (!(new Vector3(t).translate(ForgeDirection.UP).getTileEntity(t.worldObj) instanceof TileBattery)) - MODEL.renderPart("CapCorner"); - if (!(new Vector3(t).translate(ForgeDirection.DOWN).getTileEntity(t.worldObj) instanceof TileBattery)) - MODEL.renderPart("BaseCorner"); - } + RenderUtility.bind(Reference.DOMAIN, Reference.MODEL_PATH + "battery/bat_level_" + (int) (((double) tile.energy.getEnergy() / (double) tile.energy.getEnergyCapacity()) * 10) + ".png"); + MODEL.renderPart("Battery"); + + // Render top and bottom + FMLClientHandler.instance().getClient().renderEngine.bindTexture(TEXTURE_CAP); + if (!(new Vector3(t).translate(ForgeDirection.UP).getTileEntity(t.worldObj) instanceof TileBattery)) + MODEL.renderPart("CapCorner"); + if (!(new Vector3(t).translate(ForgeDirection.DOWN).getTileEntity(t.worldObj) instanceof TileBattery)) + MODEL.renderPart("BaseCorner"); // If quadrant with one external neighbor FMLClientHandler.instance().getClient().renderEngine.bindTexture(TEXTURE_CAP); - + if (!(new Vector3(t).translate(ForgeDirection.UP).getTileEntity(t.worldObj) instanceof TileBattery)) MODEL.renderPart("CapEdge"); if (!(new Vector3(t).translate(ForgeDirection.DOWN).getTileEntity(t.worldObj) instanceof TileBattery)) MODEL.renderPart("BaseEdge"); - // if quadrant with three external neighbors //can't have quadrant with 2 external - // neighbors in rectangular prism + /* + * If quadrant with three external neighbors //can't have quadrant with 2 external + * neighbors in rectangular prism + */ if (!(new Vector3(t).translate(ForgeDirection.UP).getTileEntity(t.worldObj) instanceof TileBattery)) MODEL.renderPart("CapInterior"); if (!(new Vector3(t).translate(ForgeDirection.DOWN).getTileEntity(t.worldObj) instanceof TileBattery)) MODEL.renderPart("BaseInterior"); FMLClientHandler.instance().getClient().renderEngine.bindTexture(TEXTURE_CASE); + + if (tile.getInputDirections().contains(dir)) + { + GL11.glColor3f(0, 0.294f, 0.498f); + } + else if (tile.getOutputDirections().contains(dir)) + { + GL11.glColor3f(1, 0.478f, 0.01f); + } + MODEL.renderPart("BatteryCase"); + GL11.glColor3f(1, 1, 1); + if (new Vector3(t).translate(ForgeDirection.UP).getTileEntity(t.worldObj) instanceof TileBattery) MODEL.renderPart("VertConnector"); - }else - { - FMLClientHandler.instance().getClient().renderEngine.bindTexture(TEXTURE_CAP); - MODEL.renderAll(); } - + else + { + // TODO: Fix energy level. + RenderUtility.bind(Reference.DOMAIN, Reference.MODEL_PATH + "battery/bat_level_0.png"); + MODEL.renderPart("Battery"); + FMLClientHandler.instance().getClient().renderEngine.bindTexture(TEXTURE_CAP); + MODEL.renderOnly("CapCorner", "BaseCorner", "CapEdge", "BaseEdge", "CapInterior", "BaseInterior"); + FMLClientHandler.instance().getClient().renderEngine.bindTexture(TEXTURE_CASE); + MODEL.renderOnly("BatteryCase"); + } + glPopMatrix(); } } diff --git a/src/main/java/resonantinduction/electrical/battery/TileBattery.java b/src/main/java/resonantinduction/electrical/battery/TileBattery.java index adf96695..52029553 100644 --- a/src/main/java/resonantinduction/electrical/battery/TileBattery.java +++ b/src/main/java/resonantinduction/electrical/battery/TileBattery.java @@ -1,14 +1,12 @@ package resonantinduction.electrical.battery; import java.util.ArrayList; -import java.util.HashSet; -import java.util.Set; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.network.packet.Packet; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.ForgeDirection; import resonantinduction.core.ResonantInduction; -import resonantinduction.mechanical.network.IMechanical; import universalelectricity.api.UniversalElectricity; import universalelectricity.api.electricity.IVoltageInput; import universalelectricity.api.electricity.IVoltageOutput; @@ -23,8 +21,6 @@ import calclavia.lib.prefab.tile.TileElectrical; import com.google.common.io.ByteArrayDataInput; -import cpw.mods.fml.common.network.PacketDispatcher; - /** * A modular battery. * @@ -40,11 +36,7 @@ public class TileBattery extends TileElectrical implements IConnector playersUsing = new HashSet(); - - public float clientEnergy; - public int clientCells; - public float clientMaxEnergy; + public boolean markUpdate = false; public TileBattery() { @@ -74,7 +66,7 @@ public class TileBattery extends TileElectrical implements IConnectorWFU8GbZ8()Nlj2>E@cM*00KoxL_t(I%RSLsdYf7l z1K^*_2JGNl-L%Od&in_GF{JI6w81f8V}sd!NKd2(y=h5H$&;s;NJP=iO(yd{zWL_G zi$-H-CkRI4r*=Adt5qnRoCLw%Ua8dUy?PZz8yks4tM%?3WHPy2y0UWb-p)=GU0mdH zH#fihl1OZ9L{X{q-FItiUwyT*lJD$nY-BP=M}Pb=nWR!%TY~}gdUyXg7(T0}jmDcd zjYbsh?L|>4_2^NhlFQw>`!s5`Zf;VkwAJeM5{U;7c6MMe=yXb@LgDOeHiNabLh(^| z^|X@Yi8w`J9W=+r>HTE0+33e!2*H;xUo74h^8a#^NvU*ob#Rc6f zEnQvx^iw*Hqq?pQ!{En{A5N!}Ec>`p*R}0->+bH(ZnsmbEi7zo1i{f!emhuVNeu>wrv$fVX;`qvdlcsa=FbvW-^IHzE~{0zP`G@zgJb2d7jmE?RveMrpY|d zk|dF)sa`LNCX-I5)qW(X>snD1vMdv0)HIE89HnUrw%e_Fp7nZf-W(i^Mp5(^ew!Ss TXt$1|00000NkvXXu0mjf@nKO} literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/resonantinduction/models/battery/bat_level_1.png b/src/main/resources/assets/resonantinduction/models/battery/bat_level_1.png new file mode 100644 index 0000000000000000000000000000000000000000..d9e6f2bcd6d8f5f8f62a923d60a52b142cad147b GIT binary patch literal 736 zcmV<60w4W}P)WFU8GbZ8()Nlj2>E@cM*00KlwL_t(I%RSM{cAIDr z1mKU$4@g47isHoH&vxGb73Rz~&ydTplgJhzfk6DTaK>GWKBpGdT~)~!Ut%H=MK?E@ z%>VPrCr_Rn9qsJ}!DM>holf3r6$)o(L2z(TD)oBLo<&ikkw~;!uU4J!_gqKlMTgK79CK^?N1%J2#t^N>^7eUgXm>xm+&h zd6s3FBuP9xJgBP5)6RLSb#~>gv1i(rKF1b!`|1-@biwKA&aT+m*Vm-QC^UY&Q1$y;^N$rO^n2lau^% zx%m3^t1QbDMPV2QMNw$mR#6mItCcLvEXyL7YyKdUNhI>sYUTO)+5P>!s;Vr@qONP# z>(xBZmSvG7i8M|1dQmi+bvmt9;$Ls^Hpmb$;)?VSx52_cfBj=LN~I=~DEbfS@DX>< Sld3uZ0000WFU8GbZ8()Nlj2>E@cM*00G2FL_t(I%Wc!mavDhx z1mJJ}0RbZx%a$I(@Bbh=_z8CHFl&&QK?2P{`#_n!Y*%#jp(C@hGP|>9&nc5hlC!fy z;m`W)v!8z2*;!esR0hNC?Dfh{r&fFOrczm3YcviHHa3!^)yiZ#oma1*P$-r1g@p$X zR#uYaOs3UJl1Af;FP4@*`D9_CTv=(g3WdGBUw#>la=Cl=j*j5q;4bRu zcpEj}+1c9K*-4VMwIs>qo;;bDD3$Kq-H1A!v$I?-?{p3hGMPt@R#xEXsMl*WYPEOo zE-qkcsa88V$vjI+j96liSF{*V;V*3Y_Vt_5cuQ$xBR8OneL#jsLI_9nX#B5|T!k8o z0H^4>!y6_+d}3l^YN}R)Mx(UAzX2RV{v}A}G1eIOn3)+2M&mU`T}WJG7QhS6*RJ;e zDcjiG;wzOwP~i!A0A?}!Tadhjf`VSJR-2jm@Zr1fVd6Z@`X_*YzQY{%xVxG$Gd!={$9iTdh>PV%=H0~}}*=vW-D u9^Hy?dl!l1G0OdwC`q=qUc49#lH@lPWFU8GbZ8()Nlj2>E@cM*00J{fL_t(I%RSM{R@+(- z1kkO=k^Gj8LjoU>Y5sqjG2Z~m0)iisWf{pncVMo&2EBSv)m>f5lc$(SMA6wk8yhPtLD1`Oz0t^PwL+oQ3WBw@Qt9B}&6_ByR1%3=ZD$8EnOrWNo4a>!WhIJE zPI9@kv%mgIBr26CDwTftVPWB$Z|3Imm6b{*liAz*=bynKm0DWrbl~7%`h`w+vzl&f zeE6`j5k+fjQItwOdNeYU%S}yhLbcl2St^y*Y6l02#DfPbE70jQ8l_U9aCCHW0SgO- z;%ayPG?(OwI7DF)Z1x-Nu2of)Lw^uLaCdiS{4tjQ%nb&m(x*>bTY2C2j>n^67-U%{ zNfHka4@RSr*Vk8F*J+wYS(Y-HTCG${r4|;_5Q3s8%;$4Sl87-1A=qp-+O{WFU8GbZ8()Nlj2>E@cM*00JXPL_t(I%RSOrcG_AH z1<py}$k%3{t73rA`M94yHHlboWuyjg3#A zHa4PYZ7qsYsb|kdMsm5S>7A%nJ3C9I(pv4{Adz_TWMu_9okpWnDin^6E-qkUp-^1M zoxjc{c_I!`SOlB>M!RcORprnhgb+MDJQ#nDFLR6H1hWLrt3OQ(W9(WHJG5+d7}mw%hG}KdDrq zFfsAv%WuD>eczkSX1cEP>(?)B+sd+QmDy}&xm=n~r&g<#nVGS%N+k&P_VSnG3;!WQ zf$oO&4aYa%g`a+^Zkov?61g$n@rcni&WFU8GbZ8()Nlj2>E@cM*00J6GL_t(I%RSRua^gr3 z1<<2MNq`YDrrox8&_A>PZFGd!Fwxz%8vzn8OQPlj#+4s8Dk|&d%~$g3H6{{KG#X_x z|DW%^d-JBzSXv5#UjK!iPTp!23I_*4u(DDr?d`pL7e%#NBGGDXZ9yiJ%cYgdqen|i zQFL~e%Z*0A{gz17YEe`wJ$bUQ@Xa@sO1`vIt7S4fJAeH(7^G77?wy>#-rn8KPEKE` zrj5qhTB8v~D=SfyO1*e7F_FvNx%(n&wML^61OeWsm-keS+UDqkgQYO=Cl}f49!a^ECP!xr#sw7Dw#wdiKX&Q&a!DKSA z-|wBzXA=`sQ-uPQN_kaPK0ZFg81;Q`yWP56EkWo$8{4+k zb)D5}Wj31$A-G&F#&L8$pY3+LFJ+zXt9`lrN)STu^70~0Q|I&9Y&HXj!@)R?Hk-{? zeNw4HVP@vjr(b@_fAl|iz#4z>gzB~ob0j!o%1=LKGPT;qMx&8C;$LJaaJpf8!|Cnq za+O`*ER#tja#OtH5tFNWFU8GbZ8()Nlj2>E@cM*00I(8L_t(I%RSRedg4eB z1mItfk^m!QOuO5Ch`GX?zHi{oTwvzw54$acBp#NaW`XR=MJ+NjG9sfYdG;I=i72|b z$Yegxci(MoH5zMcK`7cZiyR!byWt(_gnWOBK*QhD@f zZ7qt<&T_eni{E}rBx+C`zS%`e|k+m%DTK1=MO?T%=NItJUiz5>KA2t-;Ajr&B5w3P(p* zSFo~DC~k7A=Sq?%;uwWh(CizB-9cT~`k@y>@bK_p{x+BYl^cypr4Jw8y~~GTa6BH3 z<0#8ANs@SadNP~MY`0sd(@EEL%CeNnv|6Q7Dz&nbh7c4*p{goLl87-1A!wS$;czgU z&Gdcmd_J3*nVTyVpj67Ms`C2!D#mCS2D{zP^?DUTuv{*!Rx9H;iZOzPg~4Dn-fV2! zR@Zeln~lX{A%x(1y}Dd3&gZlJe*eX+(|y^O%T+3ge?$pV3@E2}d_ao}Mr8c@`#OzjRiI0i;l~0MiUKEW+oldKr7%Zo086ui#AL%6J{st69Z{ECnHyA|G|AQ3n UFg}_BhyVZp07*qoM6N<$f~tEj5C8xG literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/resonantinduction/models/battery/bat_level_6.png b/src/main/resources/assets/resonantinduction/models/battery/bat_level_6.png new file mode 100644 index 0000000000000000000000000000000000000000..84a741f8561923c0e63413b0c162a43dfc65362d GIT binary patch literal 674 zcmV;T0$u%yP)WFU8GbZ8()Nlj2>E@cM*00IU{L_t(I%RSRea@$A{ z1ki_110Y2ZqGZ|9&KH>bU&9eT!;Br0EQkcaj{ve~L0DajT6AP~W>$6b)6bYlMA6w< zCiC}v_0_Xyt=7gy5RAsp-s|O^PNA^37XArk5{*U_l}g`yv$pod7qwcxvC(K`GCMne{4trNQnzj$9l>C5GuP4a z(`wpky?N7WMbW)`QItwOc~Yt5ayM>1i8`ILvs5bWbOwV&;?bjx4LCaL^-85e;o#un z0@l_F#no>8vzFwEI7ML{w7b@RyVo?0VH|`I+}+(-ye;JaBEP2@A7dR9S#T6 zG|93|k|Z7Ap}KHsOwsiBw~z02->!_-|tmb zWf%sh(@CYWuuv#Ksg&1s?e+CljL|rbw%e`C za|Y>k3!`W<>Ge9@tY9_2mR-ZrVw`g^+qe)#Z{ECnHyTCJ|8rg7eQve$f&c&j07*qo IM6N<$g7aE2$^ZZW literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/resonantinduction/models/battery/bat_level_7.png b/src/main/resources/assets/resonantinduction/models/battery/bat_level_7.png new file mode 100644 index 0000000000000000000000000000000000000000..a58c8a3b5b0512f79af724ebd1dc1b137118672f GIT binary patch literal 661 zcmV;G0&4wWFU8GbZ8()Nlj2>E@cM*00H?)L_t(I%RST0QsYPv z1mLgrZ?G+lhZ(rfb>II%c!9mJGXXmYEXkHFnVy3MU5AQ}ipJE<{V-Q5q*;y*} zdA|GZ*|SDtV!I@J4mH6nPg?<&Yg{o zC^|aIWX{fh`z;7+wJ0i;e)wT+?VE2_Rz>s+&I?BDn5y4H`qJkQ&TU^b+51ett4&g%Z z;^k|7nQSJ=@qlCoT+Q!zKa;%83Q{_qLgC7llapV5NsL%xz<)FF^E)hYgX@cxrKN?1 zS}m8`*~uL6G=qwns6adC#a#Qi$gbx|rGg-{zzgnB&Hk730H^sLE*5*eD4I+36=VG?;K@`1u_2$iJ6h(glE;ZK|=8>HX00000NkvXXu0mjfCf+DU literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/resonantinduction/models/battery/bat_level_8.png b/src/main/resources/assets/resonantinduction/models/battery/bat_level_8.png new file mode 100644 index 0000000000000000000000000000000000000000..2149245c5ba1a815b803a5ff8d06c9c968271aee GIT binary patch literal 641 zcmV-{0)G98P)WFU8GbZ8()Nlj2>E@cM*00HGmL_t(I%RSRudfG}5 z1mItHz<`X26TFD*e<5CjPx3*+O#);jnDfBI(+~a7Q#DoHJ;}TGkVpi<%}plr?|k>& z+S<;}!a||Y>%VfVl{Xrt(%D&|u(VXEoSbZI1VOEqNHiJ;2aw6+a_P*>t5*vPLGbBQ zE_ZYD+i!_Ptri58$`3!x&3*ID%uK$pP^)D!M@N7CH5jB)&z^NUaB}h#qtks^O?P&- zwsv-cU}-4`QmHp@Mn-bECr@8QjmFJQDwQ@GCnt%-%F4n5bULk8rBW(gT-@Ek++3-A z*qy!4BzYnXK`}4vjyvbWSzXso{Yg<2US3{|w`2Lw++a|tTwU$$<$d3~TrP%TkY$-9 zNvu{YqtVEEz1DS|wry2aC6j41DwR}fZZ7dIxFJK10dpL2K#d*+A3r~AZRH+HAUDGw zgn03Q`vYJa$%a_R#6+(*7#?HPpv4lC2)yHl&!{AM5NvF|#+S<@L4h}<5ip5+e2ygh zs34=&DwQTCuC9LhCDli%9sY~Jf8Sw>XFOrS)YRBmtyU-;9px_gh@dhOm1trf$J+fN zyN;2`BoetXHh9G-`k&$&rQc%@(#IAC!C=s8HJYek8ehv|w|8+OX|(eEAPR!5t-ZZo bF9`kz$bQfJI>{)^00000NkvXXu0mjf+ENnF literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/resonantinduction/models/battery/bat_level_9.png b/src/main/resources/assets/resonantinduction/models/battery/bat_level_9.png new file mode 100644 index 0000000000000000000000000000000000000000..a30c4eb352df977244efdd4c362fb3388d2074ca GIT binary patch literal 633 zcmV-<0*3vGP)WFU8GbZ8()Nlj2>E@cM*00G@eL_t(I%SF@4b{a_# z1<+eFAfQyjvaKKJo&WzYdZV?M9*$^Hh^j&i1?dH8b;ijPi^%ul#gNIf=a5JQ!No-; z^Y?uA*^3vgR-;iUoSi>>ua|c^rPAJBp|G-2sSE~dYe7(}B@&&^n>UcjasnnAv6BD`Iox2aBPUqqxl}bCE!61?N>Z?Wr4i0*~N~KhK_wMQn zmX=E8t=z@)LXs!K7!=DwyKC*=_UgJeoCifwczAd)-Av`*a-&hDa&oe@mH1aMV#GbJ zn8f>n3zkUu{?B)>UR5fo)X`C@K#9fek$?g%_K|47k%@_^sZt3lmD~dVMc^54QAL4y z%s$3AW@gULM&oUaI`mj!7J=6&{fOQF%GTB&$u`CXvWZ zvBqQU_%&ueMd{brgY>qAK`~{XE z)7O>#9wQHnrsAA}w0S@w+02lL66gHf+|;}hAeVu`xhOTUBsE2$JhLQ2!QIn0AVn{g z9VqVZ>EaloasKWFLoNmd9_NcLd;U*-tke;dz3bLb`zSBR6+X^|bqu!kLXLs&*qT}= wANs|WSIRTVilMT$DSa>F^0)(Q)IVf1FkgvcHEN%^Xa~qHPgg&ebxsLQ07AMv?EnA(