diff --git a/src/main/scala/resonantinduction/core/ClientProxy.scala b/src/main/scala/resonantinduction/core/ClientProxy.scala index 0922781ab..65084d344 100644 --- a/src/main/scala/resonantinduction/core/ClientProxy.scala +++ b/src/main/scala/resonantinduction/core/ClientProxy.scala @@ -55,11 +55,9 @@ import resonantinduction.mechanical.mech.turbine._ ItemRenderHandler.register(MechanicalContent.itemGearShaft, RenderGearShaft) ItemRenderHandler.register(MechanicalContent.itemPipe, RenderPipe) ItemRenderHandler.register(Item.getItemFromBlock(MechanicalContent.blockWaterTurbine), new RenderWaterTurbine) - ItemRenderHandler.register(Item.getItemFromBlock(MechanicalContent.blockWindTurbine), new RenderWindTurbine) ClientRegistry.bindTileEntitySpecialRenderer(classOf[TileMechanicalPiston], new RenderMechanicalPiston) ClientRegistry.bindTileEntitySpecialRenderer(classOf[TileGrindingWheel], new RenderGrindingWheel) ClientRegistry.bindTileEntitySpecialRenderer(classOf[TileWaterTurbine], new RenderWaterTurbine) - ClientRegistry.bindTileEntitySpecialRenderer(classOf[TileWindTurbine], new RenderWindTurbine) //Electrical content ItemRenderHandler.register(ElectricalContent.itemTransformer, RenderTransformer) diff --git a/src/main/scala/resonantinduction/electrical/generator/TileMotor.scala b/src/main/scala/resonantinduction/electrical/generator/TileMotor.scala index d7a8487ed..0cd1a9580 100644 --- a/src/main/scala/resonantinduction/electrical/generator/TileMotor.scala +++ b/src/main/scala/resonantinduction/electrical/generator/TileMotor.scala @@ -36,6 +36,7 @@ class TileMotor extends TileAdvanced(Material.iron) with TElectric with TSpatial private var gearRatio = 0 + textureName = "material_wood_surface" normalRender = false isOpaqueCube = false nodes.add(dcNode) diff --git a/src/main/scala/resonantinduction/mechanical/mech/grid/MechanicalGrid.scala b/src/main/scala/resonantinduction/mechanical/mech/grid/MechanicalGrid.scala index a93a347f6..d418d13aa 100644 --- a/src/main/scala/resonantinduction/mechanical/mech/grid/MechanicalGrid.scala +++ b/src/main/scala/resonantinduction/mechanical/mech/grid/MechanicalGrid.scala @@ -37,7 +37,7 @@ class MechanicalGrid extends GridNode[NodeMechanical](classOf[NodeMechanical]) w getNodes.filter(n => n.bufferTorque != 0 && n.bufferAngularVelocity != 0).foreach(n => recurse(deltaTime, n.bufferTorque, n.bufferAngularVelocity, Seq(n))) - //UpdateTicker world enqueue + // UpdateTicker.world.enqueue(resetNodes) resetNodes() } } diff --git a/src/main/scala/resonantinduction/mechanical/mech/grid/NodeMechanical.scala b/src/main/scala/resonantinduction/mechanical/mech/grid/NodeMechanical.scala index b58c9c6c8..f2d0c275b 100644 --- a/src/main/scala/resonantinduction/mechanical/mech/grid/NodeMechanical.scala +++ b/src/main/scala/resonantinduction/mechanical/mech/grid/NodeMechanical.scala @@ -110,5 +110,5 @@ class NodeMechanical(parent: INodeProvider) extends NodeGrid[NodeMechanical](par */ override protected def getCompareClass = classOf[NodeMechanical] - override def toString = "NodeMechanical[Connections: " + connections.size() + " Torque: " + torque + " Angular Velocity:" + angularVelocity + "]" + override def toString = "NodeMechanical[Connections: " + connections.size() + " Torque: " + torque + " Angular Velocity: " + angularVelocity + "]" } \ No newline at end of file diff --git a/src/main/scala/resonantinduction/mechanical/mech/process/grinder/TileGrindingWheel.scala b/src/main/scala/resonantinduction/mechanical/mech/process/grinder/TileGrindingWheel.scala index 7401d1edd..f278801aa 100644 --- a/src/main/scala/resonantinduction/mechanical/mech/process/grinder/TileGrindingWheel.scala +++ b/src/main/scala/resonantinduction/mechanical/mech/process/grinder/TileGrindingWheel.scala @@ -108,7 +108,7 @@ class TileGrindingWheel extends TileMechanical(Material.rock) */ def canWork: Boolean = counter >= requiredTorque - def doWork + def doWork() { if (canWork) { @@ -125,7 +125,7 @@ class TileGrindingWheel extends TileMechanical(Material.rock) grindingItem.getEntityItem.stackSize -= 1; if (grindingItem.getEntityItem.stackSize <= 0) { - grindingItem.setDead + grindingItem.setDead() TileGrindingWheel.grindingTimer.remove(grindingItem) grindingItem = null } diff --git a/src/main/scala/resonantinduction/mechanical/mech/process/mixer/TileMixer.scala b/src/main/scala/resonantinduction/mechanical/mech/process/mixer/TileMixer.scala index c4e9e7bfd..8c1bd6f99 100644 --- a/src/main/scala/resonantinduction/mechanical/mech/process/mixer/TileMixer.scala +++ b/src/main/scala/resonantinduction/mechanical/mech/process/mixer/TileMixer.scala @@ -10,23 +10,20 @@ import net.minecraft.entity.item.EntityItem import net.minecraft.init.Blocks import net.minecraft.item.ItemStack import net.minecraft.util.{AxisAlignedBB, ResourceLocation} -import net.minecraftforge.client.IItemRenderer import net.minecraftforge.client.model.{AdvancedModelLoader, IModelCustom} -import net.minecraftforge.common.util.ForgeDirection import net.minecraftforge.fluids.IFluidBlock import org.lwjgl.opengl.GL11 import org.lwjgl.opengl.GL11._ import resonant.api.recipe.MachineRecipes import resonant.content.factory.resources.RecipeType -import resonant.content.factory.resources.block.BlockFluidMixture import resonant.engine.ResonantEngine +import resonant.lib.prefab.block.BlockFluidMixture import resonant.lib.render.RenderUtility +import resonant.lib.transform.rotation.Quaternion +import resonant.lib.transform.vector.Vector3 import resonant.lib.utility.Timer import resonantinduction.core.Reference import resonantinduction.mechanical.mech.TileMechanical -import resonant.api.grid.INode -import resonant.lib.transform.rotation.Quaternion -import resonant.lib.transform.vector.Vector3 import scala.collection.JavaConversions._ @@ -182,7 +179,7 @@ class TileMixer extends TileMechanical(Material.iron) if (block.isInstanceOf[BlockFluidMixture]) { val itemStack: ItemStack = entity.getEntityItem.copy - if ((block.asInstanceOf[BlockFluidMixture]).mix(worldObj, mixPosition.xi, mixPosition.yi, mixPosition.zi, itemStack)) + if (block.asInstanceOf[BlockFluidMixture].mix(worldObj, mixPosition.xi, mixPosition.yi, mixPosition.zi, itemStack)) { worldObj.notifyBlocksOfNeighborChange(mixPosition.xi, mixPosition.yi, mixPosition.zi, mixPosition.getBlock(worldObj)) return true diff --git a/src/main/scala/resonantinduction/mechanical/mech/turbine/RenderWindTurbine.scala b/src/main/scala/resonantinduction/mechanical/mech/turbine/RenderWindTurbine.scala deleted file mode 100644 index 6302c8987..000000000 --- a/src/main/scala/resonantinduction/mechanical/mech/turbine/RenderWindTurbine.scala +++ /dev/null @@ -1,88 +0,0 @@ -package resonantinduction.mechanical.mech.turbine - -import cpw.mods.fml.relauncher.{Side, SideOnly} -import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer -import net.minecraft.item.ItemStack -import net.minecraft.tileentity.TileEntity -import net.minecraft.util.ResourceLocation -import net.minecraftforge.client.IItemRenderer -import net.minecraftforge.client.model.{AdvancedModelLoader, IModelCustom} -import org.lwjgl.opengl.GL11 -import resonant.content.prefab.scal.render.ISimpleItemRenderer -import resonant.lib.render.RenderUtility -import resonantinduction.core.Reference - -@SideOnly(Side.CLIENT) object RenderWindTurbine -{ - final val MODEL: IModelCustom = AdvancedModelLoader.loadModel(new ResourceLocation(Reference.domain, Reference.modelPath + "windTurbines.obj")) -} - -@SideOnly(Side.CLIENT) class RenderWindTurbine extends TileEntitySpecialRenderer with ISimpleItemRenderer -{ - def renderTileEntityAt(t: TileEntity, x: Double, y: Double, z: Double, f: Float) - { - val tile: TileTurbine = t.asInstanceOf[TileTurbine] - if (tile.getMultiBlock.isPrimary) - { - GL11.glPushMatrix - GL11.glTranslatef(x.asInstanceOf[Float] + 0.5f, y.asInstanceOf[Float] + 0.5f, z.asInstanceOf[Float] + 0.5f) - GL11.glPushMatrix - RenderUtility.rotateBlockBasedOnDirectionUp(tile.getDirection) - GL11.glTranslatef(0, 0.35f, 0) - GL11.glRotatef(180, 1, 0, 0) - GL11.glRotatef(Math.toDegrees(tile.mechanicalNode.angle).asInstanceOf[Float], 0, 1, 0) - render(tile.tier, tile.multiBlockRadius, tile.getMultiBlock.isConstructed) - GL11.glPopMatrix - GL11.glPopMatrix - } - } - - def renderInventoryItem(`type`: IItemRenderer.ItemRenderType, itemStack: ItemStack, data: AnyRef*) - { - GL11.glPushMatrix - GL11.glTranslatef(0.5f, 0.5f, 0.5f) - render(itemStack.getItemDamage, 1, false) - GL11.glPopMatrix - } - - def render(tier: Int, size: Int, isConstructed: Boolean) - { - if (tier == 0) - { - RenderUtility.bind(Reference.blockTextureDirectory + "planks_oak.png") - } else if (tier == 1) - { - RenderUtility.bind(Reference.blockTextureDirectory + "cobblestone.png") - } else if (tier == 2) - { - RenderUtility.bind(Reference.blockTextureDirectory + "iron_block.png") - - } - if (isConstructed) - { - GL11.glScalef(0.3f, 1, 0.3f) - GL11.glScalef(size * 2 + 1, Math.min(size, 2), size * 2 + 1) - if (tier == 2) - { - GL11.glTranslatef(0, -0.11f, 0) - RenderWindTurbine.MODEL.renderOnly("LargeMetalBlade") - RenderWindTurbine.MODEL.renderOnly("LargeMetalHub") - } - else - { - RenderWindTurbine.MODEL.renderOnly("LargeBladeArm") - GL11.glScalef(1f, 2f, 1f) - GL11.glTranslatef(0, -0.05f, 0) - RenderWindTurbine.MODEL.renderOnly("LargeHub") - RenderUtility.bind(Reference.blockTextureDirectory + "wool_colored_white.png") - RenderWindTurbine.MODEL.renderOnly("LargeBlade") - } - } - else - { - RenderWindTurbine.MODEL.renderOnly("SmallBlade") - RenderUtility.bind(Reference.blockTextureDirectory + "log_oak.png") - RenderWindTurbine.MODEL.renderOnly("SmallHub") - } - } -} \ No newline at end of file diff --git a/src/main/scala/resonantinduction/mechanical/mech/turbine/TileTurbine.scala b/src/main/scala/resonantinduction/mechanical/mech/turbine/TileTurbine.scala index c986d6e4f..019dc2068 100644 --- a/src/main/scala/resonantinduction/mechanical/mech/turbine/TileTurbine.scala +++ b/src/main/scala/resonantinduction/mechanical/mech/turbine/TileTurbine.scala @@ -30,10 +30,10 @@ class TileTurbine extends TileMechanical(Material.wood) with IMultiBlockStructur private val multiBlock = new TurbineMBlockHandler(this) //Constructor + mechanicalNode = new NodeTurbine(this) normalRender = false isOpaqueCube = false - setTextureName("material_wood_surface") - mechanicalNode = new NodeTurbine(this) + textureName = "material_wood_surface" rotationMask = 63 override def onRemove(block: Block, par1: Int) diff --git a/src/main/scala/resonantinduction/mechanical/mech/turbine/TileWindTurbine.scala b/src/main/scala/resonantinduction/mechanical/mech/turbine/TileWindTurbine.scala index bc88f4d32..e9c7cb07b 100644 --- a/src/main/scala/resonantinduction/mechanical/mech/turbine/TileWindTurbine.scala +++ b/src/main/scala/resonantinduction/mechanical/mech/turbine/TileWindTurbine.scala @@ -2,18 +2,23 @@ package resonantinduction.mechanical.mech.turbine import java.util.List +import cpw.mods.fml.relauncher.{SideOnly, Side} import net.minecraft.creativetab.CreativeTabs import net.minecraft.init.{Blocks, Items} import net.minecraft.item.{Item, ItemStack} +import net.minecraft.util.ResourceLocation import net.minecraft.world.biome.{BiomeGenBase, BiomeGenOcean, BiomeGenPlains} +import net.minecraftforge.client.model.AdvancedModelLoader import net.minecraftforge.common.util.ForgeDirection import net.minecraftforge.fluids.{Fluid, FluidStack, FluidTank, FluidTankInfo} +import org.lwjgl.opengl.GL11 import resonant.api.IBoilHandler import resonant.content.prefab.itemblock.ItemBlockMetadata +import resonant.lib.render.RenderUtility import resonant.lib.transform.vector.Vector3 import resonant.lib.utility.inventory.InventoryUtility import resonant.lib.wrapper.WrapList._ -import resonantinduction.core.Settings +import resonantinduction.core.{Reference, Settings} /** * The vertical wind turbine collects airflow. @@ -22,6 +27,11 @@ import resonantinduction.core.Settings * * @author Calclavia */ +object TileWindTurbine +{ + @SideOnly(Side.CLIENT) + val model = AdvancedModelLoader.loadModel(new ResourceLocation(Reference.domain, Reference.modelPath + "windTurbines.obj")) +} class TileWindTurbine extends TileTurbine with IBoilHandler { /** @@ -58,17 +68,15 @@ class TileWindTurbine extends TileTurbine with IBoilHandler //Only execute code in the primary block if (getDirection.offsetY == 0) { - //This is a vertical wind turbine + //This is a vertical wind turbine, generate from airflow if (ticks % 20 == 0) computePower() getMultiBlock.get.mechanicalNode.rotate(windPower * multiBlockRadius / 20, windPower / multiBlockRadius / 20) } - else - { - //This is a horizontal turbine - getMultiBlock.get.mechanicalNode.rotate(if (gasTank.getFluid != null) gasTank.drain(gasTank.getFluidAmount, true).amount else 0 * 1000 * Settings.steamMultiplier, 10) - } + + //Generate from steam + getMultiBlock.get.mechanicalNode.rotate(if (gasTank.getFluid != null) gasTank.drain(gasTank.getFluidAmount, true).amount else 0 * 1000 * Settings.steamMultiplier, 10) } } } @@ -144,4 +152,73 @@ class TileWindTurbine extends TileTurbine with IBoilHandler override def canDrain(from: ForgeDirection, fluid: Fluid): Boolean = false override def getTankInfo(from: ForgeDirection): Array[FluidTankInfo] = Array(gasTank.getInfo) + + @SideOnly(Side.CLIENT) + override def renderDynamic(pos: Vector3, frame: Float, pass: Int): Unit = + { + if (getMultiBlock.isPrimary) + { + GL11.glPushMatrix() + GL11.glTranslated(pos.x + 0.5, pos.y + 0.5, pos.z + 0.5) + GL11.glPushMatrix() + RenderUtility.rotateBlockBasedOnDirectionUp(getDirection) + GL11.glTranslatef(0, 0.35f, 0) + GL11.glRotatef(180, 1, 0, 0) + GL11.glRotatef(Math.toDegrees(mechanicalNode.angle).asInstanceOf[Float], 0, 1, 0) + render(tier, multiBlockRadius, getMultiBlock.isConstructed) + GL11.glPopMatrix() + GL11.glPopMatrix() + } + } + + @SideOnly(Side.CLIENT) + override def renderInventory(itemStack: ItemStack) + { + GL11.glPushMatrix() + GL11.glTranslatef(0.5f, 0.5f, 0.5f) + render(itemStack.getItemDamage, 1, false) + GL11.glPopMatrix() + } + + @SideOnly(Side.CLIENT) + def render(tier: Int, size: Int, isConstructed: Boolean) + { + if (tier == 0) + { + RenderUtility.bind(Reference.blockTextureDirectory + "planks_oak.png") + } else if (tier == 1) + { + RenderUtility.bind(Reference.blockTextureDirectory + "cobblestone.png") + } else if (tier == 2) + { + RenderUtility.bind(Reference.blockTextureDirectory + "iron_block.png") + + } + if (isConstructed) + { + GL11.glScalef(0.3f, 1, 0.3f) + GL11.glScalef(size * 2 + 1, Math.min(size, 2), size * 2 + 1) + if (tier == 2) + { + GL11.glTranslatef(0, -0.11f, 0) + TileWindTurbine.model.renderOnly("LargeMetalBlade") + TileWindTurbine.model.renderOnly("LargeMetalHub") + } + else + { + TileWindTurbine.model.renderOnly("LargeBladeArm") + GL11.glScalef(1f, 2f, 1f) + GL11.glTranslatef(0, -0.05f, 0) + TileWindTurbine.model.renderOnly("LargeHub") + RenderUtility.bind(Reference.blockTextureDirectory + "wool_colored_white.png") + TileWindTurbine.model.renderOnly("LargeBlade") + } + } + else + { + TileWindTurbine.model.renderOnly("SmallBlade") + RenderUtility.bind(Reference.blockTextureDirectory + "log_oak.png") + TileWindTurbine.model.renderOnly("SmallHub") + } + } } \ No newline at end of file