/******************************************************************************* * Copyright 2011 See AUTHORS file. * * 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.badlogic.gdx.tests.gwt; import java.util.Arrays; import java.util.Comparator; import com.badlogic.gdx.Application; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Input; import com.badlogic.gdx.InputAdapter; import com.badlogic.gdx.InputMultiplexer; import com.badlogic.gdx.InputProcessor; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.GL20; import com.badlogic.gdx.graphics.g2d.BitmapFont; import com.badlogic.gdx.scenes.scene2d.InputEvent; import com.badlogic.gdx.scenes.scene2d.Stage; import com.badlogic.gdx.scenes.scene2d.ui.Label; import com.badlogic.gdx.scenes.scene2d.ui.Label.LabelStyle; import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane; import com.badlogic.gdx.scenes.scene2d.ui.Skin; import com.badlogic.gdx.scenes.scene2d.ui.Table; import com.badlogic.gdx.scenes.scene2d.ui.TextButton; import com.badlogic.gdx.scenes.scene2d.utils.ClickListener; import com.badlogic.gdx.tests.AccelerometerTest; import com.badlogic.gdx.tests.ActionSequenceTest; import com.badlogic.gdx.tests.ActionTest; import com.badlogic.gdx.tests.AlphaTest; import com.badlogic.gdx.tests.AnimationTest; import com.badlogic.gdx.tests.AnnotationTest; import com.badlogic.gdx.tests.AssetManagerTest; import com.badlogic.gdx.tests.AtlasIssueTest; import com.badlogic.gdx.tests.BitmapFontAlignmentTest; import com.badlogic.gdx.tests.BitmapFontFlipTest; import com.badlogic.gdx.tests.BitmapFontMetricsTest; import com.badlogic.gdx.tests.BitmapFontTest; import com.badlogic.gdx.tests.BlitTest; import com.badlogic.gdx.tests.Box2DCharacterControllerTest; import com.badlogic.gdx.tests.Box2DTest; import com.badlogic.gdx.tests.Box2DTestCollection; import com.badlogic.gdx.tests.BufferUtilsTest; import com.badlogic.gdx.tests.ColorTest; import com.badlogic.gdx.tests.ComplexActionTest; import com.badlogic.gdx.tests.CustomShaderSpriteBatchTest; import com.badlogic.gdx.tests.DecalTest; import com.badlogic.gdx.tests.EdgeDetectionTest; import com.badlogic.gdx.tests.FilterPerformanceTest; import com.badlogic.gdx.tests.FrameBufferTest; import com.badlogic.gdx.tests.FramebufferToTextureTest; import com.badlogic.gdx.tests.GLProfilerErrorTest; import com.badlogic.gdx.tests.GWTLossyPremultipliedAlphaTest; import com.badlogic.gdx.tests.GestureDetectorTest; import com.badlogic.gdx.tests.GroupCullingTest; import com.badlogic.gdx.tests.GroupFadeTest; import com.badlogic.gdx.tests.I18NSimpleMessageTest; import com.badlogic.gdx.tests.ImageScaleTest; import com.badlogic.gdx.tests.ImageTest; import com.badlogic.gdx.tests.IndexBufferObjectShaderTest; import com.badlogic.gdx.tests.IntegerBitmapFontTest; import com.badlogic.gdx.tests.InterpolationTest; import com.badlogic.gdx.tests.InverseKinematicsTest; import com.badlogic.gdx.tests.IsometricTileTest; import com.badlogic.gdx.tests.KinematicBodyTest; import com.badlogic.gdx.tests.LabelScaleTest; import com.badlogic.gdx.tests.LabelTest; import com.badlogic.gdx.tests.LifeCycleTest; import com.badlogic.gdx.tests.MeshShaderTest; import com.badlogic.gdx.tests.MipMapTest; import com.badlogic.gdx.tests.MultitouchTest; import com.badlogic.gdx.tests.MusicTest; import com.badlogic.gdx.tests.NoncontinuousRenderingTest; import com.badlogic.gdx.tests.ParallaxTest; import com.badlogic.gdx.tests.ParticleEmitterTest; import com.badlogic.gdx.tests.PixelsPerInchTest; import com.badlogic.gdx.tests.ProjectiveTextureTest; import com.badlogic.gdx.tests.ReflectionCorrectnessTest; import com.badlogic.gdx.tests.ReflectionTest; import com.badlogic.gdx.tests.RotationTest; import com.badlogic.gdx.tests.ShapeRendererTest; import com.badlogic.gdx.tests.SimpleAnimationTest; import com.badlogic.gdx.tests.SimpleDecalTest; import com.badlogic.gdx.tests.SimpleStageCullingTest; import com.badlogic.gdx.tests.SortedSpriteTest; import com.badlogic.gdx.tests.SoundTest; import com.badlogic.gdx.tests.SpriteBatchShaderTest; import com.badlogic.gdx.tests.SpriteCacheOffsetTest; import com.badlogic.gdx.tests.SpriteCacheTest; import com.badlogic.gdx.tests.StageTest; import com.badlogic.gdx.tests.TableTest; import com.badlogic.gdx.tests.TextButtonTest; import com.badlogic.gdx.tests.TextureAtlasTest; import com.badlogic.gdx.tests.TiledMapAtlasAssetManagerTest; import com.badlogic.gdx.tests.TimeUtilsTest; import com.badlogic.gdx.tests.UITest; import com.badlogic.gdx.tests.VertexBufferObjectShaderTest; import com.badlogic.gdx.tests.YDownTest; import com.badlogic.gdx.tests.conformance.DisplayModeTest; import com.badlogic.gdx.tests.g3d.ModelCacheTest; import com.badlogic.gdx.tests.g3d.ShadowMappingTest; import com.badlogic.gdx.tests.superkoalio.SuperKoalio; import com.badlogic.gdx.tests.utils.GdxTest; public class GwtTestWrapper extends GdxTest { Stage ui; Table container; Skin skin; BitmapFont font; GdxTest test; boolean dispose = false; @Override public void create () { Gdx.app.setLogLevel(Application.LOG_DEBUG); Gdx.app.log("GdxTestGwt", "Setting up for " + tests.length + " tests."); ui = new Stage(); skin = new Skin(Gdx.files.internal("data/uiskin.json")); font = new BitmapFont(Gdx.files.internal("data/arial-15.fnt"), false); container = new Table(); ui.addActor(container); container.debug(); Table table = new Table(); ScrollPane scroll = new ScrollPane(table); container.add(scroll).expand().fill(); table.pad(10).defaults().expandX().space(4); Arrays.sort(tests, new Comparator<Instancer>() { @Override public int compare (Instancer o1, Instancer o2) { return o1.instance().getClass().getName().compareTo(o2.instance().getClass().getName()); } }); for (final Instancer instancer : tests) { table.row(); TextButton button = new TextButton(instancer.instance().getClass().getName(), skin); button.addListener(new ClickListener() { @Override public void clicked (InputEvent event, float x, float y) { ((InputWrapper)Gdx.input).multiplexer.removeProcessor(ui); test = instancer.instance(); Gdx.app.log("GdxTestGwt", "Clicked on " + test.getClass().getName()); test.create(); test.resize(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); } }); table.add(button).expandX().fillX(); } container.row(); container.add(new Label("Click on a test to start it, press ESC to close it.", new LabelStyle(font, Color.WHITE))).pad(5, 5, 5, 5); Gdx.input = new InputWrapper(Gdx.input) { @Override public boolean keyUp (int keycode) { if (keycode == Keys.ESCAPE) { if (test != null) { Gdx.app.log("GdxTestGwt", "Exiting current test."); dispose = true; } } return false; } @Override public boolean touchDown (int screenX, int screenY, int pointer, int button) { if (screenX < Gdx.graphics.getWidth() / 10.0 && screenY < Gdx.graphics.getHeight() / 10.0) { if (test != null) { dispose = true; } } return false; } }; ((InputWrapper)Gdx.input).multiplexer.addProcessor(ui); Gdx.app.log("GdxTestGwt", "Test picker UI setup complete."); } public void render () { if (test == null) { Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); Gdx.gl.glClearColor(0, 0, 0, 0); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); ui.act(Gdx.graphics.getDeltaTime()); ui.draw(); } else { if (dispose) { test.pause(); test.dispose(); test = null; Gdx.graphics.setVSync(true); InputWrapper wrapper = ((InputWrapper)Gdx.input); wrapper.multiplexer.addProcessor(ui); wrapper.multiplexer.removeProcessor(wrapper.lastProcessor); wrapper.lastProcessor = null; dispose = false; } else { test.render(); } } } public void resize (int width, int height) { ui.getViewport().update(width, height, true); container.setSize(width, height); if (test != null) { test.resize(width, height); } } class InputWrapper extends InputAdapter implements Input { Input input; InputProcessor lastProcessor; InputMultiplexer multiplexer; public InputWrapper (Input input) { this.input = input; this.multiplexer = new InputMultiplexer(); this.multiplexer.addProcessor(this); input.setInputProcessor(multiplexer); } @Override public float getAccelerometerX () { return input.getAccelerometerX(); } @Override public float getAccelerometerY () { return input.getAccelerometerY(); } @Override public float getAccelerometerZ () { return input.getAccelerometerZ(); } @Override public float getGyroscopeX () { // TODO Auto-generated method stub return input.getGyroscopeX(); } @Override public float getGyroscopeY () { // TODO Auto-generated method stub return input.getGyroscopeY(); } @Override public float getGyroscopeZ () { // TODO Auto-generated method stub return input.getGyroscopeZ(); } @Override public int getX () { return input.getX(); } @Override public int getX (int pointer) { return input.getX(pointer); } @Override public int getDeltaX () { return input.getDeltaX(); } @Override public int getDeltaX (int pointer) { return input.getDeltaX(pointer); } @Override public int getY () { return input.getY(); } @Override public int getY (int pointer) { return input.getY(pointer); } @Override public int getDeltaY () { return input.getDeltaY(); } @Override public int getDeltaY (int pointer) { return input.getDeltaY(pointer); } @Override public boolean isTouched () { return input.isTouched(); } @Override public boolean justTouched () { return input.justTouched(); } @Override public boolean isTouched (int pointer) { return input.isTouched(pointer); } @Override public boolean isButtonPressed (int button) { return input.isButtonPressed(button); } @Override public boolean isKeyPressed (int key) { return input.isKeyPressed(key); } @Override public boolean isKeyJustPressed (int key) { return input.isKeyJustPressed(key); } @Override public void getTextInput (TextInputListener listener, String title, String text, String hint) { input.getTextInput(listener, title, text, hint); } @Override public void setOnscreenKeyboardVisible (boolean visible) { input.setOnscreenKeyboardVisible(visible); } @Override public void vibrate (int milliseconds) { input.vibrate(milliseconds); } @Override public void vibrate (long[] pattern, int repeat) { input.vibrate(pattern, repeat); } @Override public void cancelVibrate () { input.cancelVibrate(); } @Override public float getAzimuth () { return input.getAzimuth(); } @Override public float getPitch () { return input.getPitch(); } @Override public float getRoll () { return input.getRoll(); } @Override public void getRotationMatrix (float[] matrix) { input.getRotationMatrix(matrix); } @Override public long getCurrentEventTime () { return input.getCurrentEventTime(); } @Override public void setCatchBackKey (boolean catchBack) { input.setCatchBackKey(catchBack); } @Override public boolean isCatchBackKey() { return input.isCatchBackKey(); } @Override public void setCatchMenuKey (boolean catchMenu) { input.setCatchMenuKey(catchMenu); } @Override public boolean isCatchMenuKey () { return input.isCatchMenuKey(); } @Override public void setInputProcessor (InputProcessor processor) { multiplexer.removeProcessor(lastProcessor); multiplexer.addProcessor(processor); lastProcessor = processor; } @Override public InputProcessor getInputProcessor () { return input.getInputProcessor(); } @Override public boolean isPeripheralAvailable (Peripheral peripheral) { return input.isPeripheralAvailable(peripheral); } @Override public int getRotation () { return input.getRotation(); } @Override public Orientation getNativeOrientation () { return input.getNativeOrientation(); } @Override public void setCursorCatched (boolean catched) { input.setCursorCatched(catched); } @Override public boolean isCursorCatched () { return input.isCursorCatched(); } @Override public void setCursorPosition (int x, int y) { setCursorPosition(x, y); } } interface Instancer { public GdxTest instance (); } Instancer[] tests = {new Instancer() { public GdxTest instance () { return new AccelerometerTest(); } }, new Instancer() { public GdxTest instance () { return new ActionTest(); } }, new Instancer() { public GdxTest instance () { return new ActionSequenceTest(); } }, new Instancer() { public GdxTest instance () { return new AlphaTest(); } }, new Instancer() { public GdxTest instance () { return new AnimationTest(); } }, new Instancer() { public GdxTest instance () { return new AnnotationTest(); } }, new Instancer() { public GdxTest instance () { return new AssetManagerTest(); } }, new Instancer() { public GdxTest instance () { return new AtlasIssueTest(); } }, new Instancer() { public GdxTest instance () { return new BitmapFontAlignmentTest(); } }, new Instancer() { public GdxTest instance () { return new BitmapFontFlipTest(); } }, new Instancer() { public GdxTest instance () { return new BitmapFontTest(); } }, new Instancer() { public GdxTest instance () { return new BitmapFontMetricsTest(); } }, new Instancer() { public GdxTest instance () { return new BlitTest(); } }, new Instancer() { public GdxTest instance () { return new Box2DCharacterControllerTest(); } }, new Instancer() { public GdxTest instance () { return new Box2DTest(); } }, new Instancer() { public GdxTest instance () { return new Box2DTestCollection(); } }, new Instancer() { public GdxTest instance () { return new BufferUtilsTest(); } }, new Instancer() { public GdxTest instance () { return new ColorTest(); } }, new Instancer() { public GdxTest instance () { return new ComplexActionTest(); } }, new Instancer() { public GdxTest instance () { return new CustomShaderSpriteBatchTest(); } }, new Instancer() { public GdxTest instance () { return new DecalTest(); } }, new Instancer() { public GdxTest instance () { return new DisplayModeTest(); } }, new Instancer() { public GdxTest instance () { return new LabelScaleTest(); } }, new Instancer() { public GdxTest instance () { return new EdgeDetectionTest(); } }, new Instancer() { public GdxTest instance () { return new FilterPerformanceTest(); } }, // new Instancer() {public GdxTest instance(){return new FlickScrollPaneTest();}}, // FIXME this messes up stuff, why? new Instancer() { public GdxTest instance () { return new FrameBufferTest(); } }, new Instancer() { public GdxTest instance () { return new FramebufferToTextureTest(); } }, new Instancer() { public GdxTest instance () { return new GestureDetectorTest(); } }, new Instancer() { public GdxTest instance () { return new GLProfilerErrorTest(); } }, new Instancer() { public GdxTest instance () { return new GroupCullingTest(); } }, new Instancer() { public GdxTest instance () { return new GroupFadeTest(); } }, new Instancer() { public GdxTest instance () { return new I18NSimpleMessageTest(); } }, new Instancer() { public GdxTest instance () { return new ImageScaleTest(); } }, new Instancer() { public GdxTest instance () { return new ImageTest(); } }, new Instancer() { public GdxTest instance () { return new IndexBufferObjectShaderTest(); } }, new Instancer() { public GdxTest instance () { return new IntegerBitmapFontTest(); } }, new Instancer() { public GdxTest instance () { return new InterpolationTest(); } }, new Instancer() { public GdxTest instance () { return new InverseKinematicsTest(); } }, new Instancer() { public GdxTest instance () { return new IsometricTileTest(); } }, new Instancer() { public GdxTest instance () { return new KinematicBodyTest(); } }, new Instancer() { public GdxTest instance () { return new LifeCycleTest(); } }, new Instancer() { public GdxTest instance () { return new LabelTest(); } }, // new Instancer() {public GdxTest instance(){return new MatrixJNITest();}}, // No purpose new Instancer() { public GdxTest instance () { return new MeshShaderTest(); } }, new Instancer() { public GdxTest instance () { return new MipMapTest(); } }, new Instancer() { public GdxTest instance () { return new ModelCacheTest(); } }, new Instancer() { public GdxTest instance () { return new MultitouchTest(); } }, new Instancer() { public GdxTest instance () { return new MusicTest(); } // }, new Instancer() { public GdxTest instance () { return new NoncontinuousRenderingTest(); } // FIXME doesn't compile due to the use of Thread }, new Instancer() { public GdxTest instance () { return new ParallaxTest(); } }, new Instancer() { public GdxTest instance () { return new ParticleEmitterTest(); } }, new Instancer() { public GdxTest instance () { return new PixelsPerInchTest(); } }, // new Instancer() {public GdxTest instance(){return new PixmapBlendingTest();}}, // FIXME no idea why this doesn't work new Instancer() { public GdxTest instance () { return new ProjectiveTextureTest(); } }, new Instancer() { public GdxTest instance () { return new RotationTest(); } }, new Instancer() { public GdxTest instance () { return new ReflectionCorrectnessTest(); } }, // new Instancer() {public GdxTest instance(){return new RunnablePostTest();}}, // Goes into infinite loop // new Instancer() {public GdxTest instance(){return new ScrollPaneTest();}}, // FIXME this messes up stuff, why? // new Instancer() {public GdxTest instance(){return new ShaderMultitextureTest();}}, // FIXME fucks up stuff new Instancer() { public GdxTest instance () { return new ShadowMappingTest(); } }, new Instancer() { public GdxTest instance () { return new ShapeRendererTest(); } }, new Instancer() { public GdxTest instance () { return new SimpleAnimationTest(); } }, new Instancer() { public GdxTest instance () { return new SimpleDecalTest(); } }, new Instancer() { public GdxTest instance () { return new SimpleStageCullingTest(); } }, new Instancer() { public GdxTest instance () { return new SortedSpriteTest(); } }, new Instancer() { public GdxTest instance () { return new SpriteBatchShaderTest(); } }, new Instancer() { public GdxTest instance () { return new SpriteCacheOffsetTest(); } }, new Instancer() { public GdxTest instance () { return new SpriteCacheTest(); } }, new Instancer() { public GdxTest instance () { return new SoundTest(); } }, new Instancer() { public GdxTest instance () { return new StageTest(); } }, // new Instancer() {public GdxTest instance(){return new StagePerformanceTest();}}, // FIXME borks out new Instancer() { public GdxTest instance () { return new TableTest(); } }, new Instancer() { public GdxTest instance () { return new TextButtonTest(); } }, new Instancer() { public GdxTest instance () { return new TextButtonTest(); } }, new Instancer() { public GdxTest instance () { return new TextureAtlasTest(); } }, new Instancer() { public GdxTest instance () { return new UITest(); } }, new Instancer() { public GdxTest instance () { return new VertexBufferObjectShaderTest(); } }, new Instancer() { public GdxTest instance () { return new YDownTest(); } }, new Instancer() { public GdxTest instance () { return new SuperKoalio(); } }, new Instancer() { public GdxTest instance () { return new ReflectionTest(); } }, new Instancer() { public GdxTest instance () { return new TiledMapAtlasAssetManagerTest(); } }, new Instancer() { public GdxTest instance () { return new TimeUtilsTest(); } }, new Instancer() { public GdxTest instance() { return new GWTLossyPremultipliedAlphaTest(); } }}; }