mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-02-23 14:30:51 +00:00
coupled trains work again yay (please kill me)
This commit is contained in:
parent
c70d5bf517
commit
6594a80c70
@ -14,6 +14,7 @@ import com.hbm.blocks.rail.IRailNTM.TrackGauge;
|
|||||||
import com.hbm.items.ModItems;
|
import com.hbm.items.ModItems;
|
||||||
import com.hbm.packet.AuxParticlePacketNT;
|
import com.hbm.packet.AuxParticlePacketNT;
|
||||||
import com.hbm.packet.PacketDispatcher;
|
import com.hbm.packet.PacketDispatcher;
|
||||||
|
import com.hbm.util.ParticleUtil;
|
||||||
import com.hbm.util.Tuple.Pair;
|
import com.hbm.util.Tuple.Pair;
|
||||||
import com.hbm.util.fauxpointtwelve.BlockPos;
|
import com.hbm.util.fauxpointtwelve.BlockPos;
|
||||||
|
|
||||||
@ -356,11 +357,9 @@ public abstract class EntityRailCarBase extends Entity implements ILookOverlay {
|
|||||||
ltu.moveTrainByApproach(speed);
|
ltu.moveTrainByApproach(speed);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(ltu.trains.length != 1) {
|
//ltu.pushForce *= 0.95;
|
||||||
//ltu.pushForce *= 0.95;
|
ltu.pushForce = 0;
|
||||||
ltu.pushForce = 0;
|
ltu.collideTrain(speed);
|
||||||
ltu.collideTrain(speed);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -746,24 +745,37 @@ public abstract class EntityRailCarBase extends Entity implements ILookOverlay {
|
|||||||
return totalSpeed;
|
return totalSpeed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This method has no rhyme or reason behind it. Nothing of this was calculated, instead it was an old system that worked with older constraints,
|
||||||
|
* which was retrofitted with a slightly newer system and beaten into submission for two consecutive hours until it yielded the results it should.
|
||||||
|
* Booleans are flipped back and forth based on seemingly random conditions, numbers are inverted and then inverted again and finally smashed into
|
||||||
|
* the rail system in the hopes that it would make trains work. My apologies extend towards Bob in the future who will inevitably have to rewrite this
|
||||||
|
* abhorrence because of some constraint change which will cause the entire system to break. Part of me wishes to never touch the train code ever again,
|
||||||
|
* to abandon the idea and to ban the annoying people on Discord who keep asking about it. Another part wants me to slam my head against this project
|
||||||
|
* until either it or my skull gives way; and considering I got this far, it appears as if this side is the one that is winning.
|
||||||
|
*/
|
||||||
/** Determines the "front" wagon based on the movement and moves it, then moves all other wagons towards that */
|
/** Determines the "front" wagon based on the movement and moves it, then moves all other wagons towards that */
|
||||||
public void moveTrainByApproach(double speed) {
|
public void moveTrainByApproach(double speed) {
|
||||||
boolean forward = speed < 0;
|
boolean forward = speed > 0;
|
||||||
speed = Math.abs(speed);
|
|
||||||
EntityRailCarBase previous = null;
|
EntityRailCarBase previous = null;
|
||||||
|
|
||||||
EntityRailCarBase first = this.trains[0];
|
EntityRailCarBase first = this.trains[0];
|
||||||
|
boolean order = forward ^ first.getCouplingFrom(null) == TrainCoupling.BACK;
|
||||||
|
|
||||||
for(int i = !forward ? 0 : this.trains.length - 1; !forward ? i < this.trains.length : i >= 0; i += !forward ? 1 : -1) {
|
for(int i = order ? 0 : this.trains.length - 1; order ? i < this.trains.length : i >= 0; i += order ? 1 : -1) {
|
||||||
EntityRailCarBase current = this.trains[i];
|
EntityRailCarBase current = this.trains[i];
|
||||||
|
|
||||||
if(previous == null) {
|
if(previous == null) {
|
||||||
|
|
||||||
|
if(first == current) speed *= -1;
|
||||||
|
|
||||||
|
ParticleUtil.spawnGasFlame(first.worldObj, current.posX, current.posY + 2, current.posZ, 0, 0.1, 0);
|
||||||
|
|
||||||
boolean inReverse = first.getCouplingFrom(null) == current.getCouplingFrom(null);
|
boolean inReverse = first.getCouplingFrom(null) == current.getCouplingFrom(null);
|
||||||
int sigNum = inReverse ? 1 : -1;
|
int sigNum = inReverse ? 1 : -1;
|
||||||
BlockPos anchor = current.getCurrentAnchorPos();
|
BlockPos anchor = current.getCurrentAnchorPos();
|
||||||
|
|
||||||
/*Vec3 frontPos = current.getRelPosAlongRail(anchor, current.getLengthSpan(), new MoveContext(RailCheckType.FRONT));
|
Vec3 frontPos = current.getRelPosAlongRail(anchor, (speed + current.getLengthSpan()) * -sigNum, new MoveContext(RailCheckType.FRONT, current.getCollisionSpan() - current.getLengthSpan()));
|
||||||
|
|
||||||
if(frontPos == null) {
|
if(frontPos == null) {
|
||||||
current.derail();
|
current.derail();
|
||||||
@ -771,43 +783,16 @@ public abstract class EntityRailCarBase extends Entity implements ILookOverlay {
|
|||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
anchor = current.getCurrentAnchorPos(); //reset origin to new position
|
anchor = current.getCurrentAnchorPos(); //reset origin to new position
|
||||||
Vec3 corePos = current.getRelPosAlongRail(anchor, speed * sigNum, new MoveContext(RailCheckType.CORE));
|
Vec3 corePos = current.getRelPosAlongRail(anchor, speed * -sigNum, new MoveContext(RailCheckType.CORE, 0));
|
||||||
current.setPosition(corePos.xCoord, corePos.yCoord, corePos.zCoord);
|
current.setPosition(corePos.xCoord, corePos.yCoord, corePos.zCoord);
|
||||||
Vec3 backPos = current.getRelPosAlongRail(anchor, -current.getLengthSpan(), new MoveContext(RailCheckType.BACK));
|
Vec3 backPos = current.getRelPosAlongRail(anchor, (speed - current.getLengthSpan()) * -sigNum, new MoveContext(RailCheckType.BACK, current.getCollisionSpan() - current.getLengthSpan()));
|
||||||
|
|
||||||
if(frontPos == null || backPos == null) {
|
if(frontPos == null || backPos == null) {
|
||||||
current.derail();
|
current.derail();
|
||||||
this.dissolveTrain();
|
this.dissolveTrain();
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
setRenderPos(current, frontPos, backPos);
|
setRenderPos(current, inReverse ? backPos : frontPos, inReverse ? frontPos : backPos);
|
||||||
}
|
|
||||||
}*/
|
|
||||||
|
|
||||||
Pair<Double, RailCheckType>[] checks;
|
|
||||||
double dist = speed * sigNum;
|
|
||||||
|
|
||||||
if(forward) {
|
|
||||||
checks = new Pair[] {
|
|
||||||
new Pair(dist + current.getLengthSpan(), RailCheckType.FRONT),
|
|
||||||
new Pair(dist, RailCheckType.CORE),
|
|
||||||
new Pair(dist - current.getLengthSpan(), RailCheckType.BACK)
|
|
||||||
};
|
|
||||||
} else {
|
|
||||||
checks = new Pair[] {
|
|
||||||
new Pair(dist - current.getLengthSpan(), RailCheckType.BACK),
|
|
||||||
new Pair(dist, RailCheckType.CORE),
|
|
||||||
new Pair(dist + current.getLengthSpan(), RailCheckType.FRONT)
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
double brake = 0;
|
|
||||||
|
|
||||||
for(Pair<Double, RailCheckType> check : checks) {
|
|
||||||
MoveContext ctx = new MoveContext(check.getValue(), current.getCollisionSpan() - current.getLengthSpan());
|
|
||||||
current.getRelPosAlongRail(anchor, check.getKey() - (brake * Math.signum(check.getKey())), ctx);
|
|
||||||
if(ctx.collision) {
|
|
||||||
brake += ctx.overshoot;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -243,9 +243,9 @@ public class AssemblerRecipes {
|
|||||||
makeRecipe(new ComparableStack(ModItems.upgrade_fortune_1, 1), new AStack[] {new ComparableStack(ModItems.upgrade_template, 1), new OreDictStack(DIAMOND.dust(), 4), new OreDictStack(IRON.dust(), 6), new ComparableStack(ModItems.wire_red_copper, 4), },200);
|
makeRecipe(new ComparableStack(ModItems.upgrade_fortune_1, 1), new AStack[] {new ComparableStack(ModItems.upgrade_template, 1), new OreDictStack(DIAMOND.dust(), 4), new OreDictStack(IRON.dust(), 6), new ComparableStack(ModItems.wire_red_copper, 4), },200);
|
||||||
makeRecipe(new ComparableStack(ModItems.upgrade_fortune_2, 1), new AStack[] {new ComparableStack(ModItems.upgrade_fortune_1, 1), new OreDictStack(DIAMOND.dust(), 2), new OreDictStack(IRON.dust(), 4), new ComparableStack(ModItems.circuit_red_copper, 4), new ComparableStack(ModItems.wire_red_copper, 4), new OreDictStack(ANY_PLASTIC.ingot(), 2), },300);
|
makeRecipe(new ComparableStack(ModItems.upgrade_fortune_2, 1), new AStack[] {new ComparableStack(ModItems.upgrade_fortune_1, 1), new OreDictStack(DIAMOND.dust(), 2), new OreDictStack(IRON.dust(), 4), new ComparableStack(ModItems.circuit_red_copper, 4), new ComparableStack(ModItems.wire_red_copper, 4), new OreDictStack(ANY_PLASTIC.ingot(), 2), },300);
|
||||||
makeRecipe(new ComparableStack(ModItems.upgrade_fortune_3, 1), new AStack[] {new ComparableStack(ModItems.upgrade_fortune_2, 1), new OreDictStack(DIAMOND.dust(), 2), new OreDictStack(IRON.dust(), 6), new OreDictStack(DESH.ingot(), 4), },500);
|
makeRecipe(new ComparableStack(ModItems.upgrade_fortune_3, 1), new AStack[] {new ComparableStack(ModItems.upgrade_fortune_2, 1), new OreDictStack(DIAMOND.dust(), 2), new OreDictStack(IRON.dust(), 6), new OreDictStack(DESH.ingot(), 4), },500);
|
||||||
makeRecipe(new ComparableStack(ModItems.upgrade_afterburn_1, 1), new AStack[] {new ComparableStack(ModItems.upgrade_template, 1), new OreDictStack(POLYMER.dust(), 4), new OreDictStack(W.dust(), 6), new ComparableStack(ModItems.wire_red_copper, 4), },200);
|
makeRecipe(new ComparableStack(ModItems.upgrade_afterburn_1, 1), new AStack[] {new ComparableStack(ModItems.upgrade_template, 1), new OreDictStack(ANY_PLASTIC.dust(), 4), new OreDictStack(W.dust(), 6), new ComparableStack(ModItems.wire_red_copper, 4), },200);
|
||||||
makeRecipe(new ComparableStack(ModItems.upgrade_afterburn_2, 1), new AStack[] {new ComparableStack(ModItems.upgrade_afterburn_1, 1), new OreDictStack(POLYMER.dust(), 2), new OreDictStack(W.dust(), 4), new ComparableStack(ModItems.circuit_red_copper, 4), new ComparableStack(ModItems.wire_red_copper, 4), new OreDictStack(ANY_PLASTIC.ingot(), 2), },300);
|
makeRecipe(new ComparableStack(ModItems.upgrade_afterburn_2, 1), new AStack[] {new ComparableStack(ModItems.upgrade_afterburn_1, 1), new OreDictStack(ANY_PLASTIC.dust(), 2), new OreDictStack(W.dust(), 4), new ComparableStack(ModItems.circuit_red_copper, 4), new ComparableStack(ModItems.wire_red_copper, 4), new OreDictStack(ANY_PLASTIC.ingot(), 2), },300);
|
||||||
makeRecipe(new ComparableStack(ModItems.upgrade_afterburn_3, 1), new AStack[] {new ComparableStack(ModItems.upgrade_afterburn_2, 1), new OreDictStack(POLYMER.dust(), 2), new OreDictStack(W.dust(), 6), new OreDictStack(DESH.ingot(), 4), },500);
|
makeRecipe(new ComparableStack(ModItems.upgrade_afterburn_3, 1), new AStack[] {new ComparableStack(ModItems.upgrade_afterburn_2, 1), new OreDictStack(ANY_PLASTIC.dust(), 2), new OreDictStack(W.dust(), 6), new OreDictStack(DESH.ingot(), 4), },500);
|
||||||
makeRecipe(new ComparableStack(ModItems.upgrade_radius, 1), new AStack[] {new ComparableStack(ModItems.upgrade_template, 1), new ComparableStack(Items.glowstone_dust, 6), new OreDictStack(DIAMOND.dust(), 4), },500);
|
makeRecipe(new ComparableStack(ModItems.upgrade_radius, 1), new AStack[] {new ComparableStack(ModItems.upgrade_template, 1), new ComparableStack(Items.glowstone_dust, 6), new OreDictStack(DIAMOND.dust(), 4), },500);
|
||||||
makeRecipe(new ComparableStack(ModItems.upgrade_health, 1), new AStack[] {new ComparableStack(ModItems.upgrade_template, 1), new ComparableStack(Items.glowstone_dust, 6), new OreDictStack(TI.dust(), 4), },500);
|
makeRecipe(new ComparableStack(ModItems.upgrade_health, 1), new AStack[] {new ComparableStack(ModItems.upgrade_template, 1), new ComparableStack(Items.glowstone_dust, 6), new OreDictStack(TI.dust(), 4), },500);
|
||||||
makeRecipe(new ComparableStack(ModItems.upgrade_overdrive_1, 1), new AStack[] {new ComparableStack(ModItems.upgrade_speed_3, 1), new ComparableStack(ModItems.upgrade_effect_3, 1), new OreDictStack(DESH.ingot(), 8), new ComparableStack(ModItems.powder_power, 16), new ComparableStack(ModItems.crystal_lithium, 4), new ComparableStack(ModItems.circuit_schrabidium, 1), }, 200);
|
makeRecipe(new ComparableStack(ModItems.upgrade_overdrive_1, 1), new AStack[] {new ComparableStack(ModItems.upgrade_speed_3, 1), new ComparableStack(ModItems.upgrade_effect_3, 1), new OreDictStack(DESH.ingot(), 8), new ComparableStack(ModItems.powder_power, 16), new ComparableStack(ModItems.crystal_lithium, 4), new ComparableStack(ModItems.circuit_schrabidium, 1), }, 200);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user