package org.tjuscs.bulletgame.view; import org.tjuscs.bulletgame.model.GameModel; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.InputMultiplexer; import com.badlogic.gdx.InputProcessor; import com.badlogic.gdx.Screen; import com.badlogic.gdx.graphics.GL10; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.ParticleEffect; import com.badlogic.gdx.graphics.g2d.ParticleEffectPool; import com.badlogic.gdx.graphics.g2d.ParticleEffectPool.PooledEffect; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.input.GestureDetector; import com.badlogic.gdx.input.GestureDetector.GestureListener; import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.utils.Array; public class ParticleScreen implements Screen { GameModel model; ParticleEffectPool EffectPool; Array<PooledEffect> effects = new Array<PooledEffect>(); SpriteBatch batch; int effectIndex = 0; public ParticleScreen() { // model = new GameModel(); // model.init(); batch = new SpriteBatch(); addEffect("marisa_sp_ef", "particles6"); addEffect("reimu_bullet_ef", "particles16"); addEffect("reimu_sp_ef", "particles1"); addEffect("graze", "particles1"); addEffect("player_death_ef", "particles1"); GestureDetector gesture = new GestureDetector(new GestureListener() { @Override public boolean zoom(float initialDistance, float distance) { // TODO Auto-generated method stub return false; } @Override public boolean touchDown(float x, float y, int pointer, int button) { // TODO Auto-generated method stub return false; } @Override public boolean tap(float x, float y, int count, int button) { // TODO Auto-generated method stub return false; } @Override public boolean pinch(Vector2 initialPointer1, Vector2 initialPointer2, Vector2 pointer1, Vector2 pointer2) { // TODO Auto-generated method stub return false; } @Override public boolean pan(float x, float y, float deltaX, float deltaY) { // TODO Auto-generated method stub return false; } @Override public boolean longPress(float x, float y) { // TODO Auto-generated method stub return false; } @Override public boolean fling(float velocityX, float velocityY, int button) { if (velocityX > 400) { effectIndex++; effectIndex %= effects.size; } else if (velocityX < -400) { effectIndex--; effectIndex += effects.size; effectIndex %= effects.size; }else return false; effects.get(effectIndex).setPosition( Gdx.graphics.getWidth() / 2, Gdx.graphics.getHeight() / 2); return true; } }); Gdx.input.setInputProcessor(new InputMultiplexer(new InputProcessor() { @Override public boolean touchUp(int screenX, int screenY, int pointer, int button) { return false; } @Override public boolean touchDragged(int screenX, int screenY, int pointer) { effects.get(effectIndex).setPosition(screenX, Gdx.graphics.getHeight() - screenY); return false; } @Override public boolean touchDown(int screenX, int screenY, int pointer, int button) { effects.get(effectIndex).setPosition(screenX, Gdx.graphics.getHeight() - screenY); return false; } @Override public boolean scrolled(int amount) { // TODO Auto-generated method stub return false; } @Override public boolean mouseMoved(int screenX, int screenY) { effects.get(effectIndex).setPosition(screenX, Gdx.graphics.getHeight() - screenY); return false; } @Override public boolean keyUp(int keycode) { // TODO Auto-generated method stub return false; } @Override public boolean keyTyped(char character) { // TODO Auto-generated method stub return false; } @Override public boolean keyDown(int keycode) { // TODO Auto-generated method stub return false; } }, gesture)); } private void addEffect(String effectName, String imgName) { ParticleEffect reffect = new ParticleEffect(); TextureAtlas atlas = new TextureAtlas(); atlas.addRegion( imgName, new TextureRegion(new Texture(Gdx.files.internal("particles/" + imgName + ".png")))); reffect.load(Gdx.files.internal("particles/" + effectName + ".p"), atlas); EffectPool = new ParticleEffectPool(reffect, 1, 2); // Create effect PooledEffect effect = EffectPool.obtain(); effect.setPosition(Gdx.graphics.getWidth() / 2, Gdx.graphics.getHeight() / 2); effects.add(effect); } @Override public void render(float delta) { // model.frame(); Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); batch.begin(); // Update and draw effects: PooledEffect effect = effects.get(effectIndex); effect.draw(batch, delta); if (effect.isComplete()) { effect.free(); effects.removeIndex(effectIndex); } batch.end(); } @Override public void resize(int width, int height) { } @Override public void show() { } @Override public void hide() { } @Override public void pause() { } @Override public void resume() { } @Override public void dispose() { // Reset all effects: for (int i = effects.size - 1; i >= 0; i--) effects.get(i).free(); effects.clear(); } }