Android Open Source - Schooner-3D Game Hud






From Project

Back to project page Schooner-3D.

License

The source code is released under:

Apache License

If you think the Android project Schooner-3D listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
 * Copyright 2012 Dan Mercer/*from   w w  w . j ava  2 s.c  o m*/
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *     http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.supermercerbros.gameengine.hud;

import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.util.LinkedList;

import android.opengl.GLES20;
import android.view.MotionEvent;

/**
 * Represents the Heads-Up-Display-style UI of a game.
 */
public class GameHud {
  // Constants
  private static final int DEFAULT_VBO_SIZE = 8000; // 400 verts
  private static final int DEFAULT_IBO_SIZE = 2400; // 800 faces

  private final int vboSize;
  private final int iboSize;
  private final LinkedList<HudElement> elements;

  // Coordinate converter
  private CoordsConverter converter;
  
  private volatile boolean isInUse = false;

  // Buffer handles
  private int arrayBuffer;
  private int elementBuffer;

  /**
   * Constructs a new GameHud.
   */
  public GameHud() {
    this.elements = new LinkedList<HudElement>();
    this.vboSize = DEFAULT_VBO_SIZE;
    this.iboSize = DEFAULT_IBO_SIZE;
  }

  /**
   * Constructs a new GameHud.
   * 
   * @param vboSize
   * @param iboSize
   */
  public GameHud(int vboSize, int iboSize) {
    this.elements = new LinkedList<HudElement>();
    this.vboSize = vboSize;
    this.iboSize = iboSize;
  }

  /**
   * Adds the given {@link HudElement} to this GameHud
   * 
   * @param element
   *            The <code>HudElement</code> to add.
   */
  public void addElement(HudElement element) {
    if (isInUse) {
      throw new IllegalStateException(
          "Cannot addElement to gameHud that is currently in use");
    }
    final LinkedList<HudElement> localElements = this.elements;
    synchronized (localElements) {
      localElements.add(element);
    }
  }

  /**
   * Called by GameRenderer
   */
  public void render() {
    // GL Buffer stuff
    GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, arrayBuffer);
    GLES20.glBindBuffer(GLES20.GL_ELEMENT_ARRAY_BUFFER, elementBuffer);

    // Disable depth test and face culling
    GLES20.glDisable(GLES20.GL_DEPTH_TEST);
    GLES20.glDisable(GLES20.GL_CULL_FACE); // TODO delete this line

    // Render elements
    final LinkedList<HudElement> localElements = this.elements;
    synchronized (localElements) {
      for (HudElement element : localElements) {
        element.render();
      }
    }
  }

  /**
   * Called by GameRenderer
   */
  public void load() {
    isInUse = true;
    
    // Generate buffers
    final int[] buffers = new int[2];
    GLES20.glGenBuffers(2, buffers, 0);
    final int localArrayBuffer = buffers[0];
    final int localElementBuffer = buffers[1];
    arrayBuffer = localArrayBuffer;
    elementBuffer = localElementBuffer;

    // Bind buffers
    GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, localArrayBuffer);
    GLES20.glBindBuffer(GLES20.GL_ELEMENT_ARRAY_BUFFER, localElementBuffer);

    // Construct ByteBuffers
    final ByteBuffer vbo = ByteBuffer.allocateDirect(vboSize).order(
        ByteOrder.nativeOrder());
    final ByteBuffer ibo = ByteBuffer.allocateDirect(iboSize).order(
        ByteOrder.nativeOrder());

    // Fill Buffers and load Programs
    final LinkedList<HudElement> localElements = this.elements;
    synchronized (localElements) {
      for (HudElement element : localElements) {
        element.loadProgram();
        element.writeIndicesToBuffer(ibo);
        element.writeVertsToBuffer(vbo);
      }
    }

    vbo.rewind();
    ibo.rewind();

    // Initialize buffers
    GLES20.glBufferData(GLES20.GL_ARRAY_BUFFER, vboSize, vbo,
        GLES20.GL_STATIC_DRAW);
    GLES20.glBufferData(GLES20.GL_ELEMENT_ARRAY_BUFFER, iboSize, ibo,
        GLES20.GL_STATIC_DRAW);
  }
  
  /**
   * Called by GameRenderer
   */
  public void unload() {
    GLES20.glDeleteBuffers(2, new int[]{arrayBuffer, elementBuffer}, 0);
    // TODO: check this against documentation
    
    arrayBuffer = -1;
    elementBuffer = -1;
    
    isInUse = false;
  }

  /**
   * Called when a MotionEvent occurs. This calls <code>onTouchEvent</code> on
   * all elements contained in this GameHud.
   * 
   * @param event
   * @return
   */
  public boolean onTouchEvent(MotionEvent event) {
    for (HudElement element : elements) {
      if (element.onTouchEvent(event, converter)) {
        return true;
      }
    }
    return false;
  }

  /**
   * @param width
   * @param height
   */
  public void setDimensions(int width, int height) {
    this.converter = new CoordsConverter(width, height);
  }
}




Java Source Code List

