From 34881cb453bb54020c8d2099e3eaf45e59e55044 Mon Sep 17 00:00:00 2001 From: Calclavia Date: Sun, 22 Dec 2013 23:49:43 +0800 Subject: [PATCH] Got network split and merge working --- src/resonantinduction/MultipartRI.java | 5 +- .../wire/IAdvancedConductor.java | 27 ------- src/resonantinduction/wire/ItemWire.java | 4 +- src/resonantinduction/wire/part/ITest.java | 23 ------ ...artWireBase.java => PartAdvancedWire.java} | 78 +++++++++---------- .../part/{FlatWire.java => PartFlatWire.java} | 65 ++++++++-------- .../wire/part/TraitConductor.java | 57 ++++++++++---- .../wire/part/TraitTest.java | 35 --------- .../wire/render/RenderFlatWire.java | 8 +- 9 files changed, 119 insertions(+), 183 deletions(-) delete mode 100644 src/resonantinduction/wire/IAdvancedConductor.java delete mode 100644 src/resonantinduction/wire/part/ITest.java rename src/resonantinduction/wire/part/{PartWireBase.java => PartAdvancedWire.java} (78%) rename src/resonantinduction/wire/part/{FlatWire.java => PartFlatWire.java} (91%) delete mode 100644 src/resonantinduction/wire/part/TraitTest.java diff --git a/src/resonantinduction/MultipartRI.java b/src/resonantinduction/MultipartRI.java index 49e9f3582..153daf53f 100644 --- a/src/resonantinduction/MultipartRI.java +++ b/src/resonantinduction/MultipartRI.java @@ -1,6 +1,6 @@ package resonantinduction; -import resonantinduction.wire.part.FlatWire; +import resonantinduction.wire.part.PartFlatWire; import codechicken.multipart.MultiPartRegistry; import codechicken.multipart.MultiPartRegistry.IPartFactory; import codechicken.multipart.MultipartGenerator; @@ -14,7 +14,6 @@ public class MultipartRI implements IPartFactory { MultiPartRegistry.registerParts(this, new String[] { "resonant_induction_flat_wire" }); MultipartGenerator.registerTrait("universalelectricity.api.energy.IConductor", "resonantinduction.wire.part.TraitConductor"); - //MultipartGenerator.registerTrait("resonantinduction.wire.part.ITest", "resonantinduction.wire.part.TraitTest"); MultipartGenerator.registerTrait("ic2.api.energy.tile.IEnergySink", "resonantinduction.wire.part.TraitEnergySink"); } @@ -23,7 +22,7 @@ public class MultipartRI implements IPartFactory { if (name.equals("resonant_induction_flat_wire")) { - return new FlatWire(); + return new PartFlatWire(); } return null; diff --git a/src/resonantinduction/wire/IAdvancedConductor.java b/src/resonantinduction/wire/IAdvancedConductor.java deleted file mode 100644 index 78768dfd7..000000000 --- a/src/resonantinduction/wire/IAdvancedConductor.java +++ /dev/null @@ -1,27 +0,0 @@ -package resonantinduction.wire; - -import universalelectricity.api.energy.IConductor; - -/** - * A connector for {EnergyNetwork}. - * - * @author Calclavia - * - */ -public interface IAdvancedConductor extends IConductor -{ - /** - * The insulatation methods. - * - * @return - */ - public boolean isInsulated(); - - public void setInsulated(boolean insulated); - - public int getInsulationColor(); - - public void setInsulationColor(int dye); - - public EnumWireMaterial getMaterial(); -} diff --git a/src/resonantinduction/wire/ItemWire.java b/src/resonantinduction/wire/ItemWire.java index 69908016c..b542a6361 100644 --- a/src/resonantinduction/wire/ItemWire.java +++ b/src/resonantinduction/wire/ItemWire.java @@ -13,7 +13,7 @@ import net.minecraftforge.common.ForgeDirection; import resonantinduction.ResonantInduction; import resonantinduction.TabRI; import resonantinduction.Utility; -import resonantinduction.wire.part.FlatWire; +import resonantinduction.wire.part.PartFlatWire; import resonantinduction.wire.render.RenderFlatWire; import universalelectricity.api.energy.UnitDisplay; import universalelectricity.api.energy.UnitDisplay.Unit; @@ -49,7 +49,7 @@ public class ItemWire extends JItemMultiPart return null; } - FlatWire wire = (FlatWire) MultiPartRegistry.createPart("resonant_induction_flat_wire", false); + PartFlatWire wire = (PartFlatWire) MultiPartRegistry.createPart("resonant_induction_flat_wire", false); if (wire != null) { diff --git a/src/resonantinduction/wire/part/ITest.java b/src/resonantinduction/wire/part/ITest.java deleted file mode 100644 index f9fcea20a..000000000 --- a/src/resonantinduction/wire/part/ITest.java +++ /dev/null @@ -1,23 +0,0 @@ -package resonantinduction.wire.part; - -import net.minecraftforge.common.ForgeDirection; -import universalelectricity.api.energy.IEnergyInterface; - -/** - * @author Calclavia - * - */ -public interface ITest -{ - /** - * Adds energy to an block. Returns the quantity of energy that was accepted. This should always - * return 0 if the block cannot be externally charged. - * - * @param from Orientation the energy is sent in from. - * @param receive Maximum amount of energy (joules) to be sent into the block. - * @param doReceive If false, the charge will only be simulated. - * @return Amount of energy that was accepted by the block. - */ - public long onReceiveEnergy(ForgeDirection from, long receive, boolean doReceive); - -} diff --git a/src/resonantinduction/wire/part/PartWireBase.java b/src/resonantinduction/wire/part/PartAdvancedWire.java similarity index 78% rename from src/resonantinduction/wire/part/PartWireBase.java rename to src/resonantinduction/wire/part/PartAdvancedWire.java index 1df7a5522..eef82a96a 100644 --- a/src/resonantinduction/wire/part/PartWireBase.java +++ b/src/resonantinduction/wire/part/PartAdvancedWire.java @@ -13,9 +13,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.MovingObjectPosition; import resonantinduction.wire.EnumWireMaterial; -import resonantinduction.wire.IAdvancedConductor; import universalelectricity.api.CompatibilityModule; -import universalelectricity.api.energy.IConductor; import codechicken.lib.data.MCDataInput; import codechicken.lib.data.MCDataOutput; @@ -23,7 +21,7 @@ import codechicken.lib.data.MCDataOutput; * @author Calclavia * */ -public abstract class PartWireBase extends PartConductor implements IAdvancedConductor +public abstract class PartAdvancedWire extends PartConductor { public static final int DEFAULT_COLOR = 16; public int dyeID = DEFAULT_COLOR; @@ -37,15 +35,15 @@ public abstract class PartWireBase extends PartConductor implements IAdvancedCon @Override public boolean canConnectTo(Object obj) { - if (obj instanceof IAdvancedConductor) + if (obj instanceof PartFlatWire) { - IAdvancedConductor wire = (IAdvancedConductor) obj; + PartFlatWire wire = (PartFlatWire) obj; if (wire.getMaterial() == getMaterial()) { if (this.isInsulated() && wire.isInsulated()) { - return this.getInsulationColor() == wire.getInsulationColor(); + return this.getColor() == wire.getColor(); } return true; @@ -70,47 +68,36 @@ public abstract class PartWireBase extends PartConductor implements IAdvancedCon return this.getMaterial().maxAmps; } - @Override + /** + * Material Methods + */ public EnumWireMaterial getMaterial() { - return material; + return this.material; } - public void setMaterialFromID(int id) + public void setMaterial(EnumWireMaterial material) { - material = EnumWireMaterial.values()[id]; + this.material = material; + } + + public void setMaterial(int id) + { + this.setMaterial(EnumWireMaterial.values()[id]); } public int getMaterialID() { - return material.ordinal(); + return this.material.ordinal(); } - @Override - public boolean isInsulated() - { - return isInsulated; - } - - @Override - public int getInsulationColor() - { - return isInsulated ? dyeID : -1; - } - - @Override - public void setInsulationColor(int dye) - { - dyeID = dye; - tile().notifyPartChange(this); - } - - @Override + /** + * Insulation Methods + */ public void setInsulated(boolean insulated) { - isInsulated = insulated; - dyeID = DEFAULT_COLOR; - tile().notifyPartChange(this); + this.isInsulated = insulated; + this.dyeID = DEFAULT_COLOR; } public void setInsulated(int dyeColour) @@ -120,15 +107,22 @@ public abstract class PartWireBase extends PartConductor implements IAdvancedCon tile().notifyPartChange(this); } - public void setInsulated() + public boolean isInsulated() { - setInsulated(true); + return this.isInsulated; } - public void setDye(int dye) + /** + * Wire Coloring Methods + */ + public int getColor() { - dyeID = dye; - tile().notifyPartChange(this); + return this.isInsulated ? this.dyeID : -1; + } + + public void setColor(int dye) + { + this.dyeID = dye; } /** @@ -141,7 +135,7 @@ public abstract class PartWireBase extends PartConductor implements IAdvancedCon { if (item.itemID == Item.dyePowder.itemID && isInsulated()) { - setDye(item.getItemDamage()); + setColor(item.getItemDamage()); return true; } else if (item.itemID == Block.cloth.blockID) @@ -198,7 +192,7 @@ public abstract class PartWireBase extends PartConductor implements IAdvancedCon @Override public void readDesc(MCDataInput packet) { - this.setMaterialFromID(packet.readByte()); + this.setMaterial(packet.readByte()); this.dyeID = packet.readByte(); this.isInsulated = packet.readBoolean(); } @@ -224,7 +218,7 @@ public abstract class PartWireBase extends PartConductor implements IAdvancedCon public void load(NBTTagCompound nbt) { super.load(nbt); - setMaterialFromID(nbt.getInteger("typeID")); + setMaterial(nbt.getInteger("typeID")); this.isInsulated = nbt.getBoolean("isInsulated"); this.dyeID = nbt.getInteger("dyeID"); } diff --git a/src/resonantinduction/wire/part/FlatWire.java b/src/resonantinduction/wire/part/PartFlatWire.java similarity index 91% rename from src/resonantinduction/wire/part/FlatWire.java rename to src/resonantinduction/wire/part/PartFlatWire.java index 055137314..1eafa6ffc 100644 --- a/src/resonantinduction/wire/part/FlatWire.java +++ b/src/resonantinduction/wire/part/PartFlatWire.java @@ -15,7 +15,6 @@ import org.lwjgl.opengl.GL11; import resonantinduction.Utility; import resonantinduction.wire.EnumWireMaterial; -import resonantinduction.wire.IAdvancedConductor; import resonantinduction.wire.render.RenderFlatWire; import codechicken.lib.colour.Colour; import codechicken.lib.data.MCDataInput; @@ -46,7 +45,7 @@ import cpw.mods.fml.relauncher.SideOnly; * @author Modified by Calclavia, MrTJP * */ -public class FlatWire extends PartWireBase implements TFacePart, JNormalOcclusion +public class PartFlatWire extends PartAdvancedWire implements TFacePart, JNormalOcclusion { public static Cuboid6[][] selectionBounds = new Cuboid6[3][6]; public static Cuboid6[][] occlusionBounds = new Cuboid6[3][6]; @@ -84,17 +83,17 @@ public class FlatWire extends PartWireBase implements TFacePart, JNormalOcclusio */ public int connMap; - public FlatWire() + public PartFlatWire() { } - public FlatWire(int typeID) + public PartFlatWire(int typeID) { this(EnumWireMaterial.values()[typeID]); } - public FlatWire(EnumWireMaterial type) + public PartFlatWire(EnumWireMaterial type) { material = type; } @@ -184,8 +183,6 @@ public class FlatWire extends PartWireBase implements TFacePart, JNormalOcclusio } } } - - this.getNetwork().split(this); } } @@ -208,9 +205,10 @@ public class FlatWire extends PartWireBase implements TFacePart, JNormalOcclusio updateExternalConnections(); } - this.recalculateConnections(); tile().markDirty(); } + + this.recalculateConnections(); } @Override @@ -281,9 +279,8 @@ public class FlatWire extends PartWireBase implements TFacePart, JNormalOcclusio if (!world().isRemote) { System.out.println(this.getNetwork()); - this.getConnections(); - this.recalculateConnections(); } + return super.activate(player, part, item); } @@ -316,7 +313,7 @@ public class FlatWire extends PartWireBase implements TFacePart, JNormalOcclusio if (this.canConnectTo(tp)) { this.connections[absDir] = tp; - this.getNetwork().merge(((FlatWire) tp).getNetwork()); + this.getNetwork().merge(((PartFlatWire) tp).getNetwork()); continue; } } @@ -338,7 +335,7 @@ public class FlatWire extends PartWireBase implements TFacePart, JNormalOcclusio if (this.canConnectTo(tp)) { this.connections[absDir] = tp; - this.getNetwork().merge(((FlatWire) tp).getNetwork()); + this.getNetwork().merge(((PartFlatWire) tp).getNetwork()); } } @@ -361,7 +358,7 @@ public class FlatWire extends PartWireBase implements TFacePart, JNormalOcclusio if (this.canConnectTo(tp)) { this.connections[absSide] = tp; - this.getNetwork().merge(((FlatWire) tp).getNetwork()); + this.getNetwork().merge(((PartFlatWire) tp).getNetwork()); return; } } @@ -513,7 +510,7 @@ public class FlatWire extends PartWireBase implements TFacePart, JNormalOcclusio { int absDir = Rotation.rotateSide(side, r); TMultiPart facePart = tile().partMap(absDir); - if (facePart != null && (!(facePart instanceof FlatWire) || !canConnectTo((FlatWire) facePart))) + if (facePart != null && (!(facePart instanceof PartFlatWire) || !canConnectTo((PartFlatWire) facePart))) return false; if (tile().partMap(PartMap.edgeBetween(side, absDir)) != null) @@ -544,14 +541,14 @@ public class FlatWire extends PartWireBase implements TFacePart, JNormalOcclusio { TMultiPart tp = t.partMap(absDir ^ 1); - if (tp instanceof FlatWire) + if (tp instanceof PartFlatWire) { - boolean b = ((FlatWire) tp).connectCorner(this, Rotation.rotationTo(absDir ^ 1, side ^ 1)); + boolean b = ((PartFlatWire) tp).connectCorner(this, Rotation.rotationTo(absDir ^ 1, side ^ 1)); if (b) { // let them connect to us - if (tp instanceof FlatWire && !renderThisCorner((FlatWire) tp)) + if (tp instanceof PartFlatWire && !renderThisCorner((PartFlatWire) tp)) { return 1; } @@ -590,9 +587,9 @@ public class FlatWire extends PartWireBase implements TFacePart, JNormalOcclusio { TMultiPart tp = t.partMap(side); - if (tp instanceof FlatWire) + if (this.canConnectTo(tp)) { - return ((FlatWire) tp).connectStraight(this, (r + 2) % 4); + return ((PartFlatWire) tp).connectStraight(this, (r + 2) % 4); } } else @@ -613,9 +610,9 @@ public class FlatWire extends PartWireBase implements TFacePart, JNormalOcclusio TMultiPart tp = tile().partMap(absDir); - if (tp instanceof FlatWire) + if (this.canConnectTo(tp)) { - return ((FlatWire) tp).connectInternal(this, Rotation.rotationTo(absDir, side)); + return ((PartFlatWire) tp).connectInternal(this, Rotation.rotationTo(absDir, side)); } return connectInternalOverride(tp, r); @@ -628,31 +625,31 @@ public class FlatWire extends PartWireBase implements TFacePart, JNormalOcclusio public boolean connectCenter() { - TMultiPart t = tile().partMap(6); + TMultiPart tp = tile().partMap(6); - if (t instanceof FlatWire) + if (this.canConnectTo(tp)) { - return ((FlatWire) t).connectInternal(this, side); + return ((PartFlatWire) tp).connectInternal(this, side); } return false; } - public boolean renderThisCorner(IAdvancedConductor part) + public boolean renderThisCorner(PartFlatWire part) { - if (!(part instanceof FlatWire)) + if (!(part instanceof PartFlatWire)) return false; - FlatWire wire = (FlatWire) part; + PartFlatWire wire = (PartFlatWire) part; if (wire.getThickness() == getThickness()) return side < wire.side; return wire.getThickness() > getThickness(); } - public boolean connectCorner(IAdvancedConductor wire, int r) + public boolean connectCorner(PartFlatWire wire, int r) { - if (canConnectTo(wire) && maskOpen(r)) + if (this.canConnectTo(wire) && maskOpen(r)) { int oldConn = connMap; connMap |= 0x1 << r; @@ -666,9 +663,9 @@ public class FlatWire extends PartWireBase implements TFacePart, JNormalOcclusio return false; } - public boolean connectStraight(IAdvancedConductor wire, int r) + public boolean connectStraight(PartFlatWire wire, int r) { - if (canConnectTo(wire) && maskOpen(r)) + if (this.canConnectTo(wire) && maskOpen(r)) { int oldConn = connMap; connMap |= 0x10 << r; @@ -679,9 +676,9 @@ public class FlatWire extends PartWireBase implements TFacePart, JNormalOcclusio return false; } - public boolean connectInternal(IAdvancedConductor wire, int r) + public boolean connectInternal(PartFlatWire wire, int r) { - if (canConnectTo(wire)) + if (this.canConnectTo(wire)) { int oldConn = connMap; connMap |= 0x100 << r; @@ -756,7 +753,7 @@ public class FlatWire extends PartWireBase implements TFacePart, JNormalOcclusio public int getThickness() { - return 0; + return this.isInsulated ? 1 : 0; } @Override diff --git a/src/resonantinduction/wire/part/TraitConductor.java b/src/resonantinduction/wire/part/TraitConductor.java index 530122c2f..cb91948bb 100644 --- a/src/resonantinduction/wire/part/TraitConductor.java +++ b/src/resonantinduction/wire/part/TraitConductor.java @@ -56,19 +56,32 @@ public class TraitConductor extends TileMultipart implements IConductor @Override public Object[] getConnections() { + for (IConductor conductor : this.interfaces) + { + return conductor.getConnections(); + } + return null; } @Override public IEnergyNetwork getNetwork() { + for (IConductor conductor : this.interfaces) + { + return conductor.getNetwork(); + } + return null; } @Override public void setNetwork(IEnergyNetwork network) { - + for (IConductor conductor : this.interfaces) + { + conductor.setNetwork(network); + } } @Override @@ -88,19 +101,13 @@ public class TraitConductor extends TileMultipart implements IConductor @Override public long onReceiveEnergy(ForgeDirection from, long receive, boolean doReceive) { - /*TMultiPart part = partMap(from.ordinal()); + TMultiPart part = this.partMap(from.ordinal()); - if (part != null) + if (this.interfaces.contains(part)) { - for (IConductor conductor : this.interfaces) - { - if (conductor == part) - { - conductor.onReceiveEnergy(from, receive, doReceive); - } - } + ((IConductor) part).onReceiveEnergy(from, receive, doReceive); } -*/ + return 0; } @@ -113,13 +120,37 @@ public class TraitConductor extends TileMultipart implements IConductor @Override public long getEnergyLoss() { - return 0; + long energyLoss = 0; + + if (this.interfaces.size() > 0) + { + for (IConductor conductor : this.interfaces) + { + energyLoss += conductor.getEnergyLoss(); + } + + energyLoss /= this.interfaces.size(); + } + + return energyLoss; } @Override public long getEnergyCapacitance() { - return 0; + long capacitance = 0; + + if (this.interfaces.size() > 0) + { + for (IConductor conductor : this.interfaces) + { + capacitance += conductor.getEnergyCapacitance(); + } + + capacitance /= this.interfaces.size(); + } + + return capacitance; } } diff --git a/src/resonantinduction/wire/part/TraitTest.java b/src/resonantinduction/wire/part/TraitTest.java deleted file mode 100644 index bac8ff72f..000000000 --- a/src/resonantinduction/wire/part/TraitTest.java +++ /dev/null @@ -1,35 +0,0 @@ -package resonantinduction.wire.part; - -import java.util.HashSet; -import java.util.Set; - -import net.minecraftforge.common.ForgeDirection; -import codechicken.multipart.TMultiPart; -import codechicken.multipart.TileMultipart; - -public class TraitTest extends TileMultipart implements ITest -{ - public Set interfaces = new HashSet(); - - @Override - public long onReceiveEnergy(ForgeDirection from, long receive, boolean doReceive) - { - - TMultiPart part = partMap(from.ordinal()); - - if (part != null) - { - for (ITest conductor : this.interfaces) - { - if (conductor == part) - { - ((ITest) conductor).onReceiveEnergy(from, receive, doReceive); - System.out.println("RECEIVING"); - } - } - } - return 0; - - } - -} diff --git a/src/resonantinduction/wire/render/RenderFlatWire.java b/src/resonantinduction/wire/render/RenderFlatWire.java index 2489d404b..cbc22e7b3 100644 --- a/src/resonantinduction/wire/render/RenderFlatWire.java +++ b/src/resonantinduction/wire/render/RenderFlatWire.java @@ -5,7 +5,7 @@ import java.util.LinkedList; import net.minecraft.block.Block; import net.minecraft.util.Icon; -import resonantinduction.wire.part.FlatWire; +import resonantinduction.wire.part.PartFlatWire; import codechicken.lib.lighting.LightModel; import codechicken.lib.math.MathHelper; import codechicken.lib.render.CCModel; @@ -398,7 +398,7 @@ public class RenderFlatWire return key; } - public static int modelKey(FlatWire w) + public static int modelKey(PartFlatWire w) { return modelKey(w.side, w.getThickness(), w.connMap); } @@ -411,7 +411,7 @@ public class RenderFlatWire return m; } - public static void render(FlatWire w, Vector3 pos) + public static void render(PartFlatWire w, Vector3 pos) { IVertexModifier m = w.getColour().pack() == -1 ? ColourModifier.instance : new ColourMultiplier(w.getColour()); CCModel model = getOrGenerateModel(modelKey(w)); @@ -427,7 +427,7 @@ public class RenderFlatWire m.render(t, new IconTransformation(icon)); } - public static void renderBreakingOverlay(Icon icon, FlatWire wire) + public static void renderBreakingOverlay(Icon icon, PartFlatWire wire) { int key = modelKey(wire); int side = (key >> 8) % 6;