mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-03-12 14:51:51 +09:00
added sources for Slick
Former-commit-id: 1647fa32ef6894bd7db44f741f07c2f4dcdf9054 Former-commit-id: 0e5810dcfbe1fd59b13e7cabe9f1e93c5542da2d
This commit is contained in:
223
lib/slick-source/org/newdawn/slick/tests/TestUtils.java
Normal file
223
lib/slick-source/org/newdawn/slick/tests/TestUtils.java
Normal file
@@ -0,0 +1,223 @@
|
||||
package org.newdawn.slick.tests;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
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", new FileInputStream("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", new FileInputStream("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", new File("testdata/bongos.ogg").toURL());
|
||||
|
||||
// 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", new File("testdata/SMB-X.XM").toURL());
|
||||
|
||||
// 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", new FileInputStream("testdata/burp.aif"));
|
||||
|
||||
// you can play wavs by loading the complete thing into
|
||||
// a sound
|
||||
wavEffect = AudioLoader.getAudio("WAV", new FileInputStream("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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user