[changed] Game and Screen a little. Still need to make more use of them to be sure I'm happy.
[added] gdx-twl Layout class to make DialogLayout less verbose.
[added] TWl class to make using TWL much easier.
import com.badlogic.gdx.graphics.Pixmap;\r
import com.badlogic.gdx.graphics.Texture;\r
import com.badlogic.gdx.utils.GdxRuntimeException;\r
+import com.badlogic.gdx.utils.MathUtils;\r
\r
/**\r
* An implementation of {@link Texture} for Android\r
return (Bitmap)pixmap.getNativePixmap();\r
}\r
\r
- private static boolean isPowerOfTwo (int value) {\r
- return ((value != 0) && (value & (value - 1)) == 0);\r
- }\r
-\r
private void buildMipmap () {\r
Bitmap obitmap = null;\r
if (file != null)\r
int width = bitmap.getWidth();\r
Log.d("texture", "creating texture mipmaps: " + bitmap.getWidth() + ", " + bitmap.getHeight());\r
\r
- if (!isPowerOfTwo(bitmap.getWidth()) || !isPowerOfTwo(bitmap.getHeight()))\r
+ if (!MathUtils.isPowerOfTwo(bitmap.getWidth()) || !MathUtils.isPowerOfTwo(bitmap.getHeight()))\r
throw new GdxRuntimeException("Dimensions have to be a power of two");\r
\r
while (height >= 1 || width >= 1 && level < 4) {\r
package com.badlogic.gdx.twl.tests;\r
\r
import com.badlogic.gdx.ApplicationListener;\r
-import com.badlogic.gdx.Gdx;\r
import com.badlogic.gdx.Files.FileType;\r
+import com.badlogic.gdx.Gdx;\r
+import com.badlogic.gdx.InputMultiplexer;\r
+import com.badlogic.gdx.InputProcessor;\r
import com.badlogic.gdx.graphics.GL10;\r
-import com.badlogic.gdx.twl.renderer.TwlInputProcessor;\r
-import com.badlogic.gdx.twl.renderer.TwlRenderer;\r
+import com.badlogic.gdx.twl.Layout;\r
+import com.badlogic.gdx.twl.TWL;\r
\r
import de.matthiasmann.twl.Button;\r
-import de.matthiasmann.twl.DialogLayout;\r
import de.matthiasmann.twl.FPSCounter;\r
-import de.matthiasmann.twl.GUI;\r
\r
-public class ButtonTest implements ApplicationListener {\r
- GUI gui;\r
- TwlInputProcessor guiInputListener;\r
- private TwlRenderer twl;\r
+public class ButtonTest implements ApplicationListener, InputProcessor {\r
+ private TWL twl;\r
+ private InputMultiplexer input = new InputMultiplexer();\r
\r
@Override public void create () {\r
- if (gui != null) return;\r
-\r
Button button = new Button("Click Me");\r
FPSCounter fpsCounter = new FPSCounter(4, 2);\r
\r
- DialogLayout layout = new DialogLayout();\r
- layout.setTheme("");\r
- layout.setHorizontalGroup(layout.createParallelGroup().addWidgets(button, fpsCounter));\r
- layout.setVerticalGroup(layout.createSequentialGroup().addWidget(button).addGap(5).addWidget(fpsCounter).addGap(5));\r
+ Layout layout = new Layout();\r
+ layout.horizontal().sequence(0).parallel(button, fpsCounter).end().gap();\r
+ layout.vertical().sequence(0, button, 5, fpsCounter, 0);\r
\r
- twl = new TwlRenderer();\r
- gui = new GUI(layout, twl, null);\r
- twl.applyTheme(gui, "data/widgets.xml", FileType.Internal);\r
+ twl = new TWL("data/widgets.xml", FileType.Internal, layout);\r
\r
- guiInputListener = new TwlInputProcessor(gui);\r
+ input.addProcessor(twl);\r
+ input.addProcessor(this);\r
}\r
\r
@Override public void resize (int width, int height) {\r
- gui.setSize();\r
- twl.setSize();\r
}\r
\r
@Override public void render () {\r
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);\r
\r
- Gdx.input.processEvents(guiInputListener);\r
- gui.update();\r
+ Gdx.input.processEvents(input);\r
+ twl.render();\r
}\r
\r
@Override public void dispose () {\r
- gui.destroy();\r
+ twl.dispose();\r
}\r
\r
@Override public void pause () {\r
\r
@Override public void resume () {\r
}\r
+\r
+ public boolean keyDown (int keycode) {\r
+ return false;\r
+ }\r
+\r
+ public boolean keyUp (int keycode) {\r
+ return false;\r
+ }\r
+\r
+ public boolean keyTyped (char character) {\r
+ return false;\r
+ }\r
+\r
+ public boolean touchDown (int x, int y, int pointer) {\r
+ System.out.println("Not handled by TWL!");\r
+ return false;\r
+ }\r
+\r
+ public boolean touchUp (int x, int y, int pointer) {\r
+ return false;\r
+ }\r
+\r
+ public boolean touchDragged (int x, int y, int pointer) {\r
+ return false;\r
+ }\r
}\r
package com.badlogic.gdx.twl.tests;\r
\r
import com.badlogic.gdx.ApplicationListener;\r
-import com.badlogic.gdx.Gdx;\r
import com.badlogic.gdx.Files.FileType;\r
+import com.badlogic.gdx.Gdx;\r
import com.badlogic.gdx.graphics.GL10;\r
-import com.badlogic.gdx.twl.renderer.TwlInputProcessor;\r
-import com.badlogic.gdx.twl.renderer.TwlRenderer;\r
+import com.badlogic.gdx.twl.Layout;\r
+import com.badlogic.gdx.twl.TWL;\r
\r
import de.matthiasmann.twl.DialogLayout;\r
import de.matthiasmann.twl.FPSCounter;\r
-import de.matthiasmann.twl.GUI;\r
import de.matthiasmann.twl.ScrollPane;\r
import de.matthiasmann.twl.TextArea;\r
import de.matthiasmann.twl.Timer;\r
import de.matthiasmann.twl.textarea.HTMLTextAreaModel;\r
import de.matthiasmann.twl.textarea.Style;\r
import de.matthiasmann.twl.textarea.StyleAttribute;\r
-import de.matthiasmann.twl.textarea.Value;\r
import de.matthiasmann.twl.textarea.TextAreaModel.Element;\r
+import de.matthiasmann.twl.textarea.Value;\r
\r
public class TextAreaTest implements ApplicationListener {\r
- GUI gui;\r
- TwlRenderer twl;\r
- TwlInputProcessor guiInputListener;\r
+ TWL twl;\r
\r
@Override public void create () {\r
- if (gui != null) return;\r
-\r
final HTMLTextAreaModel htmlText = new HTMLTextAreaModel();\r
TextArea textArea = new TextArea(htmlText);\r
htmlText\r
scrollPane.setFixed(ScrollPane.Fixed.HORIZONTAL);\r
FPSCounter fpsCounter = new FPSCounter(4, 2);\r
\r
- DialogLayout layout = new DialogLayout();\r
- layout.setTheme("");\r
- layout.setHorizontalGroup(layout.createParallelGroup().addWidgets(scrollPane, fpsCounter));\r
- layout.setVerticalGroup(layout.createSequentialGroup().addWidget(scrollPane).addGap(5).addWidget(fpsCounter).addGap(5));\r
+ Layout layout = new Layout();\r
+ layout.horizontal().parallel(scrollPane, fpsCounter);\r
+ layout.vertical().sequence(scrollPane, 5, fpsCounter, 5);\r
\r
- twl = new TwlRenderer();\r
- gui = new GUI(layout, twl, null);\r
- twl.applyTheme(gui, "data/widgets.xml", FileType.Internal);\r
+ twl = new TWL("data/widgets.xml", FileType.Internal, layout);\r
\r
textArea.addCallback(new TextArea.Callback() {\r
Timer timer;\r
public void handleLinkClicked (String href) {\r
final Element element = htmlText.getElementById("badlogic");\r
if (timer == null) {\r
- timer = gui.createTimer();\r
+ timer = twl.getGUI().createTimer();\r
timer.setDelay(32);\r
timer.setContinuous(true);\r
timer.setCallback(new Runnable() {\r
speed = -speed;\r
}\r
});\r
-\r
- guiInputListener = new TwlInputProcessor(gui);\r
}\r
\r
@Override public void resize (int width, int height) {\r
- gui.setSize();\r
- twl.setSize();\r
}\r
\r
@Override public void render () {\r
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);\r
- Gdx.input.processEvents(guiInputListener);\r
- gui.update();\r
+ Gdx.input.processEvents(twl);\r
+ twl.render();\r
}\r
\r
@Override public void dispose () {\r
- gui.destroy();\r
+ twl.dispose();\r
}\r
\r
@Override public void pause () {\r
--- /dev/null
+\r
+package com.badlogic.gdx.twl;\r
+\r
+import de.matthiasmann.twl.DialogLayout;\r
+import de.matthiasmann.twl.Widget;\r
+\r
+public class Layout extends DialogLayout {\r
+ public Layout () {\r
+ setTheme("");\r
+ }\r
+\r
+ public Direction horizontal () {\r
+ return new Direction(true);\r
+ }\r
+\r
+ public Direction vertical () {\r
+ return new Direction(false);\r
+ }\r
+\r
+ public class Direction {\r
+ private final boolean horizontal;\r
+\r
+ Direction (boolean horizontal) {\r
+ this.horizontal = horizontal;\r
+ }\r
+\r
+ public Group sequence (Object... widgets) {\r
+ DialogLayout.Group dialogGroup = createSequentialGroup();\r
+ if (horizontal)\r
+ setHorizontalGroup(dialogGroup);\r
+ else\r
+ setVerticalGroup(dialogGroup);\r
+ return new Group(null, dialogGroup).add(widgets);\r
+ }\r
+\r
+ public Group parallel (Object... widgets) {\r
+ DialogLayout.Group dialogGroup = createParallelGroup();\r
+ if (horizontal)\r
+ setHorizontalGroup(dialogGroup);\r
+ else\r
+ setVerticalGroup(dialogGroup);\r
+ return new Group(null, dialogGroup).add(widgets);\r
+ }\r
+\r
+ public class Group {\r
+ private final Group parent;\r
+ private final DialogLayout.Group dialogGroup;\r
+\r
+ Group (Group parent, DialogLayout.Group dialogGroup) {\r
+ this.parent = parent;\r
+ this.dialogGroup = dialogGroup;\r
+ }\r
+\r
+ public Group sequence (Object... widgets) {\r
+ DialogLayout.Group dialogGroup = createSequentialGroup();\r
+ this.dialogGroup.addGroup(dialogGroup);\r
+ return new Group(this, dialogGroup).add(widgets);\r
+ }\r
+\r
+ public Group parallel (Object... widgets) {\r
+ DialogLayout.Group dialogGroup = createParallelGroup();\r
+ this.dialogGroup.addGroup(dialogGroup);\r
+ return new Group(this, dialogGroup).add(widgets);\r
+ }\r
+\r
+ public Group add (Object... widgets) {\r
+ for (int i = 0, n = widgets.length; i < n; i++) {\r
+ Object object = widgets[i];\r
+ if (object instanceof Integer) {\r
+ int size = (Integer)object;\r
+ if (size == 0)\r
+ dialogGroup.addGap();\r
+ else\r
+ dialogGroup.addGap(size);\r
+ } else\r
+ dialogGroup.addWidget((Widget)object);\r
+ }\r
+ return this;\r
+ }\r
+\r
+ public Group add (String gapName, Widget... widgets) {\r
+ dialogGroup.addWidgetsWithGap(gapName, widgets);\r
+ return this;\r
+ }\r
+\r
+ public Group gap () {\r
+ dialogGroup.addGap();\r
+ return this;\r
+ }\r
+\r
+ public Group gap (int size) {\r
+ dialogGroup.addGap(size);\r
+ return this;\r
+ }\r
+\r
+ public Group gap (int min, int pref, int max) {\r
+ dialogGroup.addGap(min, pref, max);\r
+ return this;\r
+ }\r
+\r
+ public Group gap (String name) {\r
+ dialogGroup.addGap(name);\r
+ return this;\r
+ }\r
+\r
+ public Group defaulGap () {\r
+ dialogGroup.addDefaultGap();\r
+ return this;\r
+ }\r
+\r
+ public Group minGap (int size) {\r
+ dialogGroup.addMinGap(size);\r
+ return this;\r
+ }\r
+\r
+ public Group end () {\r
+ return parent;\r
+ }\r
+ }\r
+ }\r
+}\r
\r
-package com.badlogic.gdx.twl.renderer;\r
+package com.badlogic.gdx.twl;\r
\r
+import java.io.File;\r
+import java.io.IOException;\r
+import java.io.InputStream;\r
+import java.net.MalformedURLException;\r
+import java.net.URL;\r
+import java.net.URLConnection;\r
+import java.net.URLStreamHandler;\r
+\r
+import com.badlogic.gdx.Files.FileType;\r
+import com.badlogic.gdx.Gdx;\r
import com.badlogic.gdx.Input;\r
import com.badlogic.gdx.InputProcessor;\r
+import com.badlogic.gdx.files.FileHandle;\r
+import com.badlogic.gdx.twl.renderer.GdxRenderer;\r
+import com.badlogic.gdx.utils.GdxRuntimeException;\r
\r
import de.matthiasmann.twl.Event;\r
import de.matthiasmann.twl.GUI;\r
+import de.matthiasmann.twl.Widget;\r
+import de.matthiasmann.twl.theme.ThemeManager;\r
\r
-/**\r
- * @author Nathan Sweet <misc@n4te.com>\r
- */\r
-public class TwlInputProcessor implements InputProcessor {\r
+public class TWL implements InputProcessor {\r
+ private final GdxRenderer renderer = new GdxRenderer();\r
private final GUI gui;\r
\r
- public TwlInputProcessor (GUI gui) {\r
- this.gui = gui;\r
+ public TWL (String themeFile, FileType fileType, Widget widget) {\r
+ this(themeFile, fileType);\r
+ setWidget(widget);\r
+ }\r
+\r
+ public TWL (String themeFile, FileType fileType) {\r
+ Widget root = new Widget() {\r
+ protected void layout () {\r
+ layoutChildrenFullInnerArea();\r
+ }\r
+ };\r
+ root.setTheme("");\r
+\r
+ gui = new GUI(root, renderer, null);\r
+ try {\r
+ gui.applyTheme(ThemeManager.createThemeManager(getThemeURL(themeFile, fileType), renderer));\r
+ } catch (IOException ex) {\r
+ throw new GdxRuntimeException("Error loading theme: " + themeFile + " (" + fileType + ")", ex);\r
+ }\r
+ }\r
+\r
+ public GdxRenderer getRenderer () {\r
+ return renderer;\r
+ }\r
+\r
+ public GUI getGUI () {\r
+ return gui;\r
+ }\r
+\r
+ public void setWidget (Widget widget) {\r
+ Widget root = gui.getRootPane();\r
+ root.removeAllChildren();\r
+ root.add(widget);\r
+ }\r
+\r
+ public void clear () {\r
+ gui.getRootPane().removeAllChildren();\r
+ }\r
+\r
+ public void render () {\r
+ GUI gui = this.gui;\r
+ int viewWidth = Gdx.graphics.getWidth();\r
+ int viewHeight = Gdx.graphics.getHeight();\r
+ if (renderer.getWidth() != viewWidth || renderer.getHeight() != viewHeight) {\r
+ renderer.setSize(viewWidth, viewHeight);\r
+ gui.setSize(viewWidth, viewHeight);\r
+ }\r
+ gui.updateTime();\r
+ gui.handleKeyRepeat();\r
+ gui.handleTooltips();\r
+ gui.updateTimers();\r
+ gui.invokeRunables();\r
+ gui.validateLayout();\r
+ gui.draw();\r
}\r
\r
public boolean keyDown (int keycode) {\r
return gui.handleMouse(x, y, -1, true);\r
}\r
\r
+ public void dispose () {\r
+ gui.destroy();\r
+ renderer.dispose();\r
+ }\r
+\r
static public int getTwlKeyCode (int gdxKeyCode) {\r
if (gdxKeyCode == Input.Keys.KEYCODE_0) return Event.KEY_0;\r
if (gdxKeyCode == Input.Keys.KEYCODE_1) return Event.KEY_1;\r
if (gdxKeyCode == Input.Keys.KEYCODE_TAB) return Event.KEY_TAB;\r
return Event.KEY_NONE;\r
}\r
+\r
+ static public URL getThemeURL (String themeFile, final FileType fileType) throws MalformedURLException {\r
+ File file = new File(themeFile);\r
+ final File themeRoot = file.getParentFile();\r
+ return new URL("gdx-twl", "local", 80, file.getName(), new URLStreamHandler() {\r
+ protected URLConnection openConnection (URL url) throws IOException {\r
+ final String path = new File(themeRoot, url.getPath()).getPath();\r
+ final FileHandle fileHandle = Gdx.files.getFileHandle(path, fileType);\r
+ return new URLConnection(url) {\r
+ public void connect () {\r
+ }\r
+\r
+ public Object getContent () {\r
+ return fileHandle;\r
+ }\r
+\r
+ public InputStream getInputStream () {\r
+ if (!path.endsWith(".xml")) return null; // Only theme files are loaded through the URL.\r
+ return fileHandle.readFile();\r
+ }\r
+ };\r
+ }\r
+ });\r
+ }\r
}\r
* @author Nathan Sweet <misc@n4te.com>
*/
class GdxCacheContext implements CacheContext {
- final TwlRenderer renderer;
+ final GdxRenderer renderer;
private final HashMap<String, GdxTexture> textures = new HashMap();
private final HashMap<String, BitmapFont> fonts = new HashMap();
private boolean valid = true;
- GdxCacheContext (TwlRenderer renderer) {
+ GdxCacheContext (GdxRenderer renderer) {
this.renderer = renderer;
}
class GdxFont implements Font {
static private final HAlignment[] gdxAlignment = HAlignment.values();
- final TwlRenderer renderer;
+ final GdxRenderer renderer;
final BitmapFont bitmapFont;
private final FontState[] fontStates;
private final int yOffset;
- public GdxFont (TwlRenderer renderer, BitmapFont bitmapFont, Map<String, String> params, Collection<FontParameter> condParams) {
+ public GdxFont (GdxRenderer renderer, BitmapFont bitmapFont, Map<String, String> params, Collection<FontParameter> condParams) {
this.bitmapFont = bitmapFont;
this.renderer = renderer;
yOffset = bitmapFont.getLineHeight() - bitmapFont.getBaseLine();
* @author Matthias Mann\r
*/\r
class GdxImage implements Image, SupportsDrawRepeat {\r
- private final TwlRenderer renderer;\r
+ private final GdxRenderer renderer;\r
private final Sprite sprite;\r
private final Color tintColor;\r
private final int width;\r
private final int height;\r
private final boolean tile;\r
\r
- public GdxImage (TwlRenderer renderer, Texture texture, int srcX, int srcY, int srcWidth, int srcHeight, Color color,\r
+ public GdxImage (GdxRenderer renderer, Texture texture, int srcX, int srcY, int srcWidth, int srcHeight, Color color,\r
boolean tile) {\r
this.renderer = renderer;\r
width = Math.abs(srcWidth);\r
* @author Nathan Sweet <misc@n4te.com>\r
* @author Matthias Mann\r
*/\r
-public class TwlRenderer implements Renderer {\r
+public class GdxRenderer implements Renderer {\r
private int mouseX, mouseY;\r
private GdxCacheContext cacheContext;\r
private boolean hasScissor;\r
private TintStack tintStack = tintStateRoot;\r
private final Color tempColor = new Color(1, 1, 1, 1);\r
private boolean rendering;\r
+ private int width, height;\r
final SpriteBatch spriteBatch = new SpriteBatch();\r
\r
- public TwlRenderer () {\r
+ public GdxRenderer () {\r
spriteBatch.getProjectionMatrix().setToOrtho(0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), 0, 0, 1);\r
+\r
+ Widget root = new Widget() {\r
+ protected void layout () {\r
+ layoutChildrenFullInnerArea();\r
+ }\r
+ };\r
+ root.setTheme("");\r
+ new GUI(root, this, null);\r
}\r
\r
public GdxCacheContext createNewCacheContext () {\r
}\r
\r
public long getTimeMillis () {\r
- return System.currentTimeMillis();\r
+ return System.nanoTime() / 1000000;\r
}\r
\r
public void startRenderering () {\r
return getActiveCacheContext().loadTexture(url);\r
}\r
\r
+ public int getWidth () {\r
+ return width;\r
+ }\r
+\r
public int getHeight () {\r
- return Gdx.graphics.getHeight();\r
+ return height;\r
}\r
\r
- public int getWidth () {\r
- return Gdx.graphics.getWidth();\r
+ public void setSize (int width, int height) {\r
+ this.width = width;\r
+ this.height = height;\r
+ spriteBatch.getProjectionMatrix().setToOrtho(0, width, height, 0, 0, 1);\r
}\r
\r
public LineRenderer getLineRenderer () {\r
- return null;\r
+ return null; // Unsupported.\r
}\r
\r
public DynamicImage createDynamicImage (int width, int height) {\r
- return null;\r
+ return null; // Unsupported.\r
}\r
\r
public void setCursor (MouseCursor cursor) {\r
return tempColor;\r
}\r
\r
+ public void dispose () {\r
+ if (cacheContext != null) {\r
+ cacheContext.destroy();\r
+ cacheContext = null;\r
+ }\r
+ spriteBatch.dispose();\r
+ }\r
+\r
static private class TintStack extends Color {\r
final TintStack previous;\r
\r
}\r
}\r
\r
- public void setSize () {\r
- spriteBatch.getProjectionMatrix().setToOrtho(0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), 0, 0, 1);\r
- }\r
-\r
public void applyTheme (GUI gui, String themeFile, final FileType fileType) {\r
File file = new File(themeFile);\r
final File themeRoot = file.getParentFile();\r
* @author Nathan Sweet <misc@n4te.com>
*/
class GdxTexture implements Texture, Resource {
- private final TwlRenderer renderer;
+ private final GdxRenderer renderer;
private final com.badlogic.gdx.graphics.Texture texture;
- public GdxTexture (TwlRenderer renderer, FileHandle textureFile) {
+ public GdxTexture (GdxRenderer renderer, FileHandle textureFile) {
this.renderer = renderer;
texture = Gdx.graphics.newTexture(textureFile, TextureFilter.Linear, TextureFilter.Linear, TextureWrap.ClampToEdge,
TextureWrap.ClampToEdge);
+\r
package com.badlogic.gdx;\r
\r
public abstract class Game implements ApplicationListener {\r
Screen screen;\r
- \r
- /**\r
- * Starts the game and returns the start {@link Screen}. This\r
- * will be called in the rendering thread so you can do anything\r
- * you like.\r
- * \r
- * @return the start screen. \r
- */\r
- public abstract Screen start();\r
-\r
- @Override\r
- public void create() {\r
- screen = start();\r
- }\r
\r
- @Override\r
- public void dispose() { \r
- screen.dispose();\r
+ @Override public void dispose () {\r
+ if (screen != null) screen.hide();\r
}\r
\r
- @Override\r
- public void pause() {\r
- screen.pause();\r
+ @Override public void pause () {\r
+ if (screen != null) screen.pause();\r
}\r
\r
- @Override\r
- public void render() {\r
- screen.render(Gdx.graphics.getDeltaTime());\r
+ @Override public void resume () {\r
+ if (screen != null) screen.resume();\r
}\r
\r
- @Override\r
- public void resize(int width, int height) {\r
- screen.resize(width,height);\r
+ @Override public void render () {\r
+ if (screen != null) screen.render(Gdx.graphics.getDeltaTime());\r
}\r
\r
- @Override\r
- public void resume() {\r
- screen.resume(); \r
+ @Override public void resize (int width, int height) {\r
+ if (screen != null) screen.resize(width, height);\r
}\r
- \r
- public void setScreen(Screen screen) {\r
- this.screen.dispose();\r
+\r
+ public void setScreen (Screen screen) {\r
+ if (this.screen != null) this.screen.hide();\r
this.screen = screen;\r
+ screen.show();\r
}\r
}\r
--- /dev/null
+\r
+package com.badlogic.gdx;\r
+\r
+import java.util.ArrayList;\r
+\r
+public class InputMultiplexer implements InputProcessor {\r
+ private ArrayList<InputProcessor> processors = new ArrayList(4);\r
+\r
+ public void addProcessor (InputProcessor processor) {\r
+ processors.add(processor);\r
+ }\r
+\r
+ public boolean keyDown (int keycode) {\r
+ for (int i = 0, n = processors.size(); i < n; i++)\r
+ if (processors.get(i).keyDown(keycode)) return true;\r
+ return false;\r
+ }\r
+\r
+ public boolean keyUp (int keycode) {\r
+ for (int i = 0, n = processors.size(); i < n; i++)\r
+ if (processors.get(i).keyUp(keycode)) return true;\r
+ return false;\r
+ }\r
+\r
+ public boolean keyTyped (char character) {\r
+ for (int i = 0, n = processors.size(); i < n; i++)\r
+ if (processors.get(i).keyTyped(character)) return true;\r
+ return false;\r
+ }\r
+\r
+ public boolean touchDown (int x, int y, int pointer) {\r
+ for (int i = 0, n = processors.size(); i < n; i++)\r
+ if (processors.get(i).touchDown(x, y, pointer)) return true;\r
+ return false;\r
+ }\r
+\r
+ public boolean touchUp (int x, int y, int pointer) {\r
+ for (int i = 0, n = processors.size(); i < n; i++)\r
+ if (processors.get(i).touchUp(x, y, pointer)) return true;\r
+ return false;\r
+ }\r
+\r
+ public boolean touchDragged (int x, int y, int pointer) {\r
+ for (int i = 0, n = processors.size(); i < n; i++)\r
+ if (processors.get(i).touchDragged(x, y, pointer)) return true;\r
+ return false;\r
+ }\r
+}\r
+\r
package com.badlogic.gdx;\r
\r
public abstract class Screen {\r
- final Game game;\r
- \r
- public Screen(Game game) {\r
+ public final Game game;\r
+\r
+ public Screen (Game game) {\r
this.game = game;\r
}\r
- public abstract void resize(int width, int height);\r
- \r
- public abstract void render(float delta);\r
- \r
- public abstract void pause();\r
- \r
- public abstract void resume();\r
- \r
- public abstract void dispose();\r
+\r
+ public abstract void render (float delta);\r
+\r
+ public void resize (int width, int height) {\r
+ }\r
+\r
+ public void show () {\r
+ }\r
+\r
+ public void hide () {\r
+ }\r
+\r
+ public void pause () {\r
+ }\r
+\r
+ public void resume () {\r
+ }\r
+\r
+ public void dispose () {\r
+ }\r
}\r