use of org.lwjgl.opengl.GL11.glViewport in project LogisticsPipes by RS485.
the class GuiRequestTable method drawGuiContainerBackgroundLayer.
@Override
public void drawGuiContainerBackgroundLayer(float f, int i, int j) {
for (GuiButton sycleButton : sycleButtons) {
sycleButton.visible = _table.targetType != null;
}
GuiGraphics.drawGuiBackGround(mc, guiLeft, guiTop, right - (showRequest ? 0 : 105), bottom, zLevel, true);
drawRect(guiLeft + 162, guiTop + 23, guiLeft + 182, guiTop + 43, Color.BLACK);
drawRect(guiLeft + 164, guiTop + 25, guiLeft + 180, guiTop + 41, Color.DARKER_GREY);
if (showRequest) {
mc.fontRenderer.drawString(_title, guiLeft + 180 + mc.fontRenderer.getStringWidth(_title) / 2, guiTop + 6, 0x404040);
itemDisplay.renderPageNumber(right - 47, guiTop + 6);
if (buttonList.get(9) instanceof GuiCheckBox && ((GuiCheckBox) buttonList.get(9)).getState()) {
mc.fontRenderer.drawString("Popup", guiLeft + 225, bottom - 56, 0x404040);
} else {
mc.fontRenderer.drawString("Popup", guiLeft + 225, bottom - 56, Color.getValue(Color.GREY));
}
itemDisplay.renderAmount(getStackAmount());
// SearchInput
search.drawTextBox();
itemDisplay.renderSortMode(right - 103, bottom - 52);
itemDisplay.renderItemArea(zLevel);
}
for (int x = 0; x < 9; x++) {
for (int y = 0; y < 3; y++) {
GuiGraphics.drawSlotBackground(mc, guiLeft + (x * 18) + 19, guiTop + (y * 18) + 79);
}
}
for (int x = 0; x < 3; x++) {
for (int y = 0; y < 3; y++) {
GuiGraphics.drawSlotBackground(mc, guiLeft + (x * 18) + 19, guiTop + (y * 18) + 14);
}
}
mc.fontRenderer.drawString("Sort:", guiLeft + 136, guiTop + 55, 0xffffff);
GuiGraphics.drawSlotBackground(mc, guiLeft + 100, guiTop + 32);
GuiGraphics.drawSlotBackground(mc, guiLeft + 163, guiTop + 50);
drawRect(guiLeft + 75, guiTop + 38, guiLeft + 95, guiTop + 43, Color.DARKER_GREY);
for (int a = 0; a < 10; a++) {
drawRect(guiLeft + 97 - a, guiTop + 40 - a, guiLeft + 98 - a, guiTop + 41 + a, Color.DARKER_GREY);
}
for (int a = 0; a < 15; a++) {
drawRect(guiLeft + 164 + a, guiTop + 51 + a, guiLeft + 166 + a, guiTop + 53 + a, Color.DARKER_GREY);
drawRect(guiLeft + 164 + a, guiTop + 65 - a, guiLeft + 166 + a, guiTop + 67 - a, Color.DARKER_GREY);
}
GuiGraphics.drawPlayerInventoryBackground(mc, guiLeft + 20, guiTop + 150);
for (final Entry<Integer, Pair<IResource, LinkedLogisticsOrderList>> entry : _table.watchedRequests.entrySet()) {
if (!handledExtention.get(entry.getKey())) {
handledExtention.set(entry.getKey());
extentionControllerLeft.addExtention(new GuiExtention() {
private Map<Pair<Integer, Integer>, IOrderInfoProvider> ordererPosition = new HashMap<>();
private int height;
private int width = 4;
private GuiButton localControlledButton;
@Override
public void renderForground(int left, int top) {
if (!_table.watchedRequests.containsKey(entry.getKey())) {
extentionControllerLeft.removeExtention(this);
if (isFullyExtended() && localControlledButton != null) {
buttonList.remove(localControlledButton);
localControlledButton = null;
orderIdForButton = -1;
}
return;
}
ordererPosition.clear();
GL11.glEnable(GL12.GL_RESCALE_NORMAL);
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240 / 1.0F, 240 / 1.0F);
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glEnable(GL11.GL_DEPTH_TEST);
RenderHelper.enableGUIStandardItemLighting();
ItemStack stack;
IResource resource = entry.getValue().getValue1();
String s;
if (resource != null) {
stack = resource.getDisplayItem().makeNormalStack();
itemRender.renderItemAndEffectIntoGUI(stack, left + 5, top + 5);
itemRender.renderItemOverlayIntoGUI(mc.fontRenderer, stack, left + 5, top + 5, "");
s = TextUtil.getThreeDigitFormattedNumber(stack.getCount(), false);
} else {
s = "List";
}
GL11.glDisable(GL11.GL_LIGHTING);
GL11.glDisable(GL11.GL_DEPTH_TEST);
itemRender.zLevel = 0.0F;
// Draw number
mc.fontRenderer.drawStringWithShadow(s, left + 22 - mc.fontRenderer.getStringWidth(s), top + 14, 16777215);
if (isFullyExtended()) {
if (localControlledButton == null || orderIdForButton != entry.getKey()) {
if (localControlledButton != null) {
buttonList.remove(localControlledButton);
}
localControlledButton = new SmallGuiButton(100, guiLeft - 35, guiTop + 10, 30, 10, "more");
buttonList.add(localControlledButton);
orderIdForButton = entry.getKey();
}
List<IOrderInfoProvider> list = entry.getValue().getValue2().getList();
calculateSize(left, top, list);
String ident = String.format("ID: %d", entry.getKey());
mc.fontRenderer.drawStringWithShadow(ident, left + 25, top + 7, 16777215);
int x = left + 6;
int y = top + 25;
for (IOrderInfoProvider order : list) {
stack = order.getAsDisplayItem().makeNormalStack();
if (stack.getCount() <= 0) {
continue;
}
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glEnable(GL11.GL_DEPTH_TEST);
RenderHelper.enableGUIStandardItemLighting();
itemRender.renderItemAndEffectIntoGUI(stack, x, y);
itemRender.renderItemOverlayIntoGUI(fontRenderer, stack, x, y, "");
s = TextUtil.getThreeDigitFormattedNumber(stack.getCount(), false);
GL11.glDisable(GL11.GL_LIGHTING);
GL11.glDisable(GL11.GL_DEPTH_TEST);
itemRender.zLevel = 0.0F;
// Draw number
mc.fontRenderer.drawStringWithShadow(s, x + 17 - mc.fontRenderer.getStringWidth(s), y + 9, 16777215);
ordererPosition.put(new Pair<>(x, y), order);
x += 18;
if (x > left + getFinalWidth() - 18) {
x = left + 6;
y += 18;
}
}
} else if (isExtending()) {
List<IOrderInfoProvider> list = entry.getValue().getValue2().getList();
calculateSize(left, top, list);
}
if (!isFullyExtended() && localControlledButton != null) {
buttonList.remove(localControlledButton);
localControlledButton = null;
orderIdForButton = -1;
}
RenderHelper.disableStandardItemLighting();
}
private void calculateSize(int left, int top, List<IOrderInfoProvider> list) {
int x = left + 6;
int y = 50;
int line = 1;
width = 4;
for (IOrderInfoProvider order : list) {
ItemStack stack = order.getAsDisplayItem().makeNormalStack();
if (stack.getCount() <= 0) {
continue;
}
if (line++ % (4 * 4) == 0) {
width++;
}
}
for (IOrderInfoProvider order : list) {
ItemStack stack = order.getAsDisplayItem().makeNormalStack();
if (stack.getCount() <= 0) {
continue;
}
x += 18;
if (x > left + getFinalWidth() - 18) {
x = left + 6;
y += 18;
}
}
height = y;
if (x == left + 6) {
height -= 18;
}
}
@Override
public int getFinalWidth() {
return Math.max(85, width * 18 + 8);
}
@Override
public int getFinalHeight() {
return Math.max(50, height);
}
@Override
public void handleMouseOverAt(int xPos, int yPos) {
if (isFullyExtended()) {
ordererPosition.keySet().stream().filter(key -> xPos >= key.getValue1() && xPos < key.getValue1() + 18 && yPos >= key.getValue2() && yPos < key.getValue2() + 18).forEach(key -> {
IOrderInfoProvider order = ordererPosition.get(key);
List<String> list = new ArrayList<>();
list.add(ChatColor.BLUE + "Request Type: " + ChatColor.YELLOW + order.getType().name());
list.add(ChatColor.BLUE + "Send to Router ID: " + ChatColor.YELLOW + order.getRouterId());
GuiGraphics.displayItemToolTip(new Object[] { xPos - 10, yPos, order.getAsDisplayItem().makeNormalStack(), true, list }, zLevel, guiLeft, guiTop, false);
});
} else if (entry.getValue() != null && entry.getValue().getValue1() != null && entry.getValue().getValue1().getDisplayItem() != null) {
List<String> list = new ArrayList<>();
list.add(ChatColor.BLUE + "Request ID: " + ChatColor.YELLOW + entry.getKey());
GuiGraphics.displayItemToolTip(new Object[] { xPos - 10, yPos, entry.getValue().getValue1().getDisplayItem().makeNormalStack(), true, list }, zLevel, guiLeft, guiTop, false);
}
}
});
}
}
super.renderExtentions();
}
use of org.lwjgl.opengl.GL11.glViewport in project LogisticsPipes by RS485.
the class RenderTickHandler method renderWorldLast.
// private static final ResourceLocation TEXTURE = new ResourceLocation("logisticspipes", "textures/blocks/pipes/White.png");
@SubscribeEvent
@SideOnly(Side.CLIENT)
public void renderWorldLast(RenderWorldLastEvent worldEvent) {
// if (LogisticsRenderPipe.config.isUseNewRenderer()) {
if (displayPipeGhost()) {
Minecraft mc = Minecraft.getMinecraft();
EntityPlayer player = mc.player;
RayTraceResult box = mc.objectMouseOver;
if (box != null && box.typeOfHit == RayTraceResult.Type.BLOCK) {
ItemStack stack = FMLClientHandler.instance().getClient().player.inventory.mainInventory.get(FMLClientHandler.instance().getClient().player.inventory.currentItem);
CoreUnroutedPipe pipe = ((ItemLogisticsPipe) stack.getItem()).getDummyPipe();
World world = player.getEntityWorld();
EnumFacing side = box.sideHit;
BlockPos bPos = box.getBlockPos();
Block block = world.getBlockState(bPos).getBlock();
if (block == Blocks.SNOW_LAYER && block.isReplaceable(world, bPos)) {
side = EnumFacing.UP;
} else if (!block.isReplaceable(world, bPos)) {
bPos = bPos.offset(side);
}
boolean isFreeSpace = true;
ITubeOrientation orientation = null;
if (pipe instanceof CoreMultiBlockPipe) {
CoreMultiBlockPipe multipipe = (CoreMultiBlockPipe) pipe;
DoubleCoordinates placeAt = new DoubleCoordinates(bPos);
LPPositionSet<DoubleCoordinatesType<CoreMultiBlockPipe.SubBlockTypeForShare>> globalPos = new LPPositionSet<>(DoubleCoordinatesType.class);
globalPos.add(new DoubleCoordinatesType<>(placeAt, CoreMultiBlockPipe.SubBlockTypeForShare.NON_SHARE));
LPPositionSet<DoubleCoordinatesType<CoreMultiBlockPipe.SubBlockTypeForShare>> positions = multipipe.getSubBlocks();
orientation = multipipe.getTubeOrientation(player, bPos.getX(), bPos.getZ());
if (orientation != null) {
orientation.rotatePositions(positions);
positions.stream().map(pos -> pos.add(placeAt)).forEach(globalPos::add);
globalPos.addToAll(orientation.getOffset());
for (DoubleCoordinatesType<CoreMultiBlockPipe.SubBlockTypeForShare> pos : globalPos) {
if (!player.getEntityWorld().mayPlace(LPBlocks.pipe, pos.getBlockPos(), false, side, player)) {
TileEntity tile = player.getEntityWorld().getTileEntity(pos.getBlockPos());
boolean canPlace = false;
if (tile instanceof LogisticsTileGenericSubMultiBlock) {
if (CoreMultiBlockPipe.canShare(((LogisticsTileGenericSubMultiBlock) tile).getSubTypes(), pos.getType())) {
canPlace = true;
}
}
if (!canPlace) {
isFreeSpace = false;
break;
}
}
}
} else {
return;
}
} else {
if (!player.getEntityWorld().mayPlace(LPBlocks.pipe, bPos, false, side, player)) {
isFreeSpace = false;
}
}
if (isFreeSpace) {
GlStateManager.pushMatrix();
double x;
double y;
double z;
if (orientation != null) {
x = bPos.getX() + orientation.getOffset().getXInt() - player.prevPosX - ((player.posX - player.prevPosX) * worldEvent.getPartialTicks());
y = bPos.getY() + orientation.getOffset().getYInt() - player.prevPosY - ((player.posY - player.prevPosY) * worldEvent.getPartialTicks());
z = bPos.getZ() + orientation.getOffset().getZInt() - player.prevPosZ - ((player.posZ - player.prevPosZ) * worldEvent.getPartialTicks());
} else {
x = bPos.getX() - player.prevPosX - ((player.posX - player.prevPosX) * worldEvent.getPartialTicks());
y = bPos.getY() - player.prevPosY - ((player.posY - player.prevPosY) * worldEvent.getPartialTicks());
z = bPos.getZ() - player.prevPosZ - ((player.posZ - player.prevPosZ) * worldEvent.getPartialTicks());
}
GL11.glTranslated(x + 0.001, y + 0.001, z + 0.001);
GlStateManager.enableBlend();
// GL11.glDepthMask(false);
GlStateManager.disableTexture2D();
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
mc.renderEngine.bindTexture(new ResourceLocation("logisticspipes", "textures/blocks/pipes/white.png"));
SimpleServiceLocator.cclProxy.getRenderState().reset();
SimpleServiceLocator.cclProxy.getRenderState().setAlphaOverride(0xff);
GlStateManager.enableTexture2D();
SimpleServiceLocator.cclProxy.getRenderState().setAlphaOverride(0x50);
SimpleServiceLocator.cclProxy.getRenderState().startDrawing(GL11.GL_QUADS, DefaultVertexFormats.BLOCK);
pipe.getHighlightRenderer().renderHighlight(orientation);
SimpleServiceLocator.cclProxy.getRenderState().draw();
SimpleServiceLocator.cclProxy.getRenderState().setAlphaOverride(0xff);
GlStateManager.disableBlend();
GlStateManager.depthMask(true);
GlStateManager.popMatrix();
}
}
}
// }
}
use of org.lwjgl.opengl.GL11.glViewport in project BuildCraft by BuildCraft.
the class AdvDebuggerQuarry method render.
@Override
public void render(EntityPlayer player, float partialTicks) {
TileQuarry tile = tileReference.get();
if (tile == null || !tile.frameBox.isInitialized()) {
return;
}
List<ChunkPos> chunkPoses = new ArrayList<>(ChunkLoaderManager.getChunksToLoad(tile));
chunkPoses.sort(Comparator.comparingDouble(chunkPos -> -player.getPositionEyes(partialTicks).distanceTo(new Vec3d(chunkPos.getXStart() + 0.5 + (chunkPos.getXEnd() - chunkPos.getXStart()) / 2, player.getPositionEyes(partialTicks).y, chunkPos.getZStart() + 0.5 + (chunkPos.getZEnd() - chunkPos.getZStart()) / 2))));
GlStateManager.enableBlend();
BufferBuilder bb = Tessellator.getInstance().getBuffer();
bb.begin(GL11.GL_QUADS, DefaultVertexFormats.BLOCK);
for (ChunkPos chunkPos : chunkPoses) {
DebugRenderHelper.renderAABB(bb, new AxisAlignedBB(chunkPos.getXStart() + 0.5D, tile.frameBox.min().getY() + 0.5D, chunkPos.getZStart() + 0.5D, chunkPos.getXEnd() + 0.5D, tile.frameBox.max().getY() + 0.5D, chunkPos.getZEnd() + 0.5D), COLOUR_CHUNK);
}
Tessellator.getInstance().draw();
GlStateManager.disableBlend();
}
use of org.lwjgl.opengl.GL11.glViewport in project Wizardry by TeamWizardry.
the class TileManaBatteryRenderer method render.
@Override
public void render(float partialTicks, int destroyStage, float alpha) {
if (!getBakedModels())
return;
GlStateManager.pushMatrix();
GlStateManager.enableBlend();
GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
TextureManager texturemanager = Minecraft.getMinecraft().renderEngine;
if (texturemanager != null) {
texturemanager.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE);
}
if (Minecraft.isAmbientOcclusionEnabled())
GlStateManager.shadeModel(GL11.GL_SMOOTH);
else
GlStateManager.shadeModel(GL11.GL_FLAT);
float fill = (float) (ManaManager.getMana(tile.getWizardryCap()) / ManaManager.getMaxMana(tile.getWizardryCap())) / 40.0f;
GlStateManager.translate(0, 0.5, 0);
GlStateManager.disableRescaleNormal();
{
double x = RandUtil.nextDouble(-fill, fill), y = RandUtil.nextDouble(-fill, fill), z = RandUtil.nextDouble(-fill, fill);
GlStateManager.translate(0, Math.sin((ClientTickHandler.getTicks() + ClientTickHandler.getPartialTicks()) / 40) / 8, 0);
GlStateManager.translate(x, y, z);
Minecraft.getMinecraft().getBlockRendererDispatcher().getBlockModelRenderer().renderModelBrightnessColor(modelCrystal, 1.0F, 1, 1, 1);
GlStateManager.translate(-x, -y, -z);
}
GlStateManager.translate(0.5, 0, 0.5);
GlStateManager.rotate(ClientTickHandler.getTicks() + ClientTickHandler.getPartialTicks(), 0, 1, 0);
GlStateManager.translate(-0.5, 0, -0.5);
Minecraft.getMinecraft().getBlockRendererDispatcher().getBlockModelRenderer().renderModelBrightnessColor(modelRing, 1.0F, 1, 1, 1);
GlStateManager.translate(0.5, 0, 0.5);
GlStateManager.rotate(ClientTickHandler.getTicks() + ClientTickHandler.getPartialTicks(), 0, -1, 0);
GlStateManager.rotate(ClientTickHandler.getTicks() + ClientTickHandler.getPartialTicks(), 0, -1, 0);
GlStateManager.translate(-0.5, 0, -0.5);
Minecraft.getMinecraft().getBlockRendererDispatcher().getBlockModelRenderer().renderModelBrightnessColor(modelRingOuter, 1.0F, 1, 1, 1);
GlStateManager.disableBlend();
GlStateManager.popMatrix();
ArrayList<BlockPos> errors = new ArrayList<>(((IStructure) tile.getBlockType()).testStructure(tile.getWorld(), tile.getPos()));
errors.sort(Vec3i::compareTo);
if (!errors.isEmpty()) {
for (BlockPos error : errors) {
StructureErrorRenderer.addError(error);
}
}
if (!errors.isEmpty() && tile.revealStructure && tile.getBlockType() instanceof IStructure) {
ModStructures.structureManager.draw(ModStructures.MANA_BATTERY, (float) (Math.sin(ClientTickHandler.getTicks() / 10.0) + 1) / 10.0f + 0.3f);
return;
}
if (tile.getBlockType() == ModBlocks.CREATIVE_MANA_BATTERY) {
double angle = ClientTickHandler.getTicks() / 10.0;
double x1 = Math.cos((float) angle);
double y1 = Math.sin((float) angle);
ParticleBuilder builder = new ParticleBuilder(10);
builder.setRender(new ResourceLocation(Wizardry.MODID, NBTConstants.MISC.SPARKLE_BLURRED));
builder.setCollision(true);
builder.disableRandom();
builder.disableMotionCalculation();
ParticleSpawner.spawn(builder, tile.getWorld(), new InterpCircle(new Vec3d(tile.getPos()).add(0.5, 0.5, 0.5), new Vec3d(x1, x1, y1), 1.5f), 20, 0, (aFloat, particleBuilder) -> {
particleBuilder.setScale(0.5f);
particleBuilder.setColor(new Color(0xd600d2));
particleBuilder.setAlphaFunction(new InterpFloatInOut(1, 1));
particleBuilder.setLifetime(RandUtil.nextInt(5, 10));
});
} else if (ClientTickHandler.getTicks() % 10 == 0 && ManaManager.forObject(tile.getWizardryCap()).isManaFull()) {
double radius = 1;
double theta = 2.0f * (float) Math.PI * RandUtil.nextFloat();
double r = radius * RandUtil.nextFloat();
double x = r * MathHelper.cos((float) theta);
double z = r * MathHelper.sin((float) theta);
ParticleBuilder helix = new ParticleBuilder(20);
helix.setRender(new ResourceLocation(Wizardry.MODID, NBTConstants.MISC.SPARKLE_BLURRED));
helix.setAlphaFunction(new InterpFloatInOut(0.1f, 0.4f));
ParticleSpawner.spawn(helix, tile.getWorld(), new StaticInterp<>(new Vec3d(tile.getPos()).add(0.5, 0.5, 0.5)), 1, 0, (someFloat, particleBuilder) -> {
particleBuilder.setColor(ColorUtils.changeColorAlpha(new Color(0x0097FF), RandUtil.nextInt(50, 200)));
particleBuilder.setScale(RandUtil.nextFloat(0.5f, 1.2f));
particleBuilder.setMotion(new Vec3d(x, RandUtil.nextDouble(-1, 1), z).scale(0.05));
particleBuilder.setLifetime(RandUtil.nextInt(20, 40));
});
}
}
use of org.lwjgl.opengl.GL11.glViewport in project Wizardry by TeamWizardry.
the class FairyData method render.
@SideOnly(Side.CLIENT)
public void render(World world, Vec3d pos, Vec3d prevPos, float partialTicks) {
if (!wasTamperedWith && !isDepressed) {
LibParticles.FAIRY_HEAD(world, pos.add(0, 0.25, 0), primaryColor);
ParticleBuilder glitter = new ParticleBuilder(age / 2);
glitter.setRender(new ResourceLocation(Wizardry.MODID, NBTConstants.MISC.SPARKLE_BLURRED));
glitter.setAlphaFunction(new InterpFloatInOut(0.2f, 1f));
if (RandUtil.nextInt(3) == 0)
ParticleSpawner.spawn(glitter, world, new StaticInterp<>(pos), 1, 0, (i, build) -> {
build.setMotion(new Vec3d(RandUtil.nextDouble(-0.01, 0.01), RandUtil.nextDouble(-0.01, 0.01), RandUtil.nextDouble(-0.01, 0.01)));
if (RandUtil.nextBoolean())
build.setColor(primaryColor);
else
build.setColor(secondaryColor);
if (isDepressed) {
build.setCollision(true);
build.enableMotionCalculation();
build.setAcceleration(new Vec3d(0, -0.005, 0));
}
});
} else {
{
GlStateManager.pushMatrix();
EntityPlayer player = Minecraft.getMinecraft().player;
if (player == null)
return;
double interpPosX = player.lastTickPosX + (player.posX - player.lastTickPosX) * partialTicks;
double interpPosY = player.lastTickPosY + (player.posY - player.lastTickPosY) * partialTicks;
double interpPosZ = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * partialTicks;
GlStateManager.translate(-interpPosX, -interpPosY, -interpPosZ);
GlStateManager.translate(pos.x, pos.y, pos.z);
Minecraft.getMinecraft().entityRenderer.disableLightmap();
GlStateManager.enableDepth();
GlStateManager.disableCull();
GlStateManager.enableAlpha();
GlStateManager.enableBlend();
GlStateManager.blendFunc(GL_SRC_ALPHA, GL_ONE);
GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO);
GlStateManager.color(1, 1, 1, 1);
GlStateManager.disableTexture2D();
GlStateManager.enableColorMaterial();
GlStateManager.disableLighting();
GlStateManager.shadeModel(GL11.GL_SMOOTH);
int alphaFunc = GL11.glGetInteger(GL11.GL_ALPHA_TEST_FUNC);
float alphaTest = GL11.glGetFloat(GL11.GL_ALPHA_TEST_REF);
GlStateManager.alphaFunc(GL11.GL_ALWAYS, 1);
GlStateManager.pushMatrix();
GlStateManager.rotate(-Minecraft.getMinecraft().getRenderManager().playerViewY, 0.0F, 1.0F, 0.0F);
GlStateManager.rotate((float) (Minecraft.getMinecraft().getRenderManager().options.thirdPersonView == 2 ? -1 : 1) * Minecraft.getMinecraft().getRenderManager().playerViewX, 1.0F, 0.0F, 0.0F);
Tessellator tessellator = Tessellator.getInstance();
BufferBuilder bb = tessellator.getBuffer();
double radius = 0.1;
Color color = primaryColor;
bb.begin(GL11.GL_TRIANGLE_FAN, DefaultVertexFormats.POSITION_COLOR);
for (int i = 0; i <= 50; i++) {
double x = radius * MathHelper.cos((float) ((i / 50.0) * Math.PI * 2));
double z = radius * MathHelper.sin((float) ((i / 50.0) * Math.PI * 2));
bb.pos(x, z, 0).color(color.getRed(), color.getGreen(), color.getBlue(), 255).endVertex();
}
tessellator.draw();
GlStateManager.popMatrix();
bb.begin(GL11.GL_TRIANGLES, DefaultVertexFormats.POSITION_COLOR);
Vec3d sub = pos.subtract(prevPos).scale(-1).add(0, 0.2, 0).scale(3);
Vec3d posCross = sub.crossProduct(new Vec3d(0, 1, 0)).normalize();
Vec3d posPerp = posCross.crossProduct(sub).normalize().scale(radius - 0.2);
Vec3d vec1 = posPerp;
Vec3d vec2 = posPerp.scale(-1);
bb.pos(sub.x, sub.y, sub.z).color(color.getRed(), color.getGreen(), color.getBlue(), 255).endVertex();
bb.pos(vec1.x, vec1.y, vec1.z).color(color.getRed(), color.getGreen(), color.getBlue(), 255).endVertex();
bb.pos(vec2.x, vec2.y, vec2.z).color(color.getRed(), color.getGreen(), color.getBlue(), 255).endVertex();
Vec3d vec3 = posCross.scale(radius);
Vec3d vec4 = posCross.scale(-1).scale(radius);
bb.pos(sub.x, sub.y, sub.z).color(color.getRed(), color.getGreen(), color.getBlue(), 255).endVertex();
bb.pos(vec3.x, vec3.y, vec3.z).color(color.getRed(), color.getGreen(), color.getBlue(), 255).endVertex();
bb.pos(vec4.x, vec4.y, vec4.z).color(color.getRed(), color.getGreen(), color.getBlue(), 255).endVertex();
tessellator.draw();
GlStateManager.pushMatrix();
GlStateManager.rotate(-Minecraft.getMinecraft().getRenderManager().playerViewY, 0.0F, 1.0F, 0.0F);
GlStateManager.rotate((float) (Minecraft.getMinecraft().getRenderManager().options.thirdPersonView == 2 ? -1 : 1) * Minecraft.getMinecraft().getRenderManager().playerViewX, 1.0F, 0.0F, 0.0F);
int sections = 50;
float epsilon = 2 * (float) Math.PI / sections;
double innerRadius = radius;
double outerRadius = radius + 0.01;
Color inner = primaryColor;
Color outer = new Color(primaryColor.getRed(), primaryColor.getGreen(), primaryColor.getBlue(), 0);
bb.begin(GL11.GL_TRIANGLE_STRIP, DefaultVertexFormats.POSITION_COLOR);
for (int i = 0; i <= sections; i++) {
float angle = i * epsilon;
float nextAngle = (i + 1) * epsilon;
float x1 = (float) (MathHelper.cos(angle) * innerRadius);
float y1 = (float) (MathHelper.sin(angle) * innerRadius);
float x2 = (float) (MathHelper.cos(nextAngle) * outerRadius);
float y2 = (float) (MathHelper.sin(nextAngle) * outerRadius);
bb.pos(x1, y1, 0).color(inner.getRed(), inner.getGreen(), inner.getBlue(), inner.getAlpha()).endVertex();
bb.pos(x2, y2, 0).color(outer.getRed(), outer.getGreen(), outer.getBlue(), outer.getAlpha()).endVertex();
}
tessellator.draw();
radius = 0.2;
color = secondaryColor;
GlStateManager.translate(0, 0, 0.01);
bb.begin(GL11.GL_TRIANGLE_FAN, DefaultVertexFormats.POSITION_COLOR);
bb.pos(0, 0, 0).color(color.getRed(), color.getGreen(), color.getBlue(), 100).endVertex();
for (int i = 0; i <= 50; i++) {
double x = radius * MathHelper.cos((float) ((i / 50.0) * Math.PI * 2));
double z = radius * MathHelper.sin((float) ((i / 50.0) * Math.PI * 2));
bb.pos(x, z, 0).color(color.getRed(), color.getGreen(), color.getBlue(), 0).endVertex();
}
tessellator.draw();
GlStateManager.translate(0, 0, -0.01);
GlStateManager.alphaFunc(alphaFunc, alphaTest);
GlStateManager.disableBlend();
GlStateManager.enableAlpha();
GlStateManager.enableTexture2D();
GlStateManager.disableColorMaterial();
Minecraft.getMinecraft().entityRenderer.enableLightmap();
GlStateManager.enableDepth();
GlStateManager.popMatrix();
GlStateManager.popMatrix();
}
}
}
Aggregations