summaryrefslogtreecommitdiffstats
path: root/core/src/ch/asynk
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/ch/asynk')
-rw-r--r--core/src/ch/asynk/gdx/boardgame/FramedSprite.java60
-rw-r--r--core/src/ch/asynk/gdx/boardgame/animations/ShellFireAnimation.java83
2 files changed, 83 insertions, 60 deletions
diff --git a/core/src/ch/asynk/gdx/boardgame/FramedSprite.java b/core/src/ch/asynk/gdx/boardgame/FramedSprite.java
index 33ca5ce..33a6eb2 100644
--- a/core/src/ch/asynk/gdx/boardgame/FramedSprite.java
+++ b/core/src/ch/asynk/gdx/boardgame/FramedSprite.java
@@ -1,31 +1,53 @@
package ch.asynk.gdx.boardgame;
import com.badlogic.gdx.graphics.Texture;
+import com.badlogic.gdx.graphics.g2d.Batch;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
-public class FramedSprite
+public class FramedSprite implements Drawable
{
- public Texture texture;
- public TextureRegion[] frames;
- public final int width;
- public final int height;
- public final int cols;
+ private TextureRegion[][] frames;
+ private TextureRegion frame;
public final int rows;
+ public final int cols;
+ public float x;
+ public float y;
+ public float a;
- public FramedSprite(Texture texture, int cols, int rows)
+ public FramedSprite(Texture texture, int rows, int cols)
{
- this.cols = cols;
+ this.frames = TextureRegion.split(texture, (texture.getWidth() / cols), (texture.getHeight() / rows));
+ this.frame = frames[0][0];
this.rows = rows;
- this.width = (texture.getWidth() / cols);
- this.height = (texture.getHeight() / rows);
- this.texture = texture;
- TextureRegion[][] tmp = TextureRegion.split(texture, width, height);
- frames = new TextureRegion[cols * rows];
- int idx = 0;
- for (int i = 0; i < rows; i++) {
- for (int j = 0; j < cols; j++) {
- frames[idx++] = tmp[i][j];
- }
- }
+ this.cols = cols;
+ this.x = 0;
+ this.y = 0;
+ this.a = 0;
+ }
+
+ public FramedSprite(FramedSprite other)
+ {
+ this.frames = other.frames;
+ this.frame = other.frame;
+ this.rows = other.rows;
+ this.cols = other.cols;
+ this.x = other.x;
+ this.y = other.y;
+ this.a = other.a;
+ }
+
+ public void setFrame(int row, int col)
+ {
+ this.frame = frames[row][col];
+ }
+
+ public TextureRegion getFrame()
+ {
+ return frame;
+ }
+
+ @Override public void draw(Batch batch)
+ {
+ batch.draw(frame, x, y, 0, 0, frame.getRegionWidth(), frame.getRegionHeight(), 1f, 1f, a);
}
}
diff --git a/core/src/ch/asynk/gdx/boardgame/animations/ShellFireAnimation.java b/core/src/ch/asynk/gdx/boardgame/animations/ShellFireAnimation.java
index ee041e5..6cc7227 100644
--- a/core/src/ch/asynk/gdx/boardgame/animations/ShellFireAnimation.java
+++ b/core/src/ch/asynk/gdx/boardgame/animations/ShellFireAnimation.java
@@ -7,7 +7,6 @@ import java.util.Random;
import com.badlogic.gdx.audio.Sound;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.Batch;
-import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.math.MathUtils;
import com.badlogic.gdx.utils.Pool;
@@ -53,15 +52,15 @@ public class ShellFireAnimation extends TimedAnimation implements Pool.Poolable
float shellSpeed,
float smokeDuration,
float explosionDuration,
- final Texture shellTexture, int shellC, int shellR,
- final Texture explosionTexture, int explosionC, int explosionR,
+ final Texture shellTexture, int shellR, int shellC,
+ final Texture explosionTexture, int explosionR, int explosionC,
final Sound shellFireSnd,
final Sound explosionSnd
)
{
Config cfg = new Config(maxFireDelay, maxShootScattering, shellSpeed, smokeDuration, explosionDuration,
- new FramedSprite(shellTexture, shellC, shellR),
- new FramedSprite(explosionTexture, explosionC, explosionR),
+ new FramedSprite(shellTexture, shellR, shellC),
+ new FramedSprite(explosionTexture, explosionR, explosionC),
shellFireSnd, explosionSnd
);
configs.put(name, cfg);
@@ -119,22 +118,18 @@ public class ShellFireAnimation extends TimedAnimation implements Pool.Poolable
private float smokeEndTime;
private float explosionEndTime;
- private TextureRegion fireRegion;
- private float fireX;
- private float fireY;
- private float fireA;
- private float fireW;
- private float fireDx;
- private float fireDy;
- private float fireDw;
+ private FramedSprite shellSprites;
+ private float shellW;
+ private float shellDx;
+ private float shellDy;
+ private float shellDw;
private int smokeFrame;
private float smokeDf;
- private int explosionStart;
+ private FramedSprite explosionSprites;
private int explosionFrame;
- private float explosionX;
- private float explosionY;
+ private int explosionRow;
private float explosionDf;
private ShellFireAnimation()
@@ -168,26 +163,28 @@ public class ShellFireAnimation extends TimedAnimation implements Pool.Poolable
this.explosionEndTime = this.hitTime + explosionDuration;
float endTime = (this.smokeEndTime > this.explosionEndTime ? this.smokeEndTime : this.explosionEndTime);
- // fire vars
- this.fireX = x0;
- this.fireY = y0;
- this.fireA = a;
- this.fireW = 0f;
- this.fireDw = (w / fireDuration);
- this.fireDx = (dx / fireDuration);
- this.fireDy = (dy / fireDuration);
- this.fireRegion = new TextureRegion(cfg.shellSprites.frames[0]);
+ // shell vars
+ this.shellSprites = new FramedSprite(cfg.shellSprites);
+ this.shellSprites.x = x0;
+ this.shellSprites.y = y0;
+ this.shellSprites.a = a;
+ this.shellW = 0f;
+ this.shellDw = (w / fireDuration);
+ this.shellDx = (dx / fireDuration);
+ this.shellDy = (dy / fireDuration);
// smoke vars
this.smokeFrame = 0;
- this.smokeDf = (cfg.shellSprites.rows / smokeDuration);
+ this.smokeDf = ((shellSprites.rows - 1) / smokeDuration);
// explosion vars
- this.explosionX = (x1 - (cfg.explosionSprites.width / 2.0f));
- this.explosionY = (y1 - (cfg.explosionSprites.height / 2.0f));
- this.explosionDf = (cfg.explosionSprites.cols / explosionDuration);
- this.explosionStart = (random.nextInt(cfg.explosionSprites.rows) * cfg.explosionSprites.cols);
- this.explosionFrame = this.explosionStart;
+ this.explosionFrame = 0;
+ this.explosionSprites = new FramedSprite(cfg.explosionSprites);
+ this.explosionSprites.x = (x1 - (explosionSprites.getFrame().getRegionWidth() / 2.0f));
+ this.explosionSprites.y = (y1 - (explosionSprites.getFrame().getRegionHeight() / 2.0f));
+ this.explosionDf = (explosionSprites.cols / explosionDuration);
+ this.explosionRow = random.nextInt(explosionSprites.rows);
+ this.explosionSprites.setFrame(explosionRow, 0);
this.fired = false;
this.hit = false;
@@ -214,10 +211,10 @@ public class ShellFireAnimation extends TimedAnimation implements Pool.Poolable
}
if (!hit && (elapsed < hitTime)) {
- fireW += (fireDw * delta);
- fireX += (fireDx * delta);
- fireY += (fireDy * delta);
- fireRegion.setRegionWidth((int) fireW);
+ this.shellW += (shellDw * delta);
+ this.shellSprites.x += (shellDx * delta);
+ this.shellSprites.y += (shellDy * delta);
+ this.shellSprites.getFrame().setRegionWidth((int) shellW);
return;
}
@@ -232,18 +229,22 @@ public class ShellFireAnimation extends TimedAnimation implements Pool.Poolable
float dt = (elapsed - hitTime);
if (elapsed < smokeEndTime) {
- int frame = (int) (dt * smokeDf);
+ int frame = (int) (dt * smokeDf) + 1;
if (frame != smokeFrame) {
smokeFrame = frame;
- fireRegion.setRegion(cfg.shellSprites.frames[smokeFrame]);
- fireRegion.setRegionWidth((int) fireW);
+ this.shellSprites.setFrame(smokeFrame, 0);
+ this.shellSprites.getFrame().setRegionWidth((int) shellW);
}
} else {
drawFire = false;
}
if (elapsed < explosionEndTime) {
- explosionFrame = (explosionStart + (int) (dt * explosionDf));
+ int frame = (int) (dt * explosionDf);
+ if (frame != explosionFrame) {
+ explosionFrame = frame;
+ explosionSprites.setFrame(explosionRow, explosionFrame);
+ }
} else {
drawExplosion = false;
}
@@ -252,11 +253,11 @@ public class ShellFireAnimation extends TimedAnimation implements Pool.Poolable
@Override public void draw(Batch batch)
{
if (drawFire) {
- batch.draw(fireRegion, fireX, fireY, 0, 0, fireRegion.getRegionWidth(), fireRegion.getRegionHeight(), 1f, 1f, fireA);
+ this.shellSprites.draw(batch);
}
if (drawExplosion) {
- batch.draw(cfg.explosionSprites.frames[explosionFrame], explosionX, explosionY);
+ this.explosionSprites.draw(batch);
}
}
}