Package org.newdawn.slick.tests

Source Code of org.newdawn.slick.tests.TestUtils

package org.newdawn.slick.tests;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URL;

import org.lwjgl.LWJGLException;
import org.lwjgl.input.Keyboard;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.lwjgl.opengl.GL11;
import org.newdawn.slick.Color;
import org.newdawn.slick.Font;
import org.newdawn.slick.TrueTypeFont;
import org.newdawn.slick.openal.Audio;
import org.newdawn.slick.openal.AudioLoader;
import org.newdawn.slick.openal.SoundStore;
import org.newdawn.slick.opengl.Texture;
import org.newdawn.slick.opengl.TextureLoader;
import org.newdawn.slick.util.Log;

/**
* A simple utility test to use the internal slick API without
* the slick framework.
*
* @author kevin
*/
public class TestUtils {
  /** The texture that's been loaded */
  private Texture texture;
  /** The ogg sound effect */
  private Audio oggEffect;
  /** The wav sound effect */
  private Audio wavEffect;
  /** The aif source effect */
  private Audio aifEffect;
  /** The ogg stream thats been loaded */
  private Audio oggStream;
  /** The mod stream thats been loaded */
  private Audio modStream;
  /** The font to draw to the screen */
  private Font font;
 
  /**
   * Start the test
   */
  public void start() {
    initGL(800,600);
    init();
   
    while (true) {
      update();
      GL11.glClear(GL11.GL_COLOR_BUFFER_BIT);
      render();
     
      Display.update();
      Display.sync(100);

      if (Display.isCloseRequested()) {
        System.exit(0);
      }
    }
  }
 
  /**
   * Initialise the GL display
   *
   * @param width The width of the display
   * @param height The height of the display
   */
  private void initGL(int width, int height) {
    try {
      Display.setDisplayMode(new DisplayMode(width,height));
      Display.create();
      Display.setVSyncEnabled(true);
    } catch (LWJGLException e) {
      e.printStackTrace();
      System.exit(0);
    }

    GL11.glEnable(GL11.GL_TEXTURE_2D);
    GL11.glShadeModel(GL11.GL_SMOOTH);       
    GL11.glDisable(GL11.GL_DEPTH_TEST);
    GL11.glDisable(GL11.GL_LIGHTING);                   
       
    GL11.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);               
        GL11.glClearDepth(1);                                      
       
        GL11.glEnable(GL11.GL_BLEND);
        GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
       
        GL11.glViewport(0,0,width,height);
    GL11.glMatrixMode(GL11.GL_MODELVIEW);

    GL11.glMatrixMode(GL11.GL_PROJECTION);
    GL11.glLoadIdentity();
    GL11.glOrtho(0, width, height, 0, 1, -1);
    GL11.glMatrixMode(GL11.GL_MODELVIEW);
  }
 
  /**
   * Initialise resources
   */
  public void init() {
    // turn off all but errors
    Log.setVerbose(false);

    java.awt.Font awtFont = new java.awt.Font("Times New Roman", java.awt.Font.BOLD, 16);
    font = new TrueTypeFont(awtFont, false);
   
    // texture load, the second argument is a name assigned to the texture to
    // allow for caching in the texture loader. The 3rd argument indicates whether
    // the image should be flipped on loading
    try {
      texture = TextureLoader.getTexture("PNG", getClass().getResourceAsStream("/testdata/rocks.png"));
   
      System.out.println("Texture loaded: "+texture);
      System.out.println(">> Image width: "+texture.getImageWidth());
      System.out.println(">> Image height: "+texture.getImageWidth());
      System.out.println(">> Texture width: "+texture.getTextureWidth());
      System.out.println(">> Texture height: "+texture.getTextureHeight());
      System.out.println(">> Texture ID: "+texture.getTextureID());
    } catch (IOException e) {
      e.printStackTrace();
    }

    try {
      // you can play oggs by loading the complete thing into
      // a sound
      oggEffect = AudioLoader.getAudio("OGG", getClass().getResourceAsStream("/testdata/restart.ogg"));
     
      // or setting up a stream to read from. Note that the argument becomes
      // a URL here so it can be reopened when the stream is complete. Probably
      // should have reset the stream by thats not how the original stuff worked
      oggStream = AudioLoader.getStreamingAudio("OGG", getClass().getClassLoader().getResource("testdata/bongos.ogg"));
     
      // can load mods (XM, MOD) using ibxm which is then played through OpenAL. MODs
      // are always streamed based on the way IBXM works
      modStream = AudioLoader.getStreamingAudio("MOD", getClass().getClassLoader().getResource("testdata/SMB-X.XM"));

      // playing as music uses that reserved source to play the sound. The first
      // two arguments are pitch and gain, the boolean is whether to loop the content
      modStream.playAsMusic(1.0f, 1.0f, true);
     
      // you can play aifs by loading the complete thing into
      // a sound
      aifEffect = AudioLoader.getAudio("AIF", getClass().getResourceAsStream("/testdata/burp.aif"));

      // you can play wavs by loading the complete thing into
      // a sound
      wavEffect = AudioLoader.getAudio("WAV", getClass().getResourceAsStream("/testdata/cbrown01.wav"));
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
 
  /**
   * Game loop update
   */
  public void update() {
    while (Keyboard.next()) {
      if (Keyboard.getEventKeyState()) {
        if (Keyboard.getEventKey() == Keyboard.KEY_Q) {
          // play as a one off sound effect
          oggEffect.playAsSoundEffect(1.0f, 1.0f, false);
        }
        if (Keyboard.getEventKey() == Keyboard.KEY_W) {
          // replace the music thats curretly playing with
          // the ogg
          oggStream.playAsMusic(1.0f, 1.0f, true);
        }
        if (Keyboard.getEventKey() == Keyboard.KEY_E) {
          // replace the music thats curretly playing with
          // the mod
          modStream.playAsMusic(1.0f, 1.0f, true);
        }
        if (Keyboard.getEventKey() == Keyboard.KEY_R) {
          // play as a one off sound effect
          aifEffect.playAsSoundEffect(1.0f, 1.0f, false);
        }
        if (Keyboard.getEventKey() == Keyboard.KEY_T) {
          // play as a one off sound effect
          wavEffect.playAsSoundEffect(1.0f, 1.0f, false);
        }
      }
    }
   
    // polling is required to allow streaming to get a chance to
    // queue buffers.
    SoundStore.get().poll(0);
  }

  /**
   * Game loop render
   */
  public void render() {
    Color.white.bind();
    texture.bind(); // or GL11.glBind(texture.getTextureID());
   
    GL11.glBegin(GL11.GL_QUADS);
      GL11.glTexCoord2f(0,0);
      GL11.glVertex2f(100,100);
      GL11.glTexCoord2f(1,0);
      GL11.glVertex2f(100+texture.getTextureWidth(),100);
      GL11.glTexCoord2f(1,1);
      GL11.glVertex2f(100+texture.getTextureWidth(),100+texture.getTextureHeight());
      GL11.glTexCoord2f(0,1);
      GL11.glVertex2f(100,100+texture.getTextureHeight());
    GL11.glEnd();
   
    font.drawString(150, 300, "HELLO LWJGL WORLD", Color.yellow);
  }
 
  /**
   * Entry point to the tests
   *
   * @param argv The arguments to the test
   */
  public static void main(String[] argv) {
    TestUtils utils = new TestUtils();
    utils.start();
  }
}
TOP

Related Classes of org.newdawn.slick.tests.TestUtils

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.