package com.mrcrayfish.skateboarding.client.render; import com.mrcrayfish.skateboarding.api.trick.Grind; import com.mrcrayfish.skateboarding.block.BlockSlope; import com.mrcrayfish.skateboarding.block.attributes.Angled; import com.mrcrayfish.skateboarding.client.model.entity.ModelSkateboard; import com.mrcrayfish.skateboarding.entity.EntitySkateboard; import net.minecraft.block.state.IBlockState; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.entity.Render; import net.minecraft.client.renderer.entity.RenderManager; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.EnumFacing; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; public class RenderSkateboard extends Render<EntitySkateboard> { private static final ResourceLocation minecartTextures = new ResourceLocation("csm:textures/entity/mojang.png"); private ModelSkateboard modelSkateboard = new ModelSkateboard(); public RenderSkateboard(RenderManager renderManager) { super(renderManager); this.shadowSize = 0.0F; } @Override public void doRender(EntitySkateboard skateboard, double x, double y, double z, float p_76986_8_, float partialTicks) { GlStateManager.pushMatrix(); { this.bindEntityTexture(skateboard); skateboard.updateAngledBlock(); if (skateboard.isInTrick() && !skateboard.isGrinding()) { y = -0.3; } GlStateManager.translate(x, y + 0.18, z); IBlockState state = skateboard.getAngledBlockState(); if(state != null) { Angled angled = (Angled) state.getBlock(); EnumFacing facing = state.getValue(BlockSlope.FACING); switch(facing) { case NORTH: GlStateManager.rotate(angled.getAngle(), 1, 0, 0); break; case EAST: GlStateManager.rotate(angled.getAngle(), 0, 0, 1); break; case SOUTH: GlStateManager.rotate(-angled.getAngle(), 1, 0, 0); break; default: GlStateManager.rotate(-angled.getAngle(), 0, 0, 1); break; } GlStateManager.translate(0, angled.getYOffset(skateboard.isGrinding()), 0); } GlStateManager.rotate(-(skateboard.prevRotationYaw + (skateboard.rotationYaw - skateboard.prevRotationYaw) * partialTicks), 0, 1, 0); GlStateManager.rotate(-90F, 0, 1, 0); GlStateManager.scale(-1.0F, -1.0F, 1.0F); if (skateboard.getControllingPassenger() != null) { if (skateboard.getControllingPassenger() instanceof EntityPlayer) { EntityPlayer player = (EntityPlayer) skateboard.getControllingPassenger(); player.prevRenderYawOffset = skateboard.prevRotationYaw + 90F; player.renderYawOffset = skateboard.rotationYaw + 90F; if(skateboard.needsCameraUpdate) { if(skateboard.canCameraIncrement) { player.rotationYaw += skateboard.cameraIncrement; skateboard.canCameraIncrement = false; } } if(skateboard.isGrinding()) { if(skateboard.getCurrentTrick() instanceof Grind) { Grind grind = (Grind) skateboard.getCurrentTrick(); double[] offset = grind.getBoardOffsetPosition(skateboard); GlStateManager.translate(offset[0], -offset[1], offset[2]); } } } } modelSkateboard.setRotationAngles(0F, 0F, 0F, 0F, 0F, 0F, skateboard); // Board Rotation (Global) GlStateManager.rotate((float) (skateboard.prevBoardYaw + (skateboard.boardYaw - skateboard.prevBoardYaw) * partialTicks), 0, 1, 0); // Board Rotation (Local) modelSkateboard.boardBase.rotateAngleX = (float) Math.toRadians(skateboard.prevBoardRotationX + (skateboard.boardRotationX - skateboard.prevBoardRotationX) * partialTicks); modelSkateboard.boardBase.rotateAngleY = 0F; if(skateboard.isFlipped()) modelSkateboard.boardBase.rotateAngleY += Math.toRadians(180F); modelSkateboard.boardBase.rotateAngleY += (float) Math.toRadians(skateboard.prevBoardRotationY + (skateboard.boardRotationY - skateboard.prevBoardRotationY) * partialTicks); modelSkateboard.boardBase.rotateAngleZ = (float) Math.toRadians(skateboard.prevBoardRotationZ + (skateboard.boardRotationZ - skateboard.prevBoardRotationZ) * partialTicks); modelSkateboard.render(skateboard, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); } GlStateManager.popMatrix(); //super.doRender(skateboard, x, y, z, p_76986_8_, partialTicks); } @Override protected ResourceLocation getEntityTexture(EntitySkateboard entity) { return minecartTextures; } }