public BlueShell(GL2 gl, Scene scene, Vehicle car, float trajectory) { super(gl, scene, car, trajectory); if (shellList == -1) { shellList = gl.glGenLists(1); gl.glNewList(shellList, GL2.GL_COMPILE); displayWildcardObject(gl, SHELL_FACES, textures); gl.glEndList(); spikeNode = new SceneNode(spike_model); spikeNode.setRenderMode(RenderMode.COLOR); noiseSampler = TextureLoader.load(gl, "tex/blast_noise.png"); float[] blastColor = RGB.INDIGO; blastLight = new Light(gl, new Vec3(), blastColor, blastColor, blastColor); blastLight.setConstantAttenuation(0.5f); blastLight.setLinearAttenuation(0.001f); blastLight.setQuadraticAttenuation(0.001f); blastLight.enableAttenuation = true; blastLight.disable(gl); } generator = new ParticleGenerator(); boundColor = RGB.toRGBA(RGB.INDIGO, BOUND_ALPHA); }
@Override public void render(GL2 gl, float trajectory) { if (!dead) { gl.glPushMatrix(); { gl.glTranslatef(bound.c.x, bound.c.y, bound.c.z); gl.glRotatef(rotation, 0, -1, 0); gl.glScalef(1.5f, 1.5f, 1.5f); Shader shader = Shader.getLightModel("texture"); if (shader != null) shader.enable(gl); gl.glCallList(shellList); spikeNode.render(gl); rimNode.render(gl); } gl.glPopMatrix(); Shader.disable(gl); } else if (!blast.isEmpty() && !Scene.shadowMode) { boolean useHDR = BloomStrobe.isEnabled(); if (Scene.reflectMode) BloomStrobe.end(gl); if (Scene.singleton.enableBloom) renderBlast(gl); else BlastParticle.renderList(gl, blast); if (useHDR) BloomStrobe.begin(gl); Shader.disable(gl); } if (blastDuration <= 1) blastLight.disable(gl); else blastLight.enable(gl); }