/*******************************************************************************
* 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.cookbook.samples.client;
import com.cookbook.samples.client.WebResolver;
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.cookbook.samples.*;
public class GwtSampleWrapper extends GdxSample {
Stage ui;
Table container;
Skin skin;
BitmapFont font;
GdxSample test;
boolean dispose = false;
@Override
public void create () {
Gdx.app.setLogLevel(Application.LOG_DEBUG);
Gdx.app.log("GdxSampleGwt", "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);
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("GdxSampleGwt", "Clicked on " + test.getClass().getName());
test.create();
test.setPlatformResolver(new WebResolver());
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("GdxSampleGwt", "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("GdxSampleGwt", "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);
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 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 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 void setCatchMenuKey (boolean catchMenu) {
input.setCatchMenuKey(catchMenu);
}
@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);
}
@Override
public boolean isKeyJustPressed(int key) {
return input.isKeyJustPressed(key);
}
@Override
public boolean isCatchBackKey() {
return input.isCatchBackKey();
}
@Override
public void getTextInput(TextInputListener listener, String title,
String text, String hint) {
// TODO Auto-generated method stub
}
@Override
public boolean isCatchMenuKey() {
// TODO Auto-generated method stub
return false;
}
}
interface Instancer {
public GdxSample instance ();
}
Instancer[] tests = {
new Instancer() {
public GdxSample instance () {
return new SpriteBatchSample();
}
},
new Instancer() {
public GdxSample instance () {
return new TextureAtlasSample();
}
},
new Instancer() {
public GdxSample instance () {
return new OrthographicCameraSample();
}
},
new Instancer() {
public GdxSample instance () {
return new AnimatedSpriteSample();
}
},
new Instancer() {
public GdxSample instance () {
return new ParticleEffectsSample();
}
},
new Instancer() {
public GdxSample instance () {
return new FrameBufferParticleEffectSample();
}
},
new Instancer() {
public GdxSample instance () {
return new ShapeRendererSample();
}
},
new Instancer() {
public GdxSample instance () {
return new FrameBufferSample();
}
},
new Instancer() {
public GdxSample instance () {
return new PooledEffectsSample();
}
},
new Instancer() {
public GdxSample instance () {
return new ShaderSample();
}
},
new Instancer() {
public GdxSample instance () {
return new ShaderUniformSample();
}
},
new Instancer() {
public GdxSample instance () {
return new BlurSample();
}
},
new Instancer() {
public GdxSample instance () {
return new SpriteSample();
}
},
new Instancer() {
public GdxSample instance () {
return new InputPollingSample();
}
},
new Instancer() {
public GdxSample instance () {
return new InputListeningSample();
}
},
new Instancer() {
public GdxSample instance () {
return new InputMultiplexerSample();
}
},
new Instancer() {
public GdxSample instance () {
return new GestureDetectorSample();
}
},
new Instancer() {
public GdxSample instance () {
return new GamepadSample();
}
},
new Instancer() {
public GdxSample instance () {
return new SoundEffectSample();
}
},
new Instancer() {
public GdxSample instance () {
return new MusicSample();
}
},
new Instancer() {
public GdxSample instance () {
return new InputMappingSample();
}
},
new Instancer() {
public GdxSample instance () {
return new ViewportSample();
}
},
new Instancer() {
public GdxSample instance () {
return new CarEngineSample();
}
},
new Instancer() {
public GdxSample instance () {
return new SpatialAudioSample();
}
},
new Instancer() {
public GdxSample instance () {
return new FileHandlingSample();
}
},
new Instancer() {
public GdxSample instance () {
return new XmlParsingSample();
}
},
new Instancer() {
public GdxSample instance () {
return new JsonParsingSample();
}
},
new Instancer() {
public GdxSample instance () {
return new BitmapFontSample();
}
},
new Instancer() {
public GdxSample instance () {
return new HieroFontEffectsSample();
}
},
new Instancer() {
public GdxSample instance () {
return new DistanceFieldFontSample();
}
},
new Instancer() {
public GdxSample instance () {
return new DistanceFieldEffectsSample();
}
},
new Instancer() {
public GdxSample instance () {
return new TiledMapSample();
}
},
new Instancer() {
public GdxSample instance () {
return new TiledMapObjectsSample();
}
},
new Instancer() {
public GdxSample instance () {
return new PlatformSpecificSample();
}
},
new Instancer() {
public GdxSample instance () {
return new Box2DFixedTimeStepSample();
}
},
/*new Instancer() {
public GdxSample instance () {
return new Box2DDeferredRaycasterSample();
}
},*/
new Instancer() {
public GdxSample instance () {
return new Box2DMapPopulatorSample();
}
},
new Instancer() {
public GdxSample instance () {
return new Box2DQuerySample();
}
},
new Instancer() {
public GdxSample instance () {
return new Box2DCollisionFilteringSample();
}
},
new Instancer() {
public GdxSample instance () {
return new Box2DCollisionReactionSample();
}
},
new Instancer() {
public GdxSample instance () {
return new Box2DBikeSimulatorSample();
}
},
new Instancer() {
public GdxSample instance () {
return new Box2DJointsSample();
}
},
new Instancer() {
public GdxSample instance () {
return new Box2DComplexShapesSample();
}
},
new Instancer() {
public GdxSample instance () {
return new Box2DSimpleSample();
}
},
new Instancer() {
public GdxSample instance () {
return new ActorSample();
}
},
new Instancer() {
public GdxSample instance () {
return new WidgetsSample();
}
},
new Instancer() {
public GdxSample instance () {
return new MainMenuSample();
}
},
new Instancer() {
public GdxSample instance () {
return new SkinCustomizationSample();
}
},
/*new Instancer() {
public GdxSample instance () {
return new CustomWidgetSample();
}
},*/
/*new Instancer() {
public GdxSample instance () {
return new GroupingAssetsSample();
}
}, // "forName" Not compatible with gwt */
new Instancer() {
public GdxSample instance () {
return new CustomLoaderSample();
}
},
new Instancer() {
public GdxSample instance () {
return new ProgressBarSample();
}
},
/*new Instancer() {
public GdxSample instance () {
return new AssetManagerSample();
}
},*/
new Instancer() {
public GdxSample instance () {
return new LocalizationSample();
}
},
new Instancer() {
public GdxSample instance () {
return new ArtificialIntelligenceSample();
}
},
new Instancer() {
public GdxSample instance () {
return new Box2DLightsSample();
}
},
new Instancer() {
public GdxSample instance () {
return new PlatformSpecificSample();
}
},
new Instancer() {
public GdxSample instance () {
return new AshleySample();
}
},
new Instancer() {
public GdxSample instance () {
return new FrustumCullingSample();
}
}
};
}