Compare commits

..

No commits in common. "35dea757760ff72138aa413efd0e560b3d15b34d" and "9e44b1e93f1f05d84ca7ad06ac691a83bf6a9c08" have entirely different histories.

7 changed files with 54 additions and 71 deletions

View File

@ -1,4 +1,4 @@
package com.me.brickbuster.utils; package com.me.brickbuster;
import com.badlogic.gdx.math.MathUtils; import com.badlogic.gdx.math.MathUtils;
import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.math.Vector2;

View File

@ -42,7 +42,9 @@ public class Brick extends Entity implements PhysicsBody, CollisionListener {
@Override @Override
public void render(SpriteBatch sb, ShapeRenderer sr) { public void render(SpriteBatch sb, ShapeRenderer sr) {
sb.setColor(type.getColor()); sb.setColor(type.getColor());
sb.draw(region, pos.x - BRICK_WIDTH/2, pos.y - BRICK_HEIGHT/2, float x = pos.x - BRICK_WIDTH/2;
float y = pos.y - BRICK_HEIGHT/2;
sb.draw(region, x, y,
BRICK_WIDTH/2, BRICK_HEIGHT/2, BRICK_WIDTH/2, BRICK_HEIGHT/2,
BRICK_WIDTH, BRICK_HEIGHT, BRICK_WIDTH, BRICK_HEIGHT,
1f, 1f, 1f, 1f,

View File

@ -9,6 +9,7 @@ import com.badlogic.gdx.physics.box2d.Body;
import com.badlogic.gdx.physics.box2d.BodyDef; import com.badlogic.gdx.physics.box2d.BodyDef;
import com.badlogic.gdx.physics.box2d.CircleShape; import com.badlogic.gdx.physics.box2d.CircleShape;
import com.badlogic.gdx.physics.box2d.FixtureDef; import com.badlogic.gdx.physics.box2d.FixtureDef;
import com.me.brickbuster.Utils;
import com.me.brickbuster.entity.Ball; import com.me.brickbuster.entity.Ball;
import com.me.brickbuster.entity.Entity; import com.me.brickbuster.entity.Entity;
import com.me.brickbuster.entity.Paddle; import com.me.brickbuster.entity.Paddle;
@ -16,6 +17,7 @@ import com.me.brickbuster.physics.CollisionListener;
import com.me.brickbuster.physics.EntityType; import com.me.brickbuster.physics.EntityType;
import com.me.brickbuster.physics.PhysicsBody; import com.me.brickbuster.physics.PhysicsBody;
import com.me.brickbuster.state.PlayState; import com.me.brickbuster.state.PlayState;
import net.dermetfan.utils.Pair;
public abstract class PowerUp extends Entity implements PhysicsBody, CollisionListener { public abstract class PowerUp extends Entity implements PhysicsBody, CollisionListener {

View File

@ -15,7 +15,7 @@ public class GridLevelLoader implements LevelLoader {
private int playCount = 0; private int playCount = 0;
public GridLevelLoader(PlayState state) { public GridLevelLoader(PlayState state) {
this(state, false, false); this(state, false, false)
} }
public GridLevelLoader(PlayState state, boolean randomShape, boolean randomType) { public GridLevelLoader(PlayState state, boolean randomShape, boolean randomType) {

View File

@ -2,7 +2,6 @@ package com.me.brickbuster.state;
import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input; import com.badlogic.gdx.Input;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.math.Vector3; import com.badlogic.gdx.math.Vector3;
import com.me.brickbuster.BrickBuster; import com.me.brickbuster.BrickBuster;
@ -24,7 +23,6 @@ public class MenuState extends State {
public void render() { public void render() {
game.sb.setProjectionMatrix(game.cam.combined); game.sb.setProjectionMatrix(game.cam.combined);
game.sb.begin(); game.sb.begin();
game.sb.setColor(Color.WHITE);
game.sb.draw(playButton, game.sb.draw(playButton,
BrickBuster.BOARD_WIDTH/2-playButton.getWidth()/2, BrickBuster.BOARD_WIDTH/2-playButton.getWidth()/2,
BrickBuster.BOARD_HEIGHT/2-playButton.getHeight()/2); BrickBuster.BOARD_HEIGHT/2-playButton.getHeight()/2);

View File

@ -2,20 +2,17 @@ package com.me.brickbuster.state;
import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.physics.box2d.*; import com.badlogic.gdx.physics.box2d.*;
import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.Array;
import com.me.brickbuster.BrickBuster; import com.me.brickbuster.BrickBuster;
import com.me.brickbuster.utils.CompositeIterator;
import com.me.brickbuster.entity.*; import com.me.brickbuster.entity.*;
import com.me.brickbuster.entity.powerup.PowerUp; import com.me.brickbuster.entity.powerup.PowerUp;
import com.me.brickbuster.layout.BrickLayout; import com.me.brickbuster.layout.*;
import com.me.brickbuster.layout.FileLevelLoader;
import com.me.brickbuster.layout.Level;
import com.me.brickbuster.layout.LevelLoader;
import com.me.brickbuster.physics.Box2dContactListener; import com.me.brickbuster.physics.Box2dContactListener;
import com.me.brickbuster.physics.EntityType; import com.me.brickbuster.physics.EntityType;
import com.me.brickbuster.physics.PhysicsBody;
import java.util.Iterator; import java.util.Iterator;
@ -84,20 +81,25 @@ public class PlayState extends FieldState {
long start = System.nanoTime(); long start = System.nanoTime();
game.sb.begin(); game.sb.begin();
Iterator<? extends Entity> it = CompositeIterator.concat(balls, bricks); for (Brick block : bricks) {
while (it.hasNext()) { block.render(game.sb, game.sr);
it.next().render(game.sb, game.sr); }
for (Ball ball : balls) {
ball.render(game.sb, game.sr);
} }
game.sb.end(); game.sb.end();
it = CompositeIterator.concat(powerUps, shields); for (PowerUp powerUp : powerUps) {
while (it.hasNext()) { powerUp.render(game.sb, game.sr);
it.next().render(game.sb, game.sr); }
for (Shield shield : shields) {
shield.render(game.sb, game.sr);
} }
paddle.render(game.sb, game.sr); paddle.render(game.sb, game.sr);
//debugRenderer.render(world, game.cam.combined.cpy().scl(PIXEL_PER_METER)); //debugRenderer.render(world, game.cam.combined.cpy().scl(PIXEL_PER_METER));
long renderTime = System.nanoTime() - start; long renderTime = System.nanoTime() - start;
game.fb.begin(); game.fb.begin();
game.font.setColor(Color.GRAY); game.font.setColor(Color.GRAY);
game.font.draw(game.fb, String.format("FPS: %d Update: %.2f ms Render: %.2f ms", game.font.draw(game.fb, String.format("FPS: %d Update: %.2f ms Render: %.2f ms",
@ -108,26 +110,47 @@ public class PlayState extends FieldState {
@Override @Override
public void update(float dt) { public void update(float dt) {
long start = System.nanoTime(); long start = System.nanoTime();
paddle.update(dt); paddle.update(dt);
Iterator<? extends Entity> it = CompositeIterator.concat(balls, powerUps, shields, bricks); for (Iterator<Ball> it = balls.iterator(); it.hasNext();) {
while (it.hasNext()) { Ball ball = it.next();
Entity ent = it.next(); ball.update(dt);
ent.update(dt); if (ball.isDeleted()) {
if (ent.isDeleted()) {
it.remove(); it.remove();
if (ent instanceof PhysicsBody) { world.destroyBody(ball.getBody());
world.destroyBody(((PhysicsBody) ent).getBody());
}
ent.dispose();
} }
} }
if (balls.size == 0) { if (balls.size == 0) {
ballReset(); ballReset();
} }
for (Iterator<PowerUp> it = powerUps.iterator(); it.hasNext();) {
PowerUp powerUp = it.next();
powerUp.update(dt);
if(powerUp.isDeleted()) {
it.remove();
world.destroyBody(powerUp.getBody());
}
}
for (Iterator<Shield> it = shields.iterator(); it.hasNext();) {
Shield shield = it.next();
shield.update(dt);
if(shield.isDeleted()) {
it.remove();
world.destroyBody(shield.getBody());
}
}
for (Iterator<Brick> it = bricks.iterator(); it.hasNext();) {
Brick brick = it.next();
brick.update(dt);
if (brick.isDeleted()) {
it.remove();
brick.dispose();
world.destroyBody(brick.getBody());
}
}
if (bricks.size == 0) { if (bricks.size == 0) {
currentLevel = levelLoader.getNextLevel(); currentLevel = levelLoader.getNextLevel();
if (currentLevel == null) { if (currentLevel == null) {
@ -138,6 +161,7 @@ public class PlayState extends FieldState {
} }
return; return;
} }
world.step(dt, 6, 2); world.step(dt, 6, 2);
updateTime = System.nanoTime() - start; updateTime = System.nanoTime() - start;
} }

View File

@ -1,43 +0,0 @@
package com.me.brickbuster.utils;
import java.util.Iterator;
public class CompositeIterator<T> implements Iterator<T> {
private short index = 0;
private Iterator<? extends T> iterator;
private Iterable<? extends T>[] iterables;
private CompositeIterator(Iterable<? extends T>... iterables) {
this.iterables = iterables;
this.iterator = iterables[index].iterator();
}
@Override
public boolean hasNext() {
if (iterator.hasNext()) {
return true;
} else {
if (++index < iterables.length) {
iterator = iterables[index].iterator();
return hasNext();
}
}
return false;
}
@Override
public T next() {
return iterator.next();
}
@Override
public void remove() {
iterator.remove();
}
public static <E> CompositeIterator<E> concat(Iterable<? extends E>... iterables) {
return new CompositeIterator<E>(iterables);
}
}