Java tutorial
/** * Copyright (c) Lambda Innovation, 2013-2016 * This file is part of the AcademyCraft mod. * https://github.com/LambdaInnovation/AcademyCraft * Licensed under GPLv3, see project root for more information. */ package cn.academy.vanilla.electromaster.client.effect; import cn.academy.vanilla.electromaster.client.effect.ArcFactory.Arc; import cn.lambdalib.util.client.RenderUtils; import net.minecraft.util.Vec3; import org.lwjgl.opengl.GL11; import java.util.Iterator; import java.util.LinkedList; import java.util.List; /** * Create one for each entity that you wanna use to draw subArc. Provide the template pre-generated and * this class handles everything else. * @author WeAthFolD */ public class SubArcHandler { public final Arc[] arcs; List<SubArc> list = new LinkedList(); public double frameRate = 1.0, switchRate = 1.0; public SubArcHandler(Arc[] _arcs) { arcs = _arcs; } public SubArc generateAt(Vec3 pos) { SubArc sa = new SubArc(pos, arcs.length); sa.frameRate = frameRate; sa.switchRate = switchRate; list.add(sa); return sa; } public void tick() { Iterator<SubArc> iter = list.iterator(); while (iter.hasNext()) { SubArc sa = iter.next(); if (sa.dead) iter.remove(); else sa.tick(); } } public void clear() { list.clear(); } public boolean isEmpty() { return list.isEmpty(); } public void drawAll() { Iterator<SubArc> iter = list.iterator(); GL11.glDepthMask(false); while (iter.hasNext()) { SubArc arc = iter.next(); if (!arc.dead && arc.draw) { GL11.glPushMatrix(); RenderUtils.glTranslate(arc.pos); GL11.glRotated(arc.rotZ, 0, 0, 1); GL11.glRotated(arc.rotY, 0, 1, 0); GL11.glRotated(arc.rotX, 1, 0, 0); final double scale = 0.3; GL11.glScaled(scale, scale, scale); GL11.glTranslated(-arcs[arc.texID].length / 2, 0, 0); arcs[arc.texID].draw(); GL11.glPopMatrix(); } } GL11.glDepthMask(true); } }