From e26418493e12b63a6675fa8f6107e04a0eb808db Mon Sep 17 00:00:00 2001 From: "nathan.sweet" Date: Tue, 26 Oct 2010 07:49:47 +0000 Subject: [PATCH] [added] Particle emitter test. 32x32 image 300 particles: 41fps droid, 26fps g1 150 particles: 49fps droid, 41fps g1 80 particles: 52fps droid, 55-60fps g1 64x64 image, rotation, color change 150 particles: 31fps droid, 25fps g1 80 particles: 40fps droid, 37fps g1 128x128 image, scaled to 80x80, rotation, color change 150 particles: 13fps droid, 11fps g1 80 particles: 46fps droid, 55-60fps g1 128x128, scaled to 256x256, rotation, color change 10 particles: droid 38fps, g1 37fps 10 particles: droid 46fps, g1 55-60fps --- .../gdx/graphics/particles/EffectPanel.java | 20 +- .../gdx/graphics/particles/ParticleEditor.java | 234 +++++---- .../gdx/graphics/particles/ParticleEffect.java | 1 + .../gdx/graphics/particles/ParticleEmitter.java | 8 +- .../assets/data/particle-cloud.png | Bin 0 -> 9294 bytes .../assets/data/particle-fire.png | Bin 0 -> 11952 bytes .../assets/data/particle-star.png | Bin 0 -> 3665 bytes tests/gdx-tests-android/assets/data/particle.png | Bin 0 -> 1821 bytes tests/gdx-tests-android/assets/data/test.p | 567 +++++++++++++++++++++ tests/gdx-tests-desktop/data/particle-cloud.png | Bin 0 -> 9294 bytes tests/gdx-tests-desktop/data/particle-fire.png | Bin 0 -> 11952 bytes tests/gdx-tests-desktop/data/particle-star.png | Bin 0 -> 3665 bytes tests/gdx-tests-desktop/data/particle.png | Bin 0 -> 1821 bytes tests/gdx-tests-desktop/data/test.p | 567 +++++++++++++++++++++ .../gdx/tests/desktop/JoglTestStarter.java | 19 +- tests/gdx-tests-lwjgl/data/particle-cloud.png | Bin 0 -> 9294 bytes tests/gdx-tests-lwjgl/data/particle-fire.png | Bin 0 -> 11952 bytes tests/gdx-tests-lwjgl/data/particle-star.png | Bin 0 -> 3665 bytes tests/gdx-tests-lwjgl/data/particle.png | Bin 0 -> 1821 bytes tests/gdx-tests-lwjgl/data/test.p | 567 +++++++++++++++++++++ .../badlogic/gdx/tests/lwjgl/LwjglTestStarter.java | 19 +- .../badlogic/gdx/tests/ParticleEmitterTest.java | 109 ++++ .../src/com/badlogic/gdx/tests/utils/GdxTests.java | 2 + 23 files changed, 1982 insertions(+), 131 deletions(-) create mode 100644 tests/gdx-tests-android/assets/data/particle-cloud.png create mode 100644 tests/gdx-tests-android/assets/data/particle-fire.png create mode 100644 tests/gdx-tests-android/assets/data/particle-star.png create mode 100644 tests/gdx-tests-android/assets/data/particle.png create mode 100644 tests/gdx-tests-android/assets/data/test.p create mode 100644 tests/gdx-tests-desktop/data/particle-cloud.png create mode 100644 tests/gdx-tests-desktop/data/particle-fire.png create mode 100644 tests/gdx-tests-desktop/data/particle-star.png create mode 100644 tests/gdx-tests-desktop/data/particle.png create mode 100644 tests/gdx-tests-desktop/data/test.p create mode 100644 tests/gdx-tests-lwjgl/data/particle-cloud.png create mode 100644 tests/gdx-tests-lwjgl/data/particle-fire.png create mode 100644 tests/gdx-tests-lwjgl/data/particle-star.png create mode 100644 tests/gdx-tests-lwjgl/data/particle.png create mode 100644 tests/gdx-tests-lwjgl/data/test.p create mode 100644 tests/gdx-tests/src/com/badlogic/gdx/tests/ParticleEmitterTest.java diff --git a/extensions/particle-editor/src/com/badlogic/gdx/graphics/particles/EffectPanel.java b/extensions/particle-editor/src/com/badlogic/gdx/graphics/particles/EffectPanel.java index e79ba11d9..527e17286 100644 --- a/extensions/particle-editor/src/com/badlogic/gdx/graphics/particles/EffectPanel.java +++ b/extensions/particle-editor/src/com/badlogic/gdx/graphics/particles/EffectPanel.java @@ -81,25 +81,27 @@ class EffectPanel extends JPanel { final String dir = dialog.getDirectory(); if (dir == null || file == null || file.trim().length() == 0) return; lastDir = dir; - synchronized (editor.effect) { - ParticleEffect effect = new ParticleEffect(); - try { + ParticleEffect effect = new ParticleEffect(); + try { + synchronized (editor.effect) { effect.loadEmitters(Gdx.files.getFileHandle(new File(dir, file).getAbsolutePath(), FileType.Absolute)); editor.effect = effect; emitterTableModel.getDataVector().removeAllElements(); editor.particleData.clear(); - } catch (Exception ex) { - System.out.println("Error loading effect: " + new File(dir, file).getAbsolutePath()); - ex.printStackTrace(); - JOptionPane.showMessageDialog(editor, "Error opening effect."); - return; } + } catch (Exception ex) { + System.out.println("Error loading effect: " + new File(dir, file).getAbsolutePath()); + ex.printStackTrace(); + JOptionPane.showMessageDialog(editor, "Error opening effect."); + return; + } + synchronized (editor.effect) { for (ParticleEmitter emitter : effect.getEmitters()) { emitter.setPosition(Gdx.graphics.getWidth() / 2, Gdx.graphics.getHeight() / 2); emitterTableModel.addRow(new Object[] {emitter.getName(), true}); } + editIndex = 0; } - editIndex = 0; emitterTable.getSelectionModel().setSelectionInterval(editIndex, editIndex); editor.reloadRows(); } diff --git a/extensions/particle-editor/src/com/badlogic/gdx/graphics/particles/ParticleEditor.java b/extensions/particle-editor/src/com/badlogic/gdx/graphics/particles/ParticleEditor.java index f7d947266..f5bd1ef35 100644 --- a/extensions/particle-editor/src/com/badlogic/gdx/graphics/particles/ParticleEditor.java +++ b/extensions/particle-editor/src/com/badlogic/gdx/graphics/particles/ParticleEditor.java @@ -10,6 +10,8 @@ import java.awt.Graphics; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; import java.io.File; import java.net.MalformedURLException; import java.net.URL; @@ -46,7 +48,7 @@ import com.badlogic.gdx.graphics.Texture.TextureFilter; import com.badlogic.gdx.graphics.Texture.TextureWrap; import com.badlogic.gdx.math.Matrix4; -public class ParticleEditor extends JFrame implements RenderListener, InputListener { +public class ParticleEditor extends JFrame { LwjglApplication app; Canvas glCanvas; JPanel rowsPanel; @@ -55,14 +57,6 @@ public class ParticleEditor extends JFrame implements RenderListener, InputListe ParticleEffect effect = new ParticleEffect(); final HashMap particleData = new HashMap(); - private float maxActiveTimer; - private int maxActive, lastMaxActive; - private boolean mouseDown; - private int activeCount; - private BitmapFont font; - private SpriteBatch spriteBatch; - private Sprite bgImage; // BOZO - Add setting background image to UI. - private int mouseX, mouseY; public ParticleEditor () { super("GDX Particle Editor"); @@ -82,7 +76,12 @@ public class ParticleEditor extends JFrame implements RenderListener, InputListe super.setupDisplay(); } }; - app.getGraphics().setRenderListener(ParticleEditor.this); + app.getGraphics().setRenderListener(new Renderer()); + addWindowListener(new WindowAdapter() { + public void windowClosed (WindowEvent event) { + app.stop(); + } + }); } public Dimension getMinimumSize () { @@ -249,130 +248,145 @@ public class ParticleEditor extends JFrame implements RenderListener, InputListe splitPane.setDividerLocation(325); } - public void surfaceCreated () { - if (spriteBatch != null) return; - spriteBatch = new SpriteBatch(); - - font = new BitmapFont(Gdx.files.getFileHandle("data/default.fnt", FileType.Internal), Gdx.files.getFileHandle( - "data/default.png", FileType.Internal), true); - effectPanel.newEmitter("Untitled", true); - // if (resources.openFile("/editor-bg.png") != null) bgImage = new Image(gl, "/editor-bg.png"); - - Gdx.input.addInputListener(this); - } - - public void surfaceChanged (int width, int height) { - int viewWidth = Gdx.graphics.getWidth(); - int viewHeight = Gdx.graphics.getHeight(); - - spriteBatch.setProjectionMatrix(new Matrix4().setToOrtho(0, viewWidth, viewHeight, 0, 0, 1)); - - synchronized (effect) { - effect.setPosition(viewWidth / 2, viewHeight / 2); + class Renderer implements RenderListener, InputListener { + private float maxActiveTimer; + private int maxActive, lastMaxActive; + private boolean mouseDown; + private int activeCount; + private int mouseX, mouseY; + private BitmapFont font; + private SpriteBatch spriteBatch; + private Sprite bgImage; // BOZO - Add setting background image to UI. + + public void surfaceCreated () { + if (spriteBatch != null) return; + spriteBatch = new SpriteBatch(); + + font = new BitmapFont(Gdx.files.getFileHandle("data/default.fnt", FileType.Internal), Gdx.files.getFileHandle( + "data/default.png", FileType.Internal), true); + effectPanel.newEmitter("Untitled", true); + // if (resources.openFile("/editor-bg.png") != null) bgImage = new Image(gl, "/editor-bg.png"); + + Gdx.input.addInputListener(this); } - } - public void render () { - synchronized (effect) { + public void surfaceChanged (int width, int height) { int viewWidth = Gdx.graphics.getWidth(); int viewHeight = Gdx.graphics.getHeight(); - if (viewWidth != glCanvas.getWidth() || viewHeight != glCanvas.getHeight()) { - viewWidth = Math.max(1, glCanvas.getWidth()); - viewHeight = Math.max(1, glCanvas.getHeight()); - app.setSize(viewWidth, viewHeight); + + spriteBatch.setProjectionMatrix(new Matrix4().setToOrtho(0, viewWidth, viewHeight, 0, 0, 1)); + + synchronized (effect) { + effect.setPosition(viewWidth / 2, viewHeight / 2); } + } - float delta = Gdx.graphics.getDeltaTime(); + public void render () { + synchronized (effect) { + int viewWidth = Gdx.graphics.getWidth(); + int viewHeight = Gdx.graphics.getHeight(); + if (viewWidth != glCanvas.getWidth() || viewHeight != glCanvas.getHeight()) { + viewWidth = Math.max(1, glCanvas.getWidth()); + viewHeight = Math.max(1, glCanvas.getHeight()); + app.setSize(viewWidth, viewHeight); + } - Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); + float delta = Gdx.graphics.getDeltaTime(); - spriteBatch.begin(); - spriteBatch.enableBlending(); - spriteBatch.setBlendFunction(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA); + Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); - if (bgImage != null) { - bgImage.setPosition(viewWidth / 2 - bgImage.getWidth() / 2, viewHeight / 2 - bgImage.getHeight() / 2); - bgImage.draw(spriteBatch); - } + spriteBatch.begin(); + spriteBatch.enableBlending(); + spriteBatch.setBlendFunction(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA); - activeCount = 0; - for (ParticleEmitter emitter : effect.getEmitters()) { - if (emitter.getTexture() == null && emitter.getImagePath() != null) loadImage(emitter); - boolean enabled = isEnabled(emitter); - if (enabled) { - if (emitter.getTexture() != null) emitter.draw(spriteBatch, delta); - activeCount += emitter.getActiveCount(); + if (bgImage != null) { + bgImage.setPosition(viewWidth / 2 - bgImage.getWidth() / 2, viewHeight / 2 - bgImage.getHeight() / 2); + bgImage.draw(spriteBatch); } - } - if (effect.isComplete()) effect.start(); - - maxActive = Math.max(maxActive, activeCount); - maxActiveTimer += delta; - if (maxActiveTimer > 3) { - maxActiveTimer = 0; - lastMaxActive = maxActive; - maxActive = 0; - } - if (mouseDown) { - // gl.drawLine(mouseX - 6, mouseY, mouseX + 5, mouseY); - // gl.drawLine(mouseX, mouseY - 5, mouseX, mouseY + 6); - } + activeCount = 0; + for (ParticleEmitter emitter : effect.getEmitters()) { + if (emitter.getTexture() == null && emitter.getImagePath() != null) loadImage(emitter); + boolean enabled = isEnabled(emitter); + if (enabled) { + if (emitter.getTexture() != null) emitter.draw(spriteBatch, delta); + activeCount += emitter.getActiveCount(); + } + } + if (effect.isComplete()) effect.start(); + + maxActive = Math.max(maxActive, activeCount); + maxActiveTimer += delta; + if (maxActiveTimer > 3) { + maxActiveTimer = 0; + lastMaxActive = maxActive; + maxActive = 0; + } + + if (mouseDown) { + // gl.drawLine(mouseX - 6, mouseY, mouseX + 5, mouseY); + // gl.drawLine(mouseX, mouseY - 5, mouseX, mouseY + 6); + } - font.draw(spriteBatch, "FPS: " + Gdx.graphics.getFramesPerSecond(), 10, 10, Color.WHITE); - font.draw(spriteBatch, "Count: " + activeCount, 10, 30, Color.WHITE); - font.draw(spriteBatch, "Max: " + lastMaxActive, 10, 50, Color.WHITE); - font.draw(spriteBatch, (int)(getEmitter().getPercentComplete() * 100) + "%", 10, 70, Color.WHITE); + font.draw(spriteBatch, "FPS: " + Gdx.graphics.getFramesPerSecond(), 10, 10, Color.WHITE); + font.draw(spriteBatch, "Count: " + activeCount, 10, 30, Color.WHITE); + font.draw(spriteBatch, "Max: " + lastMaxActive, 10, 50, Color.WHITE); + font.draw(spriteBatch, (int)(getEmitter().getPercentComplete() * 100) + "%", 10, 70, Color.WHITE); - spriteBatch.end(); + spriteBatch.end(); - // gl.drawLine((int)(viewWidth * getCurrentParticles().getPercentComplete()), viewHeight - 1, viewWidth, viewHeight - 1); + // gl.drawLine((int)(viewWidth * getCurrentParticles().getPercentComplete()), viewHeight - 1, viewWidth, viewHeight - +// 1); + } } - } - private void loadImage (ParticleEmitter emitter) { - final String imagePath = emitter.getImagePath(); - try { - emitter.setTexture(Gdx.graphics.newTexture(Gdx.files.getFileHandle(imagePath, FileType.Absolute), TextureFilter.Linear, - TextureFilter.Linear, TextureWrap.ClampToEdge, TextureWrap.ClampToEdge)); - } catch (GdxRuntimeException ex) { - EventQueue.invokeLater(new Runnable() { - public void run () { - JOptionPane.showMessageDialog(ParticleEditor.this, "Error loading image:\n" + imagePath); - } - }); - emitter.setImagePath(null); + private void loadImage (ParticleEmitter emitter) { + final String imagePath = emitter.getImagePath(); + try { + emitter.setTexture(Gdx.graphics.newTexture(Gdx.files.getFileHandle(imagePath, FileType.Absolute), + TextureFilter.Linear, TextureFilter.Linear, TextureWrap.ClampToEdge, TextureWrap.ClampToEdge)); + } catch (GdxRuntimeException ex) { + EventQueue.invokeLater(new Runnable() { + public void run () { + JOptionPane.showMessageDialog(ParticleEditor.this, "Error loading image:\n" + imagePath); + } + }); + emitter.setImagePath(null); + } } - } - public boolean keyDown (int keycode) { - return false; - } + public boolean keyDown (int keycode) { + return false; + } - public boolean keyUp (int keycode) { - return false; - } + public boolean keyUp (int keycode) { + return false; + } - public boolean keyTyped (char character) { - return false; - } + public boolean keyTyped (char character) { + return false; + } - public boolean touchDown (int x, int y, int pointer) { - synchronized (effect) { - effect.setPosition(x, y); + public boolean touchDown (int x, int y, int pointer) { + synchronized (effect) { + effect.setPosition(x, y); + } + return false; } - return false; - } - public boolean touchUp (int x, int y, int pointer) { - return false; - } + public boolean touchUp (int x, int y, int pointer) { + return false; + } - public boolean touchDragged (int x, int y, int pointer) { - synchronized (effect) { - effect.setPosition(x, y); + public boolean touchDragged (int x, int y, int pointer) { + synchronized (effect) { + effect.setPosition(x, y); + } + return false; + } + + public void dispose () { } - return false; } static class ParticleData { @@ -391,6 +405,10 @@ public class ParticleEditor extends JFrame implements RenderListener, InputListe break; } } + EventQueue.invokeLater(new Runnable() { + public void run () { + } + }); new ParticleEditor(); } } diff --git a/gdx/src/com/badlogic/gdx/graphics/particles/ParticleEffect.java b/gdx/src/com/badlogic/gdx/graphics/particles/ParticleEffect.java index ad146bf9b..9022a0c88 100644 --- a/gdx/src/com/badlogic/gdx/graphics/particles/ParticleEffect.java +++ b/gdx/src/com/badlogic/gdx/graphics/particles/ParticleEffect.java @@ -127,6 +127,7 @@ public class ParticleEffect { ParticleEmitter emitter = emitters.get(i); String imagePath = emitter.getImagePath(); if (imagePath == null) continue; + imagePath = imagePath.replace('\\', '/'); imagePath = imagesDir + new File(imagePath).getName(); emitter.setTexture(Gdx.graphics.newTexture(Gdx.files.getFileHandle(imagePath, fileType), TextureFilter.Linear, TextureFilter.Linear, TextureWrap.ClampToEdge, TextureWrap.ClampToEdge)); diff --git a/gdx/src/com/badlogic/gdx/graphics/particles/ParticleEmitter.java b/gdx/src/com/badlogic/gdx/graphics/particles/ParticleEmitter.java index 975a30402..a55563562 100644 --- a/gdx/src/com/badlogic/gdx/graphics/particles/ParticleEmitter.java +++ b/gdx/src/com/badlogic/gdx/graphics/particles/ParticleEmitter.java @@ -833,12 +833,12 @@ public class ParticleEmitter { return lowMin + (lowMax - lowMin) * MathUtils.random(); } - public void setLow (int value) { + public void setLow (float value) { lowMin = value; lowMax = value; } - public void setLow (int min, int max) { + public void setLow (float min, float max) { lowMin = min; lowMax = max; } @@ -890,12 +890,12 @@ public class ParticleEmitter { return highMin + (highMax - highMin) * MathUtils.random(); } - public void setHigh (int value) { + public void setHigh (float value) { highMin = value; highMax = value; } - public void setHigh (int min, int max) { + public void setHigh (float min, float max) { highMin = min; highMax = max; } diff --git a/tests/gdx-tests-android/assets/data/particle-cloud.png b/tests/gdx-tests-android/assets/data/particle-cloud.png new file mode 100644 index 0000000000000000000000000000000000000000..d375f43f55026ee71c1ff86cadb24eea7fccda0d GIT binary patch literal 9294 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 Z0^U5Vnwsymf3WeB=WOq4S7Q^D`9GhTSjhkY literal 0 HcmV?d00001 diff --git a/tests/gdx-tests-android/assets/data/particle.png b/tests/gdx-tests-android/assets/data/particle.png new file mode 100644 index 0000000000000000000000000000000000000000..632fcc107a0ecee9ff7e21b586a39ed6d6a6876a GIT binary patch literal 1821 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%nF$y5hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8vuSMv>2~2MaLa!T6y`Y4UTL84#CABECEH%ZgC_h&L>|v`++-`BkX&zK> z3U0T!;MA)Rbc{YIT9Kj|CIn17ASOJ~0y*$xpPC0u>qWps&5@s33(PB%JzX3_DsCMK z@6Nkzz_TUQvhcOdtu4;i6K_2Kdfc2RqFc>(lTFr7LoEw7^FxuB6Av)Or0$;f&Lv1? zZdvT~Kj-76{?E}=+BchepC8EZkDa@MGY8!?oCk9a9k&LqLJsxt0vj9eT^ME zAG9Z2d_FChN$H~c!QKbVECyGYm}d!#-)Ej!p&M~XbmAZBV;`n9?D!#mQ1`@R3qc>n z9F`=}i3j%Z>TGCdjcc%UanY{XI_-n4UH=l}gYG@sIreGyOy}_O|7^X(AvuA0B6HR9 zWeT-dXMAY;GtZ}<)i9jn(8|KbcGh5y48;WQM&<~OqkYyBj+@R`_+rk;>Y;YyE6)?- z1g0XsLsOn*3uMjvpt45wH48`Qd$V~-iC(*P65k1S9RCr|$(R-8u6IG=!sLfOIX(h& zly}*2oyaWDdS>{xis#d$GpF?~#8xT$tle}l=2^#U7XOLyLB}pTXuo(9|DZ18&+H4H z1!`(0`cu^UU;L8x_f%hgv{Z*@Sn(DIx9>jBPP|_!IANZ{watuAePx#h$8G38(x;w%y0cRE&SL3o;aw|V zYOLfB*4o^ux%=Do?|$ytH-9hwZ8LFIN5kt`ebdb(bQNE69-8KnrFGeKYIbfE-yXTj z$_7J*^(|co()YZVxVEKj(#@?*_iV2)`%V`v`Y~^V@`sz{GbT@*apVh&*N*p*n;lo$ zab4)y>T>K>VD#3dr=DdVH+46%<(~4h;-A#Ya_8?;MK`$LjSJR|xO~(1C472}B+CEffG0QJKD%Vn;anUPF z#qHBSfp?!pn78T1H`eeyV$}(m|2uXe`KU>z`Ot11MOuV~Z+1_Wpvm#4! z?jcoG*35Y3O-tu&TD0cJJN?D`tl}H~T$pxpPsJpmRqAtg9lj~QGVp+9MMcGl)GtjQ paU6Oatn-flm;c?i{n{VZ0}O)Nf7>%OxkEq|mZz(q%Q~loCIB68z|sH! literal 0 HcmV?d00001 diff --git a/tests/gdx-tests-android/assets/data/test.p b/tests/gdx-tests-android/assets/data/test.p new file mode 100644 index 000000000..10d884532 --- /dev/null +++ b/tests/gdx-tests-android/assets/data/test.p @@ -0,0 +1,567 @@ +simple +- Delay - +active: false +- Duration - +lowMin: 1.0 +lowMax: 1.0 +- Count - +min: 10 +max: 1000 +- Emission - +lowMin: 0.0 +lowMax: 0.0 +highMin: 10.0 +highMax: 10.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Life - +lowMin: 0.0 +lowMax: 0.0 +highMin: 1.0 +highMax: 1.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Life Offset - +active: false +- X Offset - +active: false +- Y Offset - +active: false +- Spawn Shape - +shape: point +- Spawn Width - +lowMin: 0.0 +lowMax: 0.0 +highMin: 0.0 +highMax: 0.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Spawn Height - +lowMin: 0.0 +lowMax: 0.0 +highMin: 0.0 +highMax: 0.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Size - +lowMin: 0.0 +lowMax: 0.0 +highMin: 32.0 +highMax: 32.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Velocity - +active: true +lowMin: 0.0 +lowMax: 0.0 +highMin: 80.0 +highMax: 80.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Angle - +active: true +lowMin: 0.0 +lowMax: 0.0 +highMin: 1.0 +highMax: 360.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Rotation - +active: false +- Wind - +active: false +- Gravity - +active: false +- Tint - +colorsCount: 3 +colors0: 1.0 +colors1: 1.0 +colors2: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Transparency - +lowMin: 0.0 +lowMax: 0.0 +highMin: 1.0 +highMax: 1.0 +relative: false +scalingCount: 4 +scaling0: 0.0 +scaling1: 1.0 +scaling2: 1.0 +scaling3: 0.0 +timelineCount: 4 +timeline0: 0.0 +timeline1: 0.26712328 +timeline2: 0.72602737 +timeline3: 1.0 +- Options - +attached: false +continuous: true +aligned: false +additive: true +behind: false +- Image Path - +data/particle.png + + +fire +- Delay - +active: false +- Duration - +lowMin: 1.0 +lowMax: 1.0 +- Count - +min: 10 +max: 1000 +- Emission - +lowMin: 0.0 +lowMax: 0.0 +highMin: 10.0 +highMax: 10.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Life - +lowMin: 0.0 +lowMax: 0.0 +highMin: 0.7 +highMax: 1.3 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Life Offset - +active: false +- X Offset - +active: false +- Y Offset - +active: false +- Spawn Shape - +shape: point +- Spawn Width - +lowMin: 0.0 +lowMax: 0.0 +highMin: 0.0 +highMax: 0.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Spawn Height - +lowMin: 0.0 +lowMax: 0.0 +highMin: 0.0 +highMax: 0.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Size - +lowMin: 0.0 +lowMax: 0.0 +highMin: 80.0 +highMax: 80.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Velocity - +active: true +lowMin: 0.0 +lowMax: 0.0 +highMin: 40.0 +highMax: 40.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Angle - +active: true +lowMin: 0.0 +lowMax: 0.0 +highMin: 1.0 +highMax: 360.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Rotation - +active: true +lowMin: 1.0 +lowMax: 360.0 +highMin: -180.0 +highMax: 180.0 +relative: true +scalingCount: 2 +scaling0: 0.0 +scaling1: 1.0 +timelineCount: 2 +timeline0: 0.0 +timeline1: 1.0 +- Wind - +active: false +- Gravity - +active: false +- Tint - +colorsCount: 3 +colors0: 1.0 +colors1: 0.21176471 +colors2: 0.0 +timelineCount: 1 +timeline0: 0.0 +- Transparency - +lowMin: 0.0 +lowMax: 0.0 +highMin: 1.0 +highMax: 1.0 +relative: false +scalingCount: 4 +scaling0: 0.0 +scaling1: 1.0 +scaling2: 1.0 +scaling3: 0.0 +timelineCount: 4 +timeline0: 0.0 +timeline1: 0.2 +timeline2: 0.6712329 +timeline3: 1.0 +- Options - +attached: true +continuous: true +aligned: false +additive: true +behind: false +- Image Path - +data\particle-fire.png + + +stars +- Delay - +active: false +- Duration - +lowMin: 1.0 +lowMax: 1.0 +- Count - +min: 0 +max: 1000 +- Emission - +lowMin: 0.0 +lowMax: 0.0 +highMin: 10.0 +highMax: 10.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Life - +lowMin: 0.0 +lowMax: 0.0 +highMin: 1.0 +highMax: 1.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Life Offset - +active: false +- X Offset - +active: false +- Y Offset - +active: false +- Spawn Shape - +shape: point +- Spawn Width - +lowMin: 0.0 +lowMax: 0.0 +highMin: 0.0 +highMax: 0.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Spawn Height - +lowMin: 0.0 +lowMax: 0.0 +highMin: 0.0 +highMax: 0.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Size - +lowMin: 0.0 +lowMax: 0.0 +highMin: 64.0 +highMax: 64.0 +relative: false +scalingCount: 6 +scaling0: 0.0 +scaling1: 1.0 +scaling2: 0.33333334 +scaling3: 1.0 +scaling4: 0.4509804 +scaling5: 1.0 +timelineCount: 6 +timeline0: 0.0 +timeline1: 0.12328767 +timeline2: 0.28767124 +timeline3: 0.4041096 +timeline4: 0.5753425 +timeline5: 0.70547944 +- Velocity - +active: true +lowMin: 0.0 +lowMax: 0.0 +highMin: 80.0 +highMax: 80.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Angle - +active: true +lowMin: 0.0 +lowMax: 0.0 +highMin: 1.0 +highMax: 360.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Rotation - +active: true +lowMin: 1.0 +lowMax: 360.0 +highMin: -90.0 +highMax: 89.0 +relative: true +scalingCount: 2 +scaling0: 0.0 +scaling1: 1.0 +timelineCount: 2 +timeline0: 0.0 +timeline1: 1.0 +- Wind - +active: false +- Gravity - +active: false +- Tint - +colorsCount: 9 +colors0: 0.0 +colors1: 0.105882354 +colors2: 1.0 +colors3: 0.0 +colors4: 1.0 +colors5: 0.09803922 +colors6: 1.0 +colors7: 0.0 +colors8: 0.0 +timelineCount: 3 +timeline0: 0.0 +timeline1: 0.63705105 +timeline2: 1.0 +- Transparency - +lowMin: 0.0 +lowMax: 0.0 +highMin: 1.0 +highMax: 1.0 +relative: false +scalingCount: 5 +scaling0: 1.0 +scaling1: 1.0 +scaling2: 0.0 +scaling3: 0.0 +scaling4: 1.0 +timelineCount: 5 +timeline0: 0.0 +timeline1: 0.25342464 +timeline2: 0.74657536 +timeline3: 0.9315069 +timeline4: 1.0 +- Options - +attached: false +continuous: true +aligned: false +additive: true +behind: false +- Image Path - +data\particle-star.png + + +smoke +- Delay - +active: false +- Duration - +lowMin: 1.0 +lowMax: 1.0 +- Count - +min: 0 +max: 1000 +- Emission - +lowMin: 0.0 +lowMax: 0.0 +highMin: 10.0 +highMax: 10.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Life - +lowMin: 0.0 +lowMax: 0.0 +highMin: 3.0 +highMax: 3.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Life Offset - +active: false +- X Offset - +active: false +- Y Offset - +active: false +- Spawn Shape - +shape: square +- Spawn Width - +lowMin: 0.0 +lowMax: 0.0 +highMin: 480.0 +highMax: 480.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Spawn Height - +lowMin: 0.0 +lowMax: 0.0 +highMin: 320.0 +highMax: 320.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Size - +lowMin: 0.0 +lowMax: 0.0 +highMin: 256.0 +highMax: 256.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Velocity - +active: true +lowMin: 10.0 +lowMax: 10.0 +highMin: 0.0 +highMax: 0.0 +relative: false +scalingCount: 2 +scaling0: 0.0 +scaling1: 1.0 +timelineCount: 2 +timeline0: 0.0 +timeline1: 1.0 +- Angle - +active: true +lowMin: 0.0 +lowMax: 0.0 +highMin: 1.0 +highMax: 360.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Rotation - +active: true +lowMin: 1.0 +lowMax: 360.0 +highMin: 3.0 +highMax: 10.0 +relative: true +scalingCount: 2 +scaling0: 0.0 +scaling1: 1.0 +timelineCount: 2 +timeline0: 0.0 +timeline1: 1.0 +- Wind - +active: false +- Gravity - +active: false +- Tint - +colorsCount: 6 +colors0: 1.0 +colors1: 0.0 +colors2: 0.0 +colors3: 1.0 +colors4: 0.9843137 +colors5: 0.0 +timelineCount: 2 +timeline0: 0.0 +timeline1: 1.0 +- Transparency - +lowMin: 0.0 +lowMax: 0.0 +highMin: 1.0 +highMax: 1.0 +relative: false +scalingCount: 3 +scaling0: 0.0 +scaling1: 0.2631579 +scaling2: 0.0 +timelineCount: 3 +timeline0: 0.0 +timeline1: 0.5068493 +timeline2: 1.0 +- Options - +attached: false +continuous: true +aligned: false +additive: true +behind: false +- Image Path - +data\particle-cloud.png diff --git a/tests/gdx-tests-desktop/data/particle-cloud.png b/tests/gdx-tests-desktop/data/particle-cloud.png new file mode 100644 index 0000000000000000000000000000000000000000..d375f43f55026ee71c1ff86cadb24eea7fccda0d GIT binary patch literal 9294 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 Z0^U5Vnwsymf3WeB=WOq4S7Q^D`9GhTSjhkY literal 0 HcmV?d00001 diff --git a/tests/gdx-tests-desktop/data/particle.png b/tests/gdx-tests-desktop/data/particle.png new file mode 100644 index 0000000000000000000000000000000000000000..632fcc107a0ecee9ff7e21b586a39ed6d6a6876a GIT binary patch literal 1821 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%nF$y5hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8vuSMv>2~2MaLa!T6y`Y4UTL84#CABECEH%ZgC_h&L>|v`++-`BkX&zK> z3U0T!;MA)Rbc{YIT9Kj|CIn17ASOJ~0y*$xpPC0u>qWps&5@s33(PB%JzX3_DsCMK z@6Nkzz_TUQvhcOdtu4;i6K_2Kdfc2RqFc>(lTFr7LoEw7^FxuB6Av)Or0$;f&Lv1? zZdvT~Kj-76{?E}=+BchepC8EZkDa@MGY8!?oCk9a9k&LqLJsxt0vj9eT^ME zAG9Z2d_FChN$H~c!QKbVECyGYm}d!#-)Ej!p&M~XbmAZBV;`n9?D!#mQ1`@R3qc>n z9F`=}i3j%Z>TGCdjcc%UanY{XI_-n4UH=l}gYG@sIreGyOy}_O|7^X(AvuA0B6HR9 zWeT-dXMAY;GtZ}<)i9jn(8|KbcGh5y48;WQM&<~OqkYyBj+@R`_+rk;>Y;YyE6)?- z1g0XsLsOn*3uMjvpt45wH48`Qd$V~-iC(*P65k1S9RCr|$(R-8u6IG=!sLfOIX(h& zly}*2oyaWDdS>{xis#d$GpF?~#8xT$tle}l=2^#U7XOLyLB}pTXuo(9|DZ18&+H4H z1!`(0`cu^UU;L8x_f%hgv{Z*@Sn(DIx9>jBPP|_!IANZ{watuAePx#h$8G38(x;w%y0cRE&SL3o;aw|V zYOLfB*4o^ux%=Do?|$ytH-9hwZ8LFIN5kt`ebdb(bQNE69-8KnrFGeKYIbfE-yXTj z$_7J*^(|co()YZVxVEKj(#@?*_iV2)`%V`v`Y~^V@`sz{GbT@*apVh&*N*p*n;lo$ zab4)y>T>K>VD#3dr=DdVH+46%<(~4h;-A#Ya_8?;MK`$LjSJR|xO~(1C472}B+CEffG0QJKD%Vn;anUPF z#qHBSfp?!pn78T1H`eeyV$}(m|2uXe`KU>z`Ot11MOuV~Z+1_Wpvm#4! z?jcoG*35Y3O-tu&TD0cJJN?D`tl}H~T$pxpPsJpmRqAtg9lj~QGVp+9MMcGl)GtjQ paU6Oatn-flm;c?i{n{VZ0}O)Nf7>%OxkEq|mZz(q%Q~loCIB68z|sH! literal 0 HcmV?d00001 diff --git a/tests/gdx-tests-desktop/data/test.p b/tests/gdx-tests-desktop/data/test.p new file mode 100644 index 000000000..10d884532 --- /dev/null +++ b/tests/gdx-tests-desktop/data/test.p @@ -0,0 +1,567 @@ +simple +- Delay - +active: false +- Duration - +lowMin: 1.0 +lowMax: 1.0 +- Count - +min: 10 +max: 1000 +- Emission - +lowMin: 0.0 +lowMax: 0.0 +highMin: 10.0 +highMax: 10.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Life - +lowMin: 0.0 +lowMax: 0.0 +highMin: 1.0 +highMax: 1.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Life Offset - +active: false +- X Offset - +active: false +- Y Offset - +active: false +- Spawn Shape - +shape: point +- Spawn Width - +lowMin: 0.0 +lowMax: 0.0 +highMin: 0.0 +highMax: 0.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Spawn Height - +lowMin: 0.0 +lowMax: 0.0 +highMin: 0.0 +highMax: 0.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Size - +lowMin: 0.0 +lowMax: 0.0 +highMin: 32.0 +highMax: 32.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Velocity - +active: true +lowMin: 0.0 +lowMax: 0.0 +highMin: 80.0 +highMax: 80.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Angle - +active: true +lowMin: 0.0 +lowMax: 0.0 +highMin: 1.0 +highMax: 360.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Rotation - +active: false +- Wind - +active: false +- Gravity - +active: false +- Tint - +colorsCount: 3 +colors0: 1.0 +colors1: 1.0 +colors2: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Transparency - +lowMin: 0.0 +lowMax: 0.0 +highMin: 1.0 +highMax: 1.0 +relative: false +scalingCount: 4 +scaling0: 0.0 +scaling1: 1.0 +scaling2: 1.0 +scaling3: 0.0 +timelineCount: 4 +timeline0: 0.0 +timeline1: 0.26712328 +timeline2: 0.72602737 +timeline3: 1.0 +- Options - +attached: false +continuous: true +aligned: false +additive: true +behind: false +- Image Path - +data/particle.png + + +fire +- Delay - +active: false +- Duration - +lowMin: 1.0 +lowMax: 1.0 +- Count - +min: 10 +max: 1000 +- Emission - +lowMin: 0.0 +lowMax: 0.0 +highMin: 10.0 +highMax: 10.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Life - +lowMin: 0.0 +lowMax: 0.0 +highMin: 0.7 +highMax: 1.3 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Life Offset - +active: false +- X Offset - +active: false +- Y Offset - +active: false +- Spawn Shape - +shape: point +- Spawn Width - +lowMin: 0.0 +lowMax: 0.0 +highMin: 0.0 +highMax: 0.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Spawn Height - +lowMin: 0.0 +lowMax: 0.0 +highMin: 0.0 +highMax: 0.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Size - +lowMin: 0.0 +lowMax: 0.0 +highMin: 80.0 +highMax: 80.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Velocity - +active: true +lowMin: 0.0 +lowMax: 0.0 +highMin: 40.0 +highMax: 40.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Angle - +active: true +lowMin: 0.0 +lowMax: 0.0 +highMin: 1.0 +highMax: 360.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Rotation - +active: true +lowMin: 1.0 +lowMax: 360.0 +highMin: -180.0 +highMax: 180.0 +relative: true +scalingCount: 2 +scaling0: 0.0 +scaling1: 1.0 +timelineCount: 2 +timeline0: 0.0 +timeline1: 1.0 +- Wind - +active: false +- Gravity - +active: false +- Tint - +colorsCount: 3 +colors0: 1.0 +colors1: 0.21176471 +colors2: 0.0 +timelineCount: 1 +timeline0: 0.0 +- Transparency - +lowMin: 0.0 +lowMax: 0.0 +highMin: 1.0 +highMax: 1.0 +relative: false +scalingCount: 4 +scaling0: 0.0 +scaling1: 1.0 +scaling2: 1.0 +scaling3: 0.0 +timelineCount: 4 +timeline0: 0.0 +timeline1: 0.2 +timeline2: 0.6712329 +timeline3: 1.0 +- Options - +attached: true +continuous: true +aligned: false +additive: true +behind: false +- Image Path - +data\particle-fire.png + + +stars +- Delay - +active: false +- Duration - +lowMin: 1.0 +lowMax: 1.0 +- Count - +min: 0 +max: 1000 +- Emission - +lowMin: 0.0 +lowMax: 0.0 +highMin: 10.0 +highMax: 10.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Life - +lowMin: 0.0 +lowMax: 0.0 +highMin: 1.0 +highMax: 1.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Life Offset - +active: false +- X Offset - +active: false +- Y Offset - +active: false +- Spawn Shape - +shape: point +- Spawn Width - +lowMin: 0.0 +lowMax: 0.0 +highMin: 0.0 +highMax: 0.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Spawn Height - +lowMin: 0.0 +lowMax: 0.0 +highMin: 0.0 +highMax: 0.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Size - +lowMin: 0.0 +lowMax: 0.0 +highMin: 64.0 +highMax: 64.0 +relative: false +scalingCount: 6 +scaling0: 0.0 +scaling1: 1.0 +scaling2: 0.33333334 +scaling3: 1.0 +scaling4: 0.4509804 +scaling5: 1.0 +timelineCount: 6 +timeline0: 0.0 +timeline1: 0.12328767 +timeline2: 0.28767124 +timeline3: 0.4041096 +timeline4: 0.5753425 +timeline5: 0.70547944 +- Velocity - +active: true +lowMin: 0.0 +lowMax: 0.0 +highMin: 80.0 +highMax: 80.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Angle - +active: true +lowMin: 0.0 +lowMax: 0.0 +highMin: 1.0 +highMax: 360.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Rotation - +active: true +lowMin: 1.0 +lowMax: 360.0 +highMin: -90.0 +highMax: 89.0 +relative: true +scalingCount: 2 +scaling0: 0.0 +scaling1: 1.0 +timelineCount: 2 +timeline0: 0.0 +timeline1: 1.0 +- Wind - +active: false +- Gravity - +active: false +- Tint - +colorsCount: 9 +colors0: 0.0 +colors1: 0.105882354 +colors2: 1.0 +colors3: 0.0 +colors4: 1.0 +colors5: 0.09803922 +colors6: 1.0 +colors7: 0.0 +colors8: 0.0 +timelineCount: 3 +timeline0: 0.0 +timeline1: 0.63705105 +timeline2: 1.0 +- Transparency - +lowMin: 0.0 +lowMax: 0.0 +highMin: 1.0 +highMax: 1.0 +relative: false +scalingCount: 5 +scaling0: 1.0 +scaling1: 1.0 +scaling2: 0.0 +scaling3: 0.0 +scaling4: 1.0 +timelineCount: 5 +timeline0: 0.0 +timeline1: 0.25342464 +timeline2: 0.74657536 +timeline3: 0.9315069 +timeline4: 1.0 +- Options - +attached: false +continuous: true +aligned: false +additive: true +behind: false +- Image Path - +data\particle-star.png + + +smoke +- Delay - +active: false +- Duration - +lowMin: 1.0 +lowMax: 1.0 +- Count - +min: 0 +max: 1000 +- Emission - +lowMin: 0.0 +lowMax: 0.0 +highMin: 10.0 +highMax: 10.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Life - +lowMin: 0.0 +lowMax: 0.0 +highMin: 3.0 +highMax: 3.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Life Offset - +active: false +- X Offset - +active: false +- Y Offset - +active: false +- Spawn Shape - +shape: square +- Spawn Width - +lowMin: 0.0 +lowMax: 0.0 +highMin: 480.0 +highMax: 480.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Spawn Height - +lowMin: 0.0 +lowMax: 0.0 +highMin: 320.0 +highMax: 320.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Size - +lowMin: 0.0 +lowMax: 0.0 +highMin: 256.0 +highMax: 256.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Velocity - +active: true +lowMin: 10.0 +lowMax: 10.0 +highMin: 0.0 +highMax: 0.0 +relative: false +scalingCount: 2 +scaling0: 0.0 +scaling1: 1.0 +timelineCount: 2 +timeline0: 0.0 +timeline1: 1.0 +- Angle - +active: true +lowMin: 0.0 +lowMax: 0.0 +highMin: 1.0 +highMax: 360.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Rotation - +active: true +lowMin: 1.0 +lowMax: 360.0 +highMin: 3.0 +highMax: 10.0 +relative: true +scalingCount: 2 +scaling0: 0.0 +scaling1: 1.0 +timelineCount: 2 +timeline0: 0.0 +timeline1: 1.0 +- Wind - +active: false +- Gravity - +active: false +- Tint - +colorsCount: 6 +colors0: 1.0 +colors1: 0.0 +colors2: 0.0 +colors3: 1.0 +colors4: 0.9843137 +colors5: 0.0 +timelineCount: 2 +timeline0: 0.0 +timeline1: 1.0 +- Transparency - +lowMin: 0.0 +lowMax: 0.0 +highMin: 1.0 +highMax: 1.0 +relative: false +scalingCount: 3 +scaling0: 0.0 +scaling1: 0.2631579 +scaling2: 0.0 +timelineCount: 3 +timeline0: 0.0 +timeline1: 0.5068493 +timeline2: 1.0 +- Options - +attached: false +continuous: true +aligned: false +additive: true +behind: false +- Image Path - +data\particle-cloud.png diff --git a/tests/gdx-tests-desktop/src/com/badlogic/gdx/tests/desktop/JoglTestStarter.java b/tests/gdx-tests-desktop/src/com/badlogic/gdx/tests/desktop/JoglTestStarter.java index d928029a0..84475a0e9 100644 --- a/tests/gdx-tests-desktop/src/com/badlogic/gdx/tests/desktop/JoglTestStarter.java +++ b/tests/gdx-tests-desktop/src/com/badlogic/gdx/tests/desktop/JoglTestStarter.java @@ -4,6 +4,8 @@ package com.badlogic.gdx.tests.desktop; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; import javax.swing.DefaultListSelectionModel; import javax.swing.JButton; @@ -23,18 +25,23 @@ public class JoglTestStarter { static class TestList extends JPanel { public TestList () { setLayout(new BorderLayout()); - + final JList list = new JList(GdxTests.getNames()); - JButton button = new JButton("Run Test"); + final JButton button = new JButton("Run Test"); JScrollPane pane = new JScrollPane(list); DefaultListSelectionModel m = new DefaultListSelectionModel(); m.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); m.setLeadAnchorNotificationEnabled(false); - list.setSelectionModel(m); - + list.setSelectionModel(m); + + list.addMouseListener(new MouseAdapter() { + public void mouseClicked (MouseEvent event) { + if (event.getClickCount() == 2) button.doClick(); + } + }); + button.addActionListener(new ActionListener() { - @Override public void actionPerformed (ActionEvent e) { String testName = (String)list.getSelectedValue(); GdxTest test = GdxTests.newTest(testName); @@ -53,6 +60,8 @@ public class JoglTestStarter { frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setContentPane(new TestList()); frame.pack(); + frame.setSize(frame.getWidth(), 600); + frame.setLocationRelativeTo(null); frame.setVisible(true); } } diff --git a/tests/gdx-tests-lwjgl/data/particle-cloud.png b/tests/gdx-tests-lwjgl/data/particle-cloud.png new file mode 100644 index 0000000000000000000000000000000000000000..d375f43f55026ee71c1ff86cadb24eea7fccda0d GIT binary patch literal 9294 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 Z0^U5Vnwsymf3WeB=WOq4S7Q^D`9GhTSjhkY literal 0 HcmV?d00001 diff --git a/tests/gdx-tests-lwjgl/data/particle.png b/tests/gdx-tests-lwjgl/data/particle.png new file mode 100644 index 0000000000000000000000000000000000000000..632fcc107a0ecee9ff7e21b586a39ed6d6a6876a GIT binary patch literal 1821 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%nF$y5hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8vuSMv>2~2MaLa!T6y`Y4UTL84#CABECEH%ZgC_h&L>|v`++-`BkX&zK> z3U0T!;MA)Rbc{YIT9Kj|CIn17ASOJ~0y*$xpPC0u>qWps&5@s33(PB%JzX3_DsCMK z@6Nkzz_TUQvhcOdtu4;i6K_2Kdfc2RqFc>(lTFr7LoEw7^FxuB6Av)Or0$;f&Lv1? zZdvT~Kj-76{?E}=+BchepC8EZkDa@MGY8!?oCk9a9k&LqLJsxt0vj9eT^ME zAG9Z2d_FChN$H~c!QKbVECyGYm}d!#-)Ej!p&M~XbmAZBV;`n9?D!#mQ1`@R3qc>n z9F`=}i3j%Z>TGCdjcc%UanY{XI_-n4UH=l}gYG@sIreGyOy}_O|7^X(AvuA0B6HR9 zWeT-dXMAY;GtZ}<)i9jn(8|KbcGh5y48;WQM&<~OqkYyBj+@R`_+rk;>Y;YyE6)?- z1g0XsLsOn*3uMjvpt45wH48`Qd$V~-iC(*P65k1S9RCr|$(R-8u6IG=!sLfOIX(h& zly}*2oyaWDdS>{xis#d$GpF?~#8xT$tle}l=2^#U7XOLyLB}pTXuo(9|DZ18&+H4H z1!`(0`cu^UU;L8x_f%hgv{Z*@Sn(DIx9>jBPP|_!IANZ{watuAePx#h$8G38(x;w%y0cRE&SL3o;aw|V zYOLfB*4o^ux%=Do?|$ytH-9hwZ8LFIN5kt`ebdb(bQNE69-8KnrFGeKYIbfE-yXTj z$_7J*^(|co()YZVxVEKj(#@?*_iV2)`%V`v`Y~^V@`sz{GbT@*apVh&*N*p*n;lo$ zab4)y>T>K>VD#3dr=DdVH+46%<(~4h;-A#Ya_8?;MK`$LjSJR|xO~(1C472}B+CEffG0QJKD%Vn;anUPF z#qHBSfp?!pn78T1H`eeyV$}(m|2uXe`KU>z`Ot11MOuV~Z+1_Wpvm#4! z?jcoG*35Y3O-tu&TD0cJJN?D`tl}H~T$pxpPsJpmRqAtg9lj~QGVp+9MMcGl)GtjQ paU6Oatn-flm;c?i{n{VZ0}O)Nf7>%OxkEq|mZz(q%Q~loCIB68z|sH! literal 0 HcmV?d00001 diff --git a/tests/gdx-tests-lwjgl/data/test.p b/tests/gdx-tests-lwjgl/data/test.p new file mode 100644 index 000000000..10d884532 --- /dev/null +++ b/tests/gdx-tests-lwjgl/data/test.p @@ -0,0 +1,567 @@ +simple +- Delay - +active: false +- Duration - +lowMin: 1.0 +lowMax: 1.0 +- Count - +min: 10 +max: 1000 +- Emission - +lowMin: 0.0 +lowMax: 0.0 +highMin: 10.0 +highMax: 10.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Life - +lowMin: 0.0 +lowMax: 0.0 +highMin: 1.0 +highMax: 1.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Life Offset - +active: false +- X Offset - +active: false +- Y Offset - +active: false +- Spawn Shape - +shape: point +- Spawn Width - +lowMin: 0.0 +lowMax: 0.0 +highMin: 0.0 +highMax: 0.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Spawn Height - +lowMin: 0.0 +lowMax: 0.0 +highMin: 0.0 +highMax: 0.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Size - +lowMin: 0.0 +lowMax: 0.0 +highMin: 32.0 +highMax: 32.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Velocity - +active: true +lowMin: 0.0 +lowMax: 0.0 +highMin: 80.0 +highMax: 80.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Angle - +active: true +lowMin: 0.0 +lowMax: 0.0 +highMin: 1.0 +highMax: 360.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Rotation - +active: false +- Wind - +active: false +- Gravity - +active: false +- Tint - +colorsCount: 3 +colors0: 1.0 +colors1: 1.0 +colors2: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Transparency - +lowMin: 0.0 +lowMax: 0.0 +highMin: 1.0 +highMax: 1.0 +relative: false +scalingCount: 4 +scaling0: 0.0 +scaling1: 1.0 +scaling2: 1.0 +scaling3: 0.0 +timelineCount: 4 +timeline0: 0.0 +timeline1: 0.26712328 +timeline2: 0.72602737 +timeline3: 1.0 +- Options - +attached: false +continuous: true +aligned: false +additive: true +behind: false +- Image Path - +data/particle.png + + +fire +- Delay - +active: false +- Duration - +lowMin: 1.0 +lowMax: 1.0 +- Count - +min: 10 +max: 1000 +- Emission - +lowMin: 0.0 +lowMax: 0.0 +highMin: 10.0 +highMax: 10.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Life - +lowMin: 0.0 +lowMax: 0.0 +highMin: 0.7 +highMax: 1.3 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Life Offset - +active: false +- X Offset - +active: false +- Y Offset - +active: false +- Spawn Shape - +shape: point +- Spawn Width - +lowMin: 0.0 +lowMax: 0.0 +highMin: 0.0 +highMax: 0.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Spawn Height - +lowMin: 0.0 +lowMax: 0.0 +highMin: 0.0 +highMax: 0.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Size - +lowMin: 0.0 +lowMax: 0.0 +highMin: 80.0 +highMax: 80.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Velocity - +active: true +lowMin: 0.0 +lowMax: 0.0 +highMin: 40.0 +highMax: 40.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Angle - +active: true +lowMin: 0.0 +lowMax: 0.0 +highMin: 1.0 +highMax: 360.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Rotation - +active: true +lowMin: 1.0 +lowMax: 360.0 +highMin: -180.0 +highMax: 180.0 +relative: true +scalingCount: 2 +scaling0: 0.0 +scaling1: 1.0 +timelineCount: 2 +timeline0: 0.0 +timeline1: 1.0 +- Wind - +active: false +- Gravity - +active: false +- Tint - +colorsCount: 3 +colors0: 1.0 +colors1: 0.21176471 +colors2: 0.0 +timelineCount: 1 +timeline0: 0.0 +- Transparency - +lowMin: 0.0 +lowMax: 0.0 +highMin: 1.0 +highMax: 1.0 +relative: false +scalingCount: 4 +scaling0: 0.0 +scaling1: 1.0 +scaling2: 1.0 +scaling3: 0.0 +timelineCount: 4 +timeline0: 0.0 +timeline1: 0.2 +timeline2: 0.6712329 +timeline3: 1.0 +- Options - +attached: true +continuous: true +aligned: false +additive: true +behind: false +- Image Path - +data\particle-fire.png + + +stars +- Delay - +active: false +- Duration - +lowMin: 1.0 +lowMax: 1.0 +- Count - +min: 0 +max: 1000 +- Emission - +lowMin: 0.0 +lowMax: 0.0 +highMin: 10.0 +highMax: 10.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Life - +lowMin: 0.0 +lowMax: 0.0 +highMin: 1.0 +highMax: 1.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Life Offset - +active: false +- X Offset - +active: false +- Y Offset - +active: false +- Spawn Shape - +shape: point +- Spawn Width - +lowMin: 0.0 +lowMax: 0.0 +highMin: 0.0 +highMax: 0.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Spawn Height - +lowMin: 0.0 +lowMax: 0.0 +highMin: 0.0 +highMax: 0.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Size - +lowMin: 0.0 +lowMax: 0.0 +highMin: 64.0 +highMax: 64.0 +relative: false +scalingCount: 6 +scaling0: 0.0 +scaling1: 1.0 +scaling2: 0.33333334 +scaling3: 1.0 +scaling4: 0.4509804 +scaling5: 1.0 +timelineCount: 6 +timeline0: 0.0 +timeline1: 0.12328767 +timeline2: 0.28767124 +timeline3: 0.4041096 +timeline4: 0.5753425 +timeline5: 0.70547944 +- Velocity - +active: true +lowMin: 0.0 +lowMax: 0.0 +highMin: 80.0 +highMax: 80.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Angle - +active: true +lowMin: 0.0 +lowMax: 0.0 +highMin: 1.0 +highMax: 360.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Rotation - +active: true +lowMin: 1.0 +lowMax: 360.0 +highMin: -90.0 +highMax: 89.0 +relative: true +scalingCount: 2 +scaling0: 0.0 +scaling1: 1.0 +timelineCount: 2 +timeline0: 0.0 +timeline1: 1.0 +- Wind - +active: false +- Gravity - +active: false +- Tint - +colorsCount: 9 +colors0: 0.0 +colors1: 0.105882354 +colors2: 1.0 +colors3: 0.0 +colors4: 1.0 +colors5: 0.09803922 +colors6: 1.0 +colors7: 0.0 +colors8: 0.0 +timelineCount: 3 +timeline0: 0.0 +timeline1: 0.63705105 +timeline2: 1.0 +- Transparency - +lowMin: 0.0 +lowMax: 0.0 +highMin: 1.0 +highMax: 1.0 +relative: false +scalingCount: 5 +scaling0: 1.0 +scaling1: 1.0 +scaling2: 0.0 +scaling3: 0.0 +scaling4: 1.0 +timelineCount: 5 +timeline0: 0.0 +timeline1: 0.25342464 +timeline2: 0.74657536 +timeline3: 0.9315069 +timeline4: 1.0 +- Options - +attached: false +continuous: true +aligned: false +additive: true +behind: false +- Image Path - +data\particle-star.png + + +smoke +- Delay - +active: false +- Duration - +lowMin: 1.0 +lowMax: 1.0 +- Count - +min: 0 +max: 1000 +- Emission - +lowMin: 0.0 +lowMax: 0.0 +highMin: 10.0 +highMax: 10.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Life - +lowMin: 0.0 +lowMax: 0.0 +highMin: 3.0 +highMax: 3.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Life Offset - +active: false +- X Offset - +active: false +- Y Offset - +active: false +- Spawn Shape - +shape: square +- Spawn Width - +lowMin: 0.0 +lowMax: 0.0 +highMin: 480.0 +highMax: 480.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Spawn Height - +lowMin: 0.0 +lowMax: 0.0 +highMin: 320.0 +highMax: 320.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Size - +lowMin: 0.0 +lowMax: 0.0 +highMin: 256.0 +highMax: 256.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Velocity - +active: true +lowMin: 10.0 +lowMax: 10.0 +highMin: 0.0 +highMax: 0.0 +relative: false +scalingCount: 2 +scaling0: 0.0 +scaling1: 1.0 +timelineCount: 2 +timeline0: 0.0 +timeline1: 1.0 +- Angle - +active: true +lowMin: 0.0 +lowMax: 0.0 +highMin: 1.0 +highMax: 360.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Rotation - +active: true +lowMin: 1.0 +lowMax: 360.0 +highMin: 3.0 +highMax: 10.0 +relative: true +scalingCount: 2 +scaling0: 0.0 +scaling1: 1.0 +timelineCount: 2 +timeline0: 0.0 +timeline1: 1.0 +- Wind - +active: false +- Gravity - +active: false +- Tint - +colorsCount: 6 +colors0: 1.0 +colors1: 0.0 +colors2: 0.0 +colors3: 1.0 +colors4: 0.9843137 +colors5: 0.0 +timelineCount: 2 +timeline0: 0.0 +timeline1: 1.0 +- Transparency - +lowMin: 0.0 +lowMax: 0.0 +highMin: 1.0 +highMax: 1.0 +relative: false +scalingCount: 3 +scaling0: 0.0 +scaling1: 0.2631579 +scaling2: 0.0 +timelineCount: 3 +timeline0: 0.0 +timeline1: 0.5068493 +timeline2: 1.0 +- Options - +attached: false +continuous: true +aligned: false +additive: true +behind: false +- Image Path - +data\particle-cloud.png diff --git a/tests/gdx-tests-lwjgl/src/com/badlogic/gdx/tests/lwjgl/LwjglTestStarter.java b/tests/gdx-tests-lwjgl/src/com/badlogic/gdx/tests/lwjgl/LwjglTestStarter.java index 627b0a42b..4d6e17fdc 100644 --- a/tests/gdx-tests-lwjgl/src/com/badlogic/gdx/tests/lwjgl/LwjglTestStarter.java +++ b/tests/gdx-tests-lwjgl/src/com/badlogic/gdx/tests/lwjgl/LwjglTestStarter.java @@ -4,6 +4,8 @@ package com.badlogic.gdx.tests.lwjgl; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; import javax.swing.DefaultListSelectionModel; import javax.swing.JButton; @@ -21,18 +23,23 @@ public class LwjglTestStarter { static class TestList extends JPanel { public TestList () { setLayout(new BorderLayout()); - + final JList list = new JList(GdxTests.getNames()); - JButton button = new JButton("Run Test"); + final JButton button = new JButton("Run Test"); JScrollPane pane = new JScrollPane(list); DefaultListSelectionModel m = new DefaultListSelectionModel(); m.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); m.setLeadAnchorNotificationEnabled(false); - list.setSelectionModel(m); - + list.setSelectionModel(m); + + list.addMouseListener(new MouseAdapter() { + public void mouseClicked (MouseEvent event) { + if (event.getClickCount() == 2) button.doClick(); + } + }); + button.addActionListener(new ActionListener() { - @Override public void actionPerformed (ActionEvent e) { String testName = (String)list.getSelectedValue(); GdxTest test = GdxTests.newTest(testName); @@ -51,6 +58,8 @@ public class LwjglTestStarter { frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setContentPane(new TestList()); frame.pack(); + frame.setSize(frame.getWidth(), 600); + frame.setLocationRelativeTo(null); frame.setVisible(true); } } diff --git a/tests/gdx-tests/src/com/badlogic/gdx/tests/ParticleEmitterTest.java b/tests/gdx-tests/src/com/badlogic/gdx/tests/ParticleEmitterTest.java new file mode 100644 index 000000000..761f2d4c6 --- /dev/null +++ b/tests/gdx-tests/src/com/badlogic/gdx/tests/ParticleEmitterTest.java @@ -0,0 +1,109 @@ + +package com.badlogic.gdx.tests; + +import java.util.ArrayList; + +import com.badlogic.gdx.Files.FileType; +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.Input; +import com.badlogic.gdx.InputAdapter; +import com.badlogic.gdx.InputListener; +import com.badlogic.gdx.graphics.BitmapFont; +import com.badlogic.gdx.graphics.BitmapFont.HAlignment; +import com.badlogic.gdx.graphics.BitmapFontCache; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.GL10; +import com.badlogic.gdx.graphics.Sprite; +import com.badlogic.gdx.graphics.SpriteBatch; +import com.badlogic.gdx.graphics.Texture.TextureFilter; +import com.badlogic.gdx.graphics.Texture.TextureWrap; +import com.badlogic.gdx.graphics.particles.ParticleEffect; +import com.badlogic.gdx.graphics.particles.ParticleEmitter; +import com.badlogic.gdx.tests.utils.GdxTest; + +public class ParticleEmitterTest implements GdxTest { + private SpriteBatch spriteBatch; + private BitmapFont font; + ParticleEffect effect; + int emitterIndex; + ArrayList emitters; + int particleCount = 10; + + public void surfaceCreated () { + if (spriteBatch != null) return; + spriteBatch = new SpriteBatch(); + + font = new BitmapFont(Gdx.files.getFileHandle("data/verdana39.fnt", FileType.Internal), Gdx.files.getFileHandle( + "data/verdana39.png", FileType.Internal), false); + + effect = new ParticleEffect(); + effect.load(Gdx.files.getFileHandle("data/test.p", FileType.Internal), "data", FileType.Internal); + effect.setPosition(Gdx.graphics.getWidth() / 2, Gdx.graphics.getHeight() / 2); + emitters = new ArrayList(effect.getEmitters()); + effect.getEmitters().clear(); + effect.getEmitters().add(emitters.get(0)); + + Gdx.input.addInputListener(new InputListener() { + public boolean touchUp (int x, int y, int pointer) { + return false; + } + + public boolean touchDragged (int x, int y, int pointer) { + effect.setPosition(x, Gdx.graphics.getHeight() - y); + return false; + } + + public boolean touchDown (int x, int y, int pointer) { + effect.setPosition(x, Gdx.graphics.getHeight() - y); + return false; + } + + public boolean keyUp (int keycode) { + return false; + } + + public boolean keyTyped (char character) { + return false; + } + + public boolean keyDown (int keycode) { + ParticleEmitter emitter = emitters.get(emitterIndex); + if (keycode == Input.Keys.KEYCODE_DPAD_UP) + particleCount += 5; + else if (keycode == Input.Keys.KEYCODE_DPAD_DOWN) + particleCount -= 5; + else if (keycode == Input.Keys.KEYCODE_SPACE) + emitterIndex = (emitterIndex + 1) % emitters.size(); + else + return false; + particleCount = Math.max(0, particleCount); + if (particleCount > emitter.getMaxParticleCount()) emitter.setMaxParticleCount(particleCount * 2); + emitter.getEmission().setHigh(particleCount / emitter.getLife().getHighMax()); + effect.getEmitters().clear(); + effect.getEmitters().add(emitters.get(emitterIndex)); + return false; + } + }); + } + + public void surfaceChanged (int width, int height) { + } + + public void render () { + GL10 gl = Gdx.graphics.getGL10(); + gl.glClear(GL10.GL_COLOR_BUFFER_BIT); + spriteBatch.begin(); + effect.draw(spriteBatch, Gdx.graphics.getDeltaTime()); + font.draw(spriteBatch, Gdx.graphics.getFramesPerSecond() + " fps", 5, 40, Color.WHITE); + int activeCount = emitters.get(emitterIndex).getActiveCount(); + font.draw(spriteBatch, activeCount + "/" + particleCount + " particles", 5, Gdx.graphics.getHeight() - 5, Color.WHITE); + spriteBatch.end(); + } + + public void dispose () { + } + + public boolean needsGL20 () { + return false; + } +} diff --git a/tests/gdx-tests/src/com/badlogic/gdx/tests/utils/GdxTests.java b/tests/gdx-tests/src/com/badlogic/gdx/tests/utils/GdxTests.java index f99f2104a..5eeb639f5 100644 --- a/tests/gdx-tests/src/com/badlogic/gdx/tests/utils/GdxTests.java +++ b/tests/gdx-tests/src/com/badlogic/gdx/tests/utils/GdxTests.java @@ -26,6 +26,7 @@ import com.badlogic.gdx.tests.MeshTest; import com.badlogic.gdx.tests.Mpg123Test; import com.badlogic.gdx.tests.MultitouchTest; import com.badlogic.gdx.tests.ObjTest; +import com.badlogic.gdx.tests.ParticleEmitterTest; import com.badlogic.gdx.tests.Pong; import com.badlogic.gdx.tests.SimpleTest; import com.badlogic.gdx.tests.SoundTest; @@ -75,6 +76,7 @@ public class GdxTests Mpg123Test.class, MultitouchTest.class, ObjTest.class, + ParticleEmitterTest.class, Pong.class, SimpleTest.class, SoundTest.class, -- 2.11.0