mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-03-12 06:41:51 +09:00
added sources for Slick
Former-commit-id: 1647fa32ef6894bd7db44f741f07c2f4dcdf9054 Former-commit-id: 0e5810dcfbe1fd59b13e7cabe9f1e93c5542da2d
This commit is contained in:
184
lib/slick-source/org/newdawn/slick/CanvasGameContainer.java
Normal file
184
lib/slick-source/org/newdawn/slick/CanvasGameContainer.java
Normal file
@@ -0,0 +1,184 @@
|
||||
package org.newdawn.slick;
|
||||
|
||||
import java.awt.Canvas;
|
||||
|
||||
import javax.swing.SwingUtilities;
|
||||
|
||||
import org.lwjgl.LWJGLException;
|
||||
import org.lwjgl.opengl.Display;
|
||||
import org.newdawn.slick.util.Log;
|
||||
|
||||
/**
|
||||
* A game container that displays the game on an AWT Canvas.
|
||||
*
|
||||
* @author kevin
|
||||
*/
|
||||
public class CanvasGameContainer extends Canvas {
|
||||
/** The actual container implementation */
|
||||
protected Container container;
|
||||
/** The game being held in this container */
|
||||
protected Game game;
|
||||
|
||||
/**
|
||||
* Create a new panel
|
||||
*
|
||||
* @param game The game being held
|
||||
* @throws SlickException Indicates a failure during creation of the container
|
||||
*/
|
||||
public CanvasGameContainer(Game game) throws SlickException {
|
||||
this(game, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new panel
|
||||
*
|
||||
* @param game The game being held
|
||||
* @param shared True if shared GL context should be enabled. This allows multiple panels
|
||||
* to share textures and other GL resources.
|
||||
* @throws SlickException Indicates a failure during creation of the container
|
||||
*/
|
||||
public CanvasGameContainer(Game game, boolean shared) throws SlickException {
|
||||
super();
|
||||
|
||||
this.game = game;
|
||||
setIgnoreRepaint(true);
|
||||
requestFocus();
|
||||
setSize(500,500);
|
||||
|
||||
container = new Container(game, shared);
|
||||
container.setForceExit(false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Start the game container rendering
|
||||
*
|
||||
* @throws SlickException Indicates a failure during game execution
|
||||
*/
|
||||
public void start() throws SlickException {
|
||||
SwingUtilities.invokeLater(new Runnable() {
|
||||
public void run() {
|
||||
try {
|
||||
Input.disableControllers();
|
||||
|
||||
try {
|
||||
Display.setParent(CanvasGameContainer.this);
|
||||
} catch (LWJGLException e) {
|
||||
throw new SlickException("Failed to setParent of canvas", e);
|
||||
}
|
||||
|
||||
container.setup();
|
||||
scheduleUpdate();
|
||||
} catch (SlickException e) {
|
||||
e.printStackTrace();
|
||||
System.exit(0);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Schedule an update on the EDT
|
||||
*/
|
||||
private void scheduleUpdate() {
|
||||
if (!isVisible()) {
|
||||
return;
|
||||
}
|
||||
|
||||
SwingUtilities.invokeLater(new Runnable() {
|
||||
public void run() {
|
||||
try {
|
||||
container.gameLoop();
|
||||
} catch (SlickException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
container.checkDimensions();
|
||||
scheduleUpdate();
|
||||
}
|
||||
});
|
||||
}
|
||||
/**
|
||||
* Dispose the container and any resources it holds
|
||||
*/
|
||||
public void dispose() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the GameContainer providing this canvas
|
||||
*
|
||||
* @return The game container providing this canvas
|
||||
*/
|
||||
public GameContainer getContainer() {
|
||||
return container;
|
||||
}
|
||||
|
||||
/**
|
||||
* A game container to provide the canvas context
|
||||
*
|
||||
* @author kevin
|
||||
*/
|
||||
private class Container extends AppGameContainer {
|
||||
/**
|
||||
* Create a new container wrapped round the game
|
||||
*
|
||||
* @param game
|
||||
* The game to be held in this container
|
||||
* @param shared True if shared GL context should be enabled. This allows multiple panels
|
||||
* to share textures and other GL resources.
|
||||
* @throws SlickException Indicates a failure to initialise
|
||||
*/
|
||||
public Container(Game game, boolean shared) throws SlickException {
|
||||
super(game, CanvasGameContainer.this.getWidth(), CanvasGameContainer.this.getHeight(), false);
|
||||
|
||||
width = CanvasGameContainer.this.getWidth();
|
||||
height = CanvasGameContainer.this.getHeight();
|
||||
|
||||
if (shared) {
|
||||
enableSharedContext();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Updated the FPS counter
|
||||
*/
|
||||
protected void updateFPS() {
|
||||
super.updateFPS();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.newdawn.slick.GameContainer#running()
|
||||
*/
|
||||
protected boolean running() {
|
||||
return super.running() && CanvasGameContainer.this.isDisplayable();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.newdawn.slick.GameContainer#getHeight()
|
||||
*/
|
||||
public int getHeight() {
|
||||
return CanvasGameContainer.this.getHeight();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.newdawn.slick.GameContainer#getWidth()
|
||||
*/
|
||||
public int getWidth() {
|
||||
return CanvasGameContainer.this.getWidth();
|
||||
}
|
||||
|
||||
/**
|
||||
* Check the dimensions of the canvas match the display
|
||||
*/
|
||||
public void checkDimensions() {
|
||||
if ((width != CanvasGameContainer.this.getWidth()) ||
|
||||
(height != CanvasGameContainer.this.getHeight())) {
|
||||
|
||||
try {
|
||||
setDisplayMode(CanvasGameContainer.this.getWidth(),
|
||||
CanvasGameContainer.this.getHeight(), false);
|
||||
} catch (SlickException e) {
|
||||
Log.error(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user