com.supermercerbros.gameengine.GameActivity.java
com.supermercerbros.gameengine.GameView.java
com.supermercerbros.gameengine.Schooner3D.java
com.supermercerbros.gameengine.TestActivity.java
com.supermercerbros.gameengine.TestMaterials.java
com.supermercerbros.gameengine.TestObjects.java
com.supermercerbros.gameengine.animation.AnimationData.java
com.supermercerbros.gameengine.animation.Keyframe.java
com.supermercerbros.gameengine.animation.MeshAnimation.java
com.supermercerbros.gameengine.armature.ActionData.java
com.supermercerbros.gameengine.armature.Action.java
com.supermercerbros.gameengine.armature.BinarySkeletalVertexModifier.java
com.supermercerbros.gameengine.armature.Bone.java
com.supermercerbros.gameengine.armature.SkeletalVertexModifier.java
com.supermercerbros.gameengine.armature.Skeleton.java
com.supermercerbros.gameengine.collision.Bounds.java
com.supermercerbros.gameengine.collision.Collider.java
com.supermercerbros.gameengine.collision.CollisionDetector.java
com.supermercerbros.gameengine.collision.Collision.java
com.supermercerbros.gameengine.collision.DebugListener.java
com.supermercerbros.gameengine.collision.Edge.java
com.supermercerbros.gameengine.collision.Face.java
com.supermercerbros.gameengine.collision.Feature.java
com.supermercerbros.gameengine.collision.Intersection.java
com.supermercerbros.gameengine.collision.Line.java
com.supermercerbros.gameengine.collision.LocalDistMinimum.java
com.supermercerbros.gameengine.collision.Matrix.java
com.supermercerbros.gameengine.collision.OnCollisionCheckFinishedListener.java
com.supermercerbros.gameengine.collision.Plane.java
com.supermercerbros.gameengine.collision.Point.java
com.supermercerbros.gameengine.collision.Polyhedron.java
com.supermercerbros.gameengine.collision.SphereBounds.java
com.supermercerbros.gameengine.collision.Vector.java
com.supermercerbros.gameengine.collision.Vertex.java
com.supermercerbros.gameengine.debug.JankCatcher.java
com.supermercerbros.gameengine.debug.LoopLog.java
com.supermercerbros.gameengine.engine.Camera.java
com.supermercerbros.gameengine.engine.DataPipe.java
com.supermercerbros.gameengine.engine.EGLContextLostHandler.java
com.supermercerbros.gameengine.engine.Engine.java
com.supermercerbros.gameengine.engine.GameRenderer.java
com.supermercerbros.gameengine.engine.Light.java
com.supermercerbros.gameengine.engine.Normals.java
com.supermercerbros.gameengine.engine.RenderData.java
com.supermercerbros.gameengine.engine.Scene.java
com.supermercerbros.gameengine.engine.Time.java
com.supermercerbros.gameengine.engine.shaders.Material.java
com.supermercerbros.gameengine.engine.shaders.Program.java
com.supermercerbros.gameengine.engine.shaders.ShaderLib.java
com.supermercerbros.gameengine.engine.shaders.Shader.java
com.supermercerbros.gameengine.engine.shaders.VertexModifier.java
com.supermercerbros.gameengine.handlers.OnAnimationCompleteDispatcher.java
com.supermercerbros.gameengine.handlers.OnAnimationCompleteListener.java
com.supermercerbros.gameengine.hud.CoordsConverter.java
com.supermercerbros.gameengine.hud.GameHud.java
com.supermercerbros.gameengine.hud.HudElement.java
com.supermercerbros.gameengine.material.CelShadedMaterial.java
com.supermercerbros.gameengine.material.TexturedMaterial.java
com.supermercerbros.gameengine.math.BezierCurve.java
com.supermercerbros.gameengine.math.Curve.java
com.supermercerbros.gameengine.math.MatrixUtils.java
com.supermercerbros.gameengine.math.Quaternion.java
com.supermercerbros.gameengine.motion.CurveMovement.java
com.supermercerbros.gameengine.motion.MovementData.java
com.supermercerbros.gameengine.motion.Movement.java
com.supermercerbros.gameengine.objects.AnimatedMeshObject.java
com.supermercerbros.gameengine.objects.BasicMaterial.java
com.supermercerbros.gameengine.objects.BonedObject.java
com.supermercerbros.gameengine.objects.GameObject.java
com.supermercerbros.gameengine.objects.Metadata.java
com.supermercerbros.gameengine.parsers.ConstantCurve.java
com.supermercerbros.gameengine.parsers.GameFactory.java
com.supermercerbros.gameengine.parsers.PreBoneData.java
com.supermercerbros.gameengine.parsers.PreObjectData.java
com.supermercerbros.gameengine.parsers.Sch3D.java
com.supermercerbros.gameengine.render.Compositor.java
com.supermercerbros.gameengine.shaders.ProgramSource.java
com.supermercerbros.gameengine.texture.BitmapTexture.java
com.supermercerbros.gameengine.texture.ETC1CompressedTexture.java
com.supermercerbros.gameengine.texture.Texture.java
com.supermercerbros.gameengine.util.BetterDataInputStream.java
com.supermercerbros.gameengine.util.DelayedRunnable.java
com.supermercerbros.gameengine.util.GLES2.java
com.supermercerbros.gameengine.util.IPO.java
com.supermercerbros.gameengine.util.LoopingThread.java
com.supermercerbros.gameengine.util.Toggle.java
com.supermercerbros.gameengine.util.Utils.java