Moved wind turbine render to Spatial

This commit is contained in:
Calclavia 2014-11-23 09:16:05 +08:00
parent 2cfdd91fea
commit 559977e434
9 changed files with 95 additions and 110 deletions

View file

@ -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)

View file

@ -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)

View file

@ -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()
}
}

View file

@ -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 + "]"
}

View file

@ -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
}

View file

@ -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

View file

@ -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")
}
}
}

View file

@ -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)

View file

@ -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")
}
}
}