use of com.Da_Technomancer.crossroads.API.rotary.IAxleHandler in project Crossroads by Crossroads-Development.
the class SquareRootAxisTileEntity method runCalc.
private void runCalc() {
double inBack = world.getTileEntity(pos.offset(facing.getOpposite())) != null && world.getTileEntity(pos.offset(facing.getOpposite())).hasCapability(Capabilities.AXLE_HANDLER_CAPABILITY, facing) ? world.getTileEntity(pos.offset(facing.getOpposite())).getCapability(Capabilities.AXLE_HANDLER_CAPABILITY, facing).getMotionData()[0] : 0;
double baseSpeed = inBack < 0 ? 0 : Math.sqrt(inBack);
double sumIRot = 0;
sumEnergy = 0;
for (IAxleHandler gear : rotaryMembers) {
sumIRot += gear.getPhysData()[1] * Math.pow(gear.getRotationRatio(), 2);
sumEnergy += Math.signum(gear.getRotationRatio()) * gear.getMotionData()[1] * Math.pow(1.001D, -Math.abs(gear.getMotionData()[0]));
}
double cost = sumIRot * Math.pow(baseSpeed, 2) / 2D;
TileEntity downTE = world.getTileEntity(pos.offset(EnumFacing.DOWN));
double availableEnergy = Math.abs(sumEnergy) + Math.abs(downTE != null && downTE.hasCapability(Capabilities.AXLE_HANDLER_CAPABILITY, EnumFacing.UP) ? downTE.getCapability(Capabilities.AXLE_HANDLER_CAPABILITY, EnumFacing.UP).getMotionData()[1] : 0);
if (availableEnergy - cost < 0) {
baseSpeed = 0;
cost = 0;
}
availableEnergy -= cost;
for (IAxleHandler gear : rotaryMembers) {
double newEnergy = 0;
// set w
gear.getMotionData()[0] = gear.getRotationRatio() * baseSpeed;
// set energy
newEnergy = Math.signum(gear.getMotionData()[0]) * Math.pow(gear.getMotionData()[0], 2) * gear.getPhysData()[1] / 2D;
gear.getMotionData()[1] = newEnergy;
sumEnergy += newEnergy;
// set power
gear.getMotionData()[2] = (newEnergy - gear.getMotionData()[3]) * 20;
// set lastE
gear.getMotionData()[3] = newEnergy;
gear.markChanged();
}
if (downTE != null && downTE.hasCapability(Capabilities.AXLE_HANDLER_CAPABILITY, EnumFacing.UP)) {
downTE.getCapability(Capabilities.AXLE_HANDLER_CAPABILITY, EnumFacing.UP).getMotionData()[1] = availableEnergy * MiscOp.posOrNeg(downTE.getCapability(Capabilities.AXLE_HANDLER_CAPABILITY, EnumFacing.UP).getMotionData()[1], 1);
}
runAngleCalc();
}
use of com.Da_Technomancer.crossroads.API.rotary.IAxleHandler in project Crossroads by Crossroads-Development.
the class LargeGearRenderer method renderTileEntityAt.
@Override
public void renderTileEntityAt(LargeGearMasterTileEntity gear, double x, double y, double z, float partialTicks, int destroyStage) {
if (gear.getWorld().getBlockState(gear.getPos()).getBlock() != ModBlocks.largeGearMaster || !gear.getWorld().isBlockLoaded(gear.getPos(), false)) {
return;
}
IAxleHandler handler;
GlStateManager.pushMatrix();
GlStateManager.pushAttrib();
GlStateManager.disableLighting();
GlStateManager.translate(x + .5D, y + .5D, z + .5D);
if (gear.hasCapability(Capabilities.AXLE_HANDLER_CAPABILITY, EnumFacing.DOWN)) {
handler = gear.getCapability(Capabilities.AXLE_HANDLER_CAPABILITY, EnumFacing.DOWN);
} else if (gear.hasCapability(Capabilities.AXLE_HANDLER_CAPABILITY, EnumFacing.UP)) {
GlStateManager.rotate(180F, 0.0F, 0.0F, 1.0F);
handler = gear.getCapability(Capabilities.AXLE_HANDLER_CAPABILITY, EnumFacing.UP);
} else if (gear.hasCapability(Capabilities.AXLE_HANDLER_CAPABILITY, EnumFacing.EAST)) {
GlStateManager.rotate(90F, 0.0F, 0.0F, 1.0F);
handler = gear.getCapability(Capabilities.AXLE_HANDLER_CAPABILITY, EnumFacing.EAST);
} else if (gear.hasCapability(Capabilities.AXLE_HANDLER_CAPABILITY, EnumFacing.WEST)) {
GlStateManager.rotate(270F, 0.0F, 0.0F, 1.0F);
handler = gear.getCapability(Capabilities.AXLE_HANDLER_CAPABILITY, EnumFacing.WEST);
} else if (gear.hasCapability(Capabilities.AXLE_HANDLER_CAPABILITY, EnumFacing.NORTH)) {
GlStateManager.rotate(90F, 1.0F, 0.0F, 0.0F);
handler = gear.getCapability(Capabilities.AXLE_HANDLER_CAPABILITY, EnumFacing.NORTH);
} else {
GlStateManager.rotate(270F, 1.0F, 0.0F, 0.0F);
handler = gear.getCapability(Capabilities.AXLE_HANDLER_CAPABILITY, EnumFacing.SOUTH);
}
if (handler != null) {
GlStateManager.rotate((float) -handler.getAngle(), 0F, 1F, 0F);
GlStateManager.scale(3, 1, 3);
MODEL.render(TEXTURE, TEXTURE_RIM, gear.getMember().getColor());
}
GlStateManager.enableLighting();
GlStateManager.popAttrib();
GlStateManager.popMatrix();
}
Aggregations