From ab8361f9e811ee154b683e766b61bd1f228b2912 Mon Sep 17 00:00:00 2001 From: "Aidan C. Brady" Date: Wed, 23 Oct 2013 20:34:33 -0400 Subject: [PATCH] Just about finished rendering! :D --- common/mekanism/api/EnumColor.java | 42 +++++++++++------- .../client/model/ModelTransporterBox.java | 37 +++++++++++++++ .../RenderLogisticalTransporter.java | 18 ++++++++ common/mekanism/common/TransporterStack.java | 11 ++--- .../common/item/ItemConfigurator.java | 4 +- .../TileEntityLogisticalTransporter.java | 8 ++-- .../mekanism/common/util/MekanismUtils.java | 17 ------- .../common/util/TransporterUtils.java | 39 ++++++++++++++++ .../mekanism/render/LogisticalTransporter.png | Bin 10604 -> 4541 bytes .../assets/mekanism/render/TransporterBox.png | Bin 0 -> 3806 bytes 10 files changed, 132 insertions(+), 44 deletions(-) create mode 100644 common/mekanism/client/model/ModelTransporterBox.java create mode 100644 resources/assets/mekanism/render/TransporterBox.png diff --git a/common/mekanism/api/EnumColor.java b/common/mekanism/api/EnumColor.java index 7e75e8ee8..e5f614bc3 100644 --- a/common/mekanism/api/EnumColor.java +++ b/common/mekanism/api/EnumColor.java @@ -7,33 +7,36 @@ package mekanism.api; */ public enum EnumColor { - BLACK("\u00a70", "Black"), - DARK_BLUE("\u00a71", "Dark Blue"), - DARK_GREEN("\u00a72", "Dark Green"), - DARK_AQUA("\u00a73", "Dark Aqua"), - DARK_RED("\u00a74", "Dark Red"), - PURPLE("\u00a75", "Purple"), - ORANGE("\u00a76", "Orange"), - GREY("\u00a77", "Grey"), - DARK_GREY("\u00a78", "Dark Grey"), - INDIGO("\u00a79", "Indigo"), - BRIGHT_GREEN("\u00a7a", "Bright Green"), - AQUA("\u00a7b", "Aqua"), - RED("\u00a7c", "Red"), - PINK("\u00a7d", "Pink"), - YELLOW("\u00a7e", "Yellow"), - WHITE("\u00a7f", "White"); + BLACK("\u00a70", "Black", new int[] {0, 0, 0}), + DARK_BLUE("\u00a71", "Dark Blue", new int[] {0, 0, 170}), + DARK_GREEN("\u00a72", "Dark Green", new int[] {0, 170, 0}), + DARK_AQUA("\u00a73", "Dark Aqua", new int[] {0, 170, 170}), + DARK_RED("\u00a74", "Dark Red", new int[] {170, 0, 0}), + PURPLE("\u00a75", "Purple", new int[] {170, 0, 170}), + ORANGE("\u00a76", "Orange", new int[] {255, 170, 0}), + GREY("\u00a77", "Grey", new int[] {170, 170, 170}), + DARK_GREY("\u00a78", "Dark Grey", new int[] {85, 85, 85}), + INDIGO("\u00a79", "Indigo", new int[] {85, 85, 255}), + BRIGHT_GREEN("\u00a7a", "Bright Green", new int[] {85, 255, 85}), + AQUA("\u00a7b", "Aqua", new int[] {85, 255, 255}), + RED("\u00a7c", "Red", new int[] {255, 85, 85}), + PINK("\u00a7d", "Pink", new int[] {255, 85, 255}), + YELLOW("\u00a7e", "Yellow", new int[] {255, 255, 85}), + WHITE("\u00a7f", "White", new int[] {255, 255, 255}); /** The color code that will be displayed */ public final String code; + public final int[] rgbCode; + /** A friendly name of the color. */ public String friendlyName; - private EnumColor(String s, String n) + private EnumColor(String s, String n, int[] rgb) { code = s; friendlyName = n; + rgbCode = rgb; } public String getName() @@ -41,6 +44,11 @@ public enum EnumColor return code + friendlyName; } + public float getColor(int index) + { + return (float)rgbCode[index]/255F; + } + @Override public String toString() { diff --git a/common/mekanism/client/model/ModelTransporterBox.java b/common/mekanism/client/model/ModelTransporterBox.java new file mode 100644 index 000000000..91c7d8402 --- /dev/null +++ b/common/mekanism/client/model/ModelTransporterBox.java @@ -0,0 +1,37 @@ +package mekanism.client.model; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelTransporterBox extends ModelBase +{ + ModelRenderer box; + + public ModelTransporterBox() + { + textureWidth = 64; + textureHeight = 64; + + box = new ModelRenderer(this, 0, 0); + box.addBox(0F, 0F, 0F, 7, 7, 7); + box.setRotationPoint(-3.5F, 0, -3.5F); + box.setTextureSize(64, 64); + box.mirror = true; + setRotation(box, 0F, 0F, 0F); + } + + public void render(float size) + { + box.render(size); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } +} diff --git a/common/mekanism/client/render/tileentity/RenderLogisticalTransporter.java b/common/mekanism/client/render/tileentity/RenderLogisticalTransporter.java index b86777027..17e11dbbe 100644 --- a/common/mekanism/client/render/tileentity/RenderLogisticalTransporter.java +++ b/common/mekanism/client/render/tileentity/RenderLogisticalTransporter.java @@ -3,6 +3,7 @@ package mekanism.client.render.tileentity; import mekanism.api.Object3D; import mekanism.client.model.ModelTransmitter; import mekanism.client.model.ModelTransmitter.Size; +import mekanism.client.model.ModelTransporterBox; import mekanism.common.TransporterStack; import mekanism.common.tileentity.TileEntityLogisticalTransporter; import mekanism.common.util.MekanismUtils; @@ -24,6 +25,7 @@ import cpw.mods.fml.relauncher.SideOnly; public class RenderLogisticalTransporter extends TileEntitySpecialRenderer { private ModelTransmitter model = new ModelTransmitter(Size.LARGE); + private ModelTransporterBox modelBox = new ModelTransporterBox(); private EntityItem entityItem = new EntityItem(null); private RenderItem renderer = (RenderItem)RenderManager.instance.getEntityClassRenderObject(EntityItem.class); @@ -42,6 +44,11 @@ public class RenderLogisticalTransporter extends TileEntitySpecialRenderer GL11.glScalef(1.0F, -1F, -1F); GL11.glDisable(GL11.GL_CULL_FACE); + if(tileEntity.color != null) + { + GL11.glColor4f(tileEntity.color.getColor(0), tileEntity.color.getColor(1), tileEntity.color.getColor(2), 1.0F); + } + boolean[] connectable = TransporterUtils.getConnections(tileEntity); model.renderCenter(connectable); @@ -77,6 +84,17 @@ public class RenderLogisticalTransporter extends TileEntitySpecialRenderer renderer.doRenderItem(entityItem, x + 0.5 + offset.xCoord*progress, y + 0.5 + offset.yCoord*progress - entityItem.yOffset - itemFix, z + 0.5 + offset.zCoord*progress, 0, 0); GL11.glPopMatrix(); + + if(stack.color != null) + { + bindTexture(MekanismUtils.getResource(ResourceType.RENDER, "TransporterBox.png")); + GL11.glPushMatrix(); + GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glColor4f(stack.color.getColor(0), stack.color.getColor(1), stack.color.getColor(2), 1.0F); + GL11.glTranslatef((float)(x + 0.5 + offset.xCoord*progress), (float)(y + 0.5 + offset.yCoord*progress - entityItem.yOffset - itemFix), (float)(z + 0.5 + offset.zCoord*progress)); + modelBox.render(0.0625F); + GL11.glPopMatrix(); + } } } } diff --git a/common/mekanism/common/TransporterStack.java b/common/mekanism/common/TransporterStack.java index bd1384095..477d0d919 100644 --- a/common/mekanism/common/TransporterStack.java +++ b/common/mekanism/common/TransporterStack.java @@ -6,6 +6,7 @@ import java.util.List; import mekanism.api.EnumColor; import mekanism.api.Object3D; import mekanism.common.tileentity.TileEntityLogisticalTransporter; +import mekanism.common.util.TransporterUtils; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; @@ -18,7 +19,7 @@ public class TransporterStack public int progress; - public EnumColor color; + public EnumColor color = EnumColor.AQUA; public boolean initiatedPath = false; @@ -37,7 +38,7 @@ public class TransporterStack { if(color != null) { - data.add(color.ordinal()); + data.add(TransporterUtils.colors.indexOf(color)); } else { data.add(-1); @@ -68,7 +69,7 @@ public class TransporterStack if(c != -1) { - color = EnumColor.values()[c]; + color = TransporterUtils.colors.get(c); } else { color = null; @@ -91,7 +92,7 @@ public class TransporterStack { if(color != null) { - nbtTags.setInteger("color", color.ordinal()); + nbtTags.setInteger("color", TransporterUtils.colors.indexOf(color)); } nbtTags.setInteger("progress", progress); @@ -104,7 +105,7 @@ public class TransporterStack { if(nbtTags.hasKey("color")) { - color = EnumColor.values()[nbtTags.getInteger("color")]; + color = TransporterUtils.colors.get(nbtTags.getInteger("color")); } progress = nbtTags.getInteger("progress"); diff --git a/common/mekanism/common/item/ItemConfigurator.java b/common/mekanism/common/item/ItemConfigurator.java index 8bbf77073..59749cf73 100644 --- a/common/mekanism/common/item/ItemConfigurator.java +++ b/common/mekanism/common/item/ItemConfigurator.java @@ -18,6 +18,7 @@ import mekanism.common.tileentity.TileEntityElectricPump; import mekanism.common.tileentity.TileEntityLogisticalTransporter; import mekanism.common.tileentity.TileEntityMechanicalPipe; import mekanism.common.util.MekanismUtils; +import mekanism.common.util.TransporterUtils; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; @@ -71,7 +72,8 @@ public class ItemConfigurator extends ItemEnergized else if(world.getBlockTileEntity(x, y, z) instanceof TileEntityLogisticalTransporter) { TileEntityLogisticalTransporter transporter = (TileEntityLogisticalTransporter)world.getBlockTileEntity(x, y, z); - MekanismUtils.incrementColor(transporter); + TransporterUtils.incrementColor(transporter); + PacketHandler.sendPacket(Transmission.CLIENTS_RANGE, new PacketTileEntity().setParams(Object3D.get(transporter), transporter.getNetworkedData(new ArrayList())), Object3D.get(transporter), 50D); player.sendChatToPlayer(ChatMessageComponent.createFromText(EnumColor.DARK_BLUE + "[Mekanism]" + EnumColor.GREY + " Color bumped to: " + (transporter.color != null ? transporter.color.getName() : EnumColor.BLACK + "None"))); return true; } diff --git a/common/mekanism/common/tileentity/TileEntityLogisticalTransporter.java b/common/mekanism/common/tileentity/TileEntityLogisticalTransporter.java index 92b011cf0..9f546b1c3 100644 --- a/common/mekanism/common/tileentity/TileEntityLogisticalTransporter.java +++ b/common/mekanism/common/tileentity/TileEntityLogisticalTransporter.java @@ -327,7 +327,7 @@ public class TileEntityLogisticalTransporter extends TileEntityTransmitter colors = buildColors(); + + public static ArrayList buildColors() + { + ArrayList ret = new ArrayList(); + + ret.add(EnumColor.DARK_BLUE); + ret.add(EnumColor.DARK_GREEN); + ret.add(EnumColor.DARK_AQUA); + ret.add(EnumColor.DARK_RED); + ret.add(EnumColor.PURPLE); + ret.add(EnumColor.INDIGO); + ret.add(EnumColor.BRIGHT_GREEN); + ret.add(EnumColor.AQUA); + ret.add(EnumColor.RED); + ret.add(EnumColor.PINK); + ret.add(EnumColor.YELLOW); + + return ret; + } + /** * Gets all the transporters around a tile entity. * @param tileEntity - center tile entity @@ -327,4 +349,21 @@ public final class TransporterUtils return null; } + + public static void incrementColor(TileEntityLogisticalTransporter tileEntity) + { + if(tileEntity.color == null) + { + tileEntity.color = colors.get(0); + return; + } + else if(colors.indexOf(tileEntity.color) == colors.size()-1) + { + tileEntity.color = null; + return; + } + + int index = colors.indexOf(tileEntity.color); + tileEntity.color = colors.get(index+1); + } } \ No newline at end of file diff --git a/resources/assets/mekanism/render/LogisticalTransporter.png b/resources/assets/mekanism/render/LogisticalTransporter.png index e29d5a5e92af4b377c9fdedc14ef60220f474939..7d0b8a422997ce8bd596f583fdf6c9646ee8f3f4 100644 GIT binary patch literal 4541 zcmeHJX;f3mwyqc?g870Uds0dCF)EE#@Ku}afiA)h>Qf5RF2uWH+5Ku&DpqWDB zfS@wUlptUuI4}eSj1VO>5TeW^2npjmLHn)u)_Ong&$rgSm6cPKI=ia&{`R-O%B_

0E)Y@%bQ|_=LLrUp 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 W4As}*KT!g}?(Oc|^8fJv^IrfTR4-)! diff --git a/resources/assets/mekanism/render/TransporterBox.png b/resources/assets/mekanism/render/TransporterBox.png new file mode 100644 index 0000000000000000000000000000000000000000..3611881231af2e984c45b533f138a28220c81822 GIT binary patch literal 3806 zcmeH~`#%%v6t+!}q82`Q`I|yx*V4=sXpA=_DYbl9i5&!@| z%GSop6#x(tghBu@kYMu(e-j7*2%iYHv~;$$v{ZKv4-E{ybrS%%aOk1?WaxyOyhTc= zYq0`U-OD;TwXM<}?%kkttfC!cn^Cf2r%QMj3UoboY>QlH3s2T9x3!7=@kK^Mdqu?kdsEbP9rza?Hn;2IXs)OUU5& zIY-?eJ;xLB`%XN|C{xHRa7Z1j9flnk#xFV=Jn8B=eEK7p)64j-k}B4<@?>@2aZ9uH zF813%%5f+1ZLkXF=(eOw_i#u(Ouki=w;fCbePb!F4V@PT;(=M1yu;`Liq0iR4XAi} zzb*q@Aw~k3lSTs#iT=m~iX9o>-ES*39uIs{Tk+ICyzjdqE{tfzmpPpqxw(w^(~Fl^ z(h%@LCWWrI<<^n{9eKa0yaua6RyNrB$BS&^xPx&(w3^H2+ozZa`hqnQSs_mc(M4hh z?vx#L;QbM46sxRQJ;2styy(!pFcKMbxVHGneWu5D-Dtp%CvQ67!BhTIAMG&Z*~pwQ zkNHGeSM6`v-9Sy;jn=ZB+54jRp>-9cHzGZQrV!&Ig$Om{BOn)Nmf8 zJb@T?y$S^gl!D}nt01Gf%VMyPrXQt6B*IaqVBI0i zNj8h*6zQg5>gc?&dl_@`kxTCw^BA`Wx1W?#1=HKqbm})U@m`Tr7nS=x5;AB}77_wo zmNxGMHEs8pyLeR#qGAqFjMyes@!!zv^6z`Xr9lRJr6M zG^8cP2%WmtKkhnS{kmjnC!t?c`y;f&qIo0!doTBEU*NPjt6D&lu)NZ~mhxMOGR?2)<5 zUD9rixl)yU15!1kY_@rAS$wNUa!;jMF+!sD4~O@$2J6C#CNf%}e9%a{TU#PNLgCs( zVMeLz`HuF{P0g|>pS-!}sc6%JR2`cXCf4Z-W!e}>EFf+BZfjSS9$@ch$el4YokHo` zYjqe;=bMIkT-}t2$nEbz+yhNY7un*Y{yyIc_8hA$uRJ9l*ZJWrf@+-%?lA%P&7C|S z{h|32_VtODKaZ#XxI*W(T#cehqE@}FlKG#^7#_cSzmdbN$g*3HjVG-+#?2cSVMW=E z&C?67ZDv7F;HFiRJe5V*G%bQSfWFUh@6)j|Q-d7i6ClUTkjME712q_5ZLCQU*y*+#}RDi^|i6hWN2t9vJ?9Gk1N)n!PeXTpB8Kq6(HNKRG!$@}AZV zW_!(l3$D?ve#Rx?>f&B%=QfwkNUEw`;&L1P@Ac-mcg@vs1*yhQ)@`k=tw;!<`d58y zlDcmEeBsVq#C)Bt(~(d}`YGTL_#_?hB^$cGy1MECW-qNvOf4;iSIC1eBwc8dQQ4{l z)bE5I%UOxYMq6?w?g|(D_7Z(SR;1UMwa{1SkU31|R{Epc4W}@_kCAEie@VqRUS)OJkb6QKjvvBbme);Zp6j8&YK1M+Dxg z#)Mj<<03kFwU8~IX5dT`>M#zQ3}^_@4Y516WFG7zjCske=$h^MLkn;I?czF?sfC2Ov2%x6-GP) z$F+P}->DYFM+e(1qP3)R6ouOl3&yJ-h|h|zpwo@p`#p9vnU4-hU0y^7WWrR1?SArB z^#B{|1{GT-mB#W$3HXhmw6u)i6tv}auVk{@&tZDvVXP14xVq3E<+BK!gz>Mlg)=47 z>}OxYf$+mWDj#YxQMy9zxSqDG+pWMAE>R}B6-60-!2kllnnlE8B zT0IrVjcnS#M&#ReL6h4Gmg8Y zM}zn+qI)P5AK)GkOM`8k#Vnu<2ih1=D=OC|u$ePcF}d|T(8l6#jVi;ced(!hyd^Wv z#)_KTkZ_WO{)U!9c0nVPl$P-pZ7D+yY~E{;k(n4D7mgC~KoUatjr~fSu$1ibpKeK) z^M_>JrC%&qT+NxWr?Pt2?I|f$xm~AN^uKN_eG{24;q}UeZd>c#E9|d}^1XDjKn|AVBLG>OX?X) zK(cF95@gZ00C!~7*EWPzmF~aFnniI+5D^YBke-lEOH!eG()b>!JR?PtwfpEr*v*eg#1pE!HrKTl-!5G)nrbR{=(JG#rQk;v2`}58dfbj)Zr5Gi!MNW@3vG6oHWtaBy$dcdGMSg-d(HK{GSy( z^IO+Q^nC-Jeyx8FPJAASOk&=Z&qGV5{Zme@-(WxmP#C%R?+d{#PRp{N<)fgYUv3{;MwBXZ1z!1|eXOVp=>J#bOMXrS~B*sA{ zI1j$lC|z|^SWH&^@_m31@ZaEH2>&YK|Lg+vZ6IG%5>V1Rub0Xb{96IGR~@YgzxX}) EFG_YfYXATM literal 0 HcmV?d00001