Add shield powerup

This commit is contained in:
Matt Low 2018-11-12 21:11:40 +04:00
parent 393b2fae58
commit 219622ff53
3 changed files with 49 additions and 7 deletions

View File

@ -2,16 +2,15 @@ package com.me.brickbuster;
import com.badlogic.gdx.ApplicationAdapter; import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.GL20; import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.g2d.BitmapFont; import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
import com.badlogic.gdx.math.MathUtils; import com.badlogic.gdx.math.MathUtils;
import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.math.Vector2;
import com.me.brickbuster.entity.*; import com.me.brickbuster.entity.*;
import com.me.brickbuster.entity.powerup.GluePowerUp; import com.me.brickbuster.entity.powerup.*;
import com.me.brickbuster.entity.powerup.LongerPaddlePowerUp;
import com.me.brickbuster.entity.powerup.MultiBallPowerUp;
import com.me.brickbuster.entity.powerup.PowerUp;
import java.util.*; import java.util.*;
@ -21,6 +20,8 @@ public class BrickBuster extends ApplicationAdapter {
public static final int HEIGHT = 600; public static final int HEIGHT = 600;
public static final String TITLE = "Brick Buster"; public static final String TITLE = "Brick Buster";
public static final int SHIELD_HEIGHT = 5;
public static final Vector2 HORIZONTAL_EDGE = new Vector2(1, 0); public static final Vector2 HORIZONTAL_EDGE = new Vector2(1, 0);
public static final Vector2 VERTICAL_EDGE = new Vector2(0, 1); public static final Vector2 VERTICAL_EDGE = new Vector2(0, 1);
@ -29,16 +30,20 @@ public class BrickBuster extends ApplicationAdapter {
private BitmapFont font; private BitmapFont font;
private SpriteBatch batch; private SpriteBatch batch;
private ShapeRenderer sr;
private Paddle paddle; private Paddle paddle;
private ArrayList<Ball> balls; private ArrayList<Ball> balls;
private ArrayList<Brick> bricks; private ArrayList<Brick> bricks;
private ArrayList<PowerUp> powerUps; private ArrayList<PowerUp> powerUps;
private boolean shieldActive = false;
@Override @Override
public void create () { public void create () {
font = new BitmapFont(); font = new BitmapFont();
batch = new SpriteBatch(); batch = new SpriteBatch();
sr = new ShapeRenderer();
paddle = new Paddle(this); paddle = new Paddle(this);
@ -66,6 +71,7 @@ public class BrickBuster extends ApplicationAdapter {
Gdx.gl.glClearColor(0.5f,1,1,1); Gdx.gl.glClearColor(0.5f,1,1,1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
long start_update = System.nanoTime(); long start_update = System.nanoTime();
update(Gdx.graphics.getDeltaTime()); update(Gdx.graphics.getDeltaTime());
long finish_update = System.nanoTime() - start_update; long finish_update = System.nanoTime() - start_update;
@ -81,6 +87,14 @@ public class BrickBuster extends ApplicationAdapter {
ball.render(); ball.render();
} }
paddle.render(); paddle.render();
if (shieldActive) {
sr.begin(ShapeRenderer.ShapeType.Filled);
sr.setColor(Color.SALMON);
sr.rect(0, 0, WIDTH, SHIELD_HEIGHT);
sr.end();
}
long finish_render = System.nanoTime() - start_render; long finish_render = System.nanoTime() - start_render;
batch.begin(); batch.begin();
@ -143,6 +157,14 @@ public class BrickBuster extends ApplicationAdapter {
return null; return null;
} }
public void setShieldActive(boolean shieldActive) {
this.shieldActive = shieldActive;
}
public boolean isShieldActive() {
return shieldActive;
}
public ArrayList<Ball> getBalls() { public ArrayList<Ball> getBalls() {
return balls; return balls;
} }
@ -166,6 +188,7 @@ public class BrickBuster extends ApplicationAdapter {
tmp.put(GluePowerUp.class, 30); tmp.put(GluePowerUp.class, 30);
tmp.put(LongerPaddlePowerUp.class, 40); tmp.put(LongerPaddlePowerUp.class, 40);
tmp.put(MultiBallPowerUp.class, 20); tmp.put(MultiBallPowerUp.class, 20);
tmp.put(ShieldPowerUp.class, 40);
powerUpWeights = Collections.unmodifiableMap(tmp); powerUpWeights = Collections.unmodifiableMap(tmp);
int sum = 0; int sum = 0;

View File

@ -75,12 +75,13 @@ public class Ball extends Entity {
Utils.reflect(direction, BrickBuster.VERTICAL_EDGE); Utils.reflect(direction, BrickBuster.VERTICAL_EDGE);
} else if (new_pos.y + RADIUS > BrickBuster.HEIGHT) { } else if (new_pos.y + RADIUS > BrickBuster.HEIGHT) {
Utils.reflect(direction, BrickBuster.HORIZONTAL_EDGE); Utils.reflect(direction, BrickBuster.HORIZONTAL_EDGE);
} else if (new_pos.y - RADIUS < BrickBuster.SHIELD_HEIGHT && getBrickBuster().isShieldActive()) {
Utils.reflect(direction, BrickBuster.HORIZONTAL_EDGE);
getBrickBuster().setShieldActive(false);
} else if (new_pos.y + RADIUS < 0) { } else if (new_pos.y + RADIUS < 0) {
isDead = true; isDead = true;
return; return;
} } else if (direction.y < 0 && new_pos.y <= Paddle.PADDLE_Y + Paddle.PADDLE_HEIGHT + RADIUS) {
if (direction.y < 0 && new_pos.y <= Paddle.PADDLE_Y + Paddle.PADDLE_HEIGHT + RADIUS) {
Pair<Vector2, Vector2> paddle = getBrickBuster().getPaddle().getTopEdge(); Pair<Vector2, Vector2> paddle = getBrickBuster().getPaddle().getTopEdge();
Vector2 lineDir = paddle.getValue().sub(paddle.getKey()); Vector2 lineDir = paddle.getValue().sub(paddle.getKey());
Vector2 nearest = Utils.nearestPoint(paddle.getKey().cpy(), lineDir, new_pos.cpy()); Vector2 nearest = Utils.nearestPoint(paddle.getKey().cpy(), lineDir, new_pos.cpy());

View File

@ -0,0 +1,18 @@
package com.me.brickbuster.entity.powerup;
import com.badlogic.gdx.graphics.Color;
import com.me.brickbuster.BrickBuster;
import com.me.brickbuster.entity.Brick;
public class ShieldPowerUp extends PowerUp {
public ShieldPowerUp(BrickBuster brickBuster, Brick brick) {
super(brickBuster, brick, Color.SALMON);
}
@Override
public void activate() {
getBrickBuster().setShieldActive(true);
}
}