Search in sources :

Example 36 with IAxleHandler

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();
}
Also used : TileEntity(net.minecraft.tileentity.TileEntity) IAxleHandler(com.Da_Technomancer.crossroads.API.rotary.IAxleHandler)

Example 37 with IAxleHandler

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();
}
Also used : IAxleHandler(com.Da_Technomancer.crossroads.API.rotary.IAxleHandler)

Aggregations

IAxleHandler (com.Da_Technomancer.crossroads.API.rotary.IAxleHandler)37 TileEntity (net.minecraft.tileentity.TileEntity)17 NBTTagCompound (net.minecraft.nbt.NBTTagCompound)3 EnumFacing (net.minecraft.util.EnumFacing)3 SendSpinToClient (com.Da_Technomancer.crossroads.API.packets.SendSpinToClient)2 ChunkPos (net.minecraft.util.math.ChunkPos)2 TextComponentString (net.minecraft.util.text.TextComponentString)2 TargetPoint (net.minecraftforge.fml.common.network.NetworkRegistry.TargetPoint)2 BeamRenderTEBase (com.Da_Technomancer.crossroads.API.magic.BeamRenderTEBase)1 MagicUnit (com.Da_Technomancer.crossroads.API.magic.MagicUnit)1 SendFieldsToClient (com.Da_Technomancer.crossroads.API.packets.SendFieldsToClient)1 FieldWorldSavedData (com.Da_Technomancer.crossroads.API.technomancy.FieldWorldSavedData)1 RatiatorTileEntity (com.Da_Technomancer.crossroads.tileentities.RatiatorTileEntity)1 CrystalMasterAxisTileEntity (com.Da_Technomancer.crossroads.tileentities.magic.CrystalMasterAxisTileEntity)1 Color (java.awt.Color)1 EntityItem (net.minecraft.entity.item.EntityItem)1 EntityPlayer (net.minecraft.entity.player.EntityPlayer)1 ItemStack (net.minecraft.item.ItemStack)1 FoodStats (net.minecraft.util.FoodStats)1 AxisAlignedBB (net.minecraft.util.math.AxisAlignedBB)1