Package erogenousbeef.bigreactors.common.multiblock.tileentity

Source Code of erogenousbeef.bigreactors.common.multiblock.tileentity.TileEntityTurbineRotorBearing

package erogenousbeef.bigreactors.common.multiblock.tileentity;

import net.minecraft.util.AxisAlignedBB;
import net.minecraftforge.common.util.ForgeDirection;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import erogenousbeef.bigreactors.common.BigReactors;
import erogenousbeef.bigreactors.common.multiblock.MultiblockTurbine;
import erogenousbeef.bigreactors.common.multiblock.helpers.RotorInfo;
import erogenousbeef.bigreactors.utils.StaticUtils;
import erogenousbeef.core.common.CoordTriplet;
import erogenousbeef.core.multiblock.MultiblockControllerBase;

public class TileEntityTurbineRotorBearing extends
    TileEntityTurbinePartStandard {

  RotorInfo rotorInfo = null;
  Integer displayList = null;
  float angle = 0f;
 
  @SideOnly(Side.CLIENT)
  public Integer getDisplayList() { return displayList; }
 
  @SideOnly(Side.CLIENT)
  public void setDisplayList(int newList) { displayList = newList; }
 
  @SideOnly(Side.CLIENT)
  public void clearDisplayList() { displayList = null; }
 
  @SideOnly(Side.CLIENT)
  public float getAngle() { return angle; }
 
  @SideOnly(Side.CLIENT)
  public void setAngle(float newAngle) { angle = newAngle; }

  protected AxisAlignedBB boundingBox;
 
  @Override
  public void onMachineAssembled(MultiblockControllerBase controller) {
    super.onMachineAssembled(controller);
    displayList = null;
    calculateRotorInfo();
  }
 
  @SideOnly(Side.CLIENT)
  public RotorInfo getRotorInfo() {
    return rotorInfo;
  }
 
  public AxisAlignedBB getAABB() { return boundingBox; }
 
  private void calculateRotorInfo() {
    // Calculate bounding box
    MultiblockTurbine turbine = getTurbine();
    CoordTriplet minCoord = turbine.getMinimumCoord();
    CoordTriplet maxCoord = turbine.getMaximumCoord();

    boundingBox = AxisAlignedBB.getBoundingBox(minCoord.x, minCoord.y, minCoord.z, maxCoord.x, maxCoord.y, maxCoord.z);
   
    if(worldObj.isRemote) {
      // Calculate rotor info
      rotorInfo = new RotorInfo();
      rotorInfo.rotorDirection = getOutwardsDir().getOpposite();
      switch(rotorInfo.rotorDirection) {
        case DOWN:
        case UP:
        case UNKNOWN:
          rotorInfo.rotorLength = maxCoord.y - minCoord.y - 1;
          break;
        case EAST:
        case WEST:
          rotorInfo.rotorLength = maxCoord.x - minCoord.x - 1;
          break;
        case NORTH:
        case SOUTH:
          rotorInfo.rotorLength = maxCoord.z - minCoord.z - 1;
          break;
      }
     
      CoordTriplet currentCoord = getWorldLocation();
      CoordTriplet bladeCoord = new CoordTriplet(0,0,0);

      ForgeDirection[] dirsToCheck = StaticUtils.neighborsBySide[rotorInfo.rotorDirection.ordinal()];
      rotorInfo.bladeLengths = new int[rotorInfo.rotorLength][4];

      int rotorPosition = 0;
      currentCoord.translate(rotorInfo.rotorDirection);

      while(rotorPosition < rotorInfo.rotorLength) {
        // Current block is a rotor
        // Get list of normals
        int bladeLength;
        ForgeDirection bladeDir;
        for(int bladeIdx = 0; bladeIdx < dirsToCheck.length; bladeIdx++) {
          bladeDir = dirsToCheck[bladeIdx];
          bladeCoord.copy(currentCoord);
          bladeCoord.translate(bladeDir);
          bladeLength = 0;
          while(worldObj.getBlock(bladeCoord.x, bladeCoord.y, bladeCoord.z) == BigReactors.blockTurbineRotorPart && bladeLength < 32) {
            bladeLength++;
            bladeCoord.translate(bladeDir);
          }
         
          rotorInfo.bladeLengths[rotorPosition][bladeIdx] = bladeLength;
        }
       
        rotorPosition++;
        currentCoord.translate(rotorInfo.rotorDirection);
      }
    }
  }
}
TOP

Related Classes of erogenousbeef.bigreactors.common.multiblock.tileentity.TileEntityTurbineRotorBearing

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.