began work on collision detection and added first enemy
This commit is contained in:
parent
279658daa0
commit
1bc44e0b87
45
core/src/zero1hd/polyjet/entity/BoxOfEnemies.java
Executable file
45
core/src/zero1hd/polyjet/entity/BoxOfEnemies.java
Executable file
@ -0,0 +1,45 @@
|
|||||||
|
package zero1hd.polyjet.entity;
|
||||||
|
|
||||||
|
import com.badlogic.gdx.utils.Array;
|
||||||
|
import com.badlogic.gdx.utils.Pool;
|
||||||
|
import com.badlogic.gdx.utils.Pools;
|
||||||
|
|
||||||
|
public class BoxOfEnemies {
|
||||||
|
private final Pool<VoidCircle> voidCirclePool = Pools.get(VoidCircle.class);
|
||||||
|
private final Array<Entity> ActiveEnemies;
|
||||||
|
|
||||||
|
public BoxOfEnemies() {
|
||||||
|
ActiveEnemies = new Array<Entity>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Entity getEntity(Entities entity) {
|
||||||
|
switch (entity) {
|
||||||
|
case VOID_CIRCLE:
|
||||||
|
VoidCircle voidCircle = voidCirclePool.obtain();
|
||||||
|
ActiveEnemies.add(voidCircle);
|
||||||
|
return voidCircle;
|
||||||
|
case BAR_BEAT:
|
||||||
|
return null;
|
||||||
|
case SHARDS:
|
||||||
|
return null;
|
||||||
|
default:
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void free(Entity entity, Entities type) {
|
||||||
|
switch (type) {
|
||||||
|
case BAR_BEAT:
|
||||||
|
break;
|
||||||
|
case SHARDS:
|
||||||
|
break;
|
||||||
|
case VOID_CIRCLE:
|
||||||
|
ActiveEnemies.removeValue(entity, true);
|
||||||
|
voidCirclePool.free((VoidCircle) entity);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
26
core/src/zero1hd/polyjet/entity/CollisionDetector.java
Executable file
26
core/src/zero1hd/polyjet/entity/CollisionDetector.java
Executable file
@ -0,0 +1,26 @@
|
|||||||
|
package zero1hd.polyjet.entity;
|
||||||
|
|
||||||
|
import com.badlogic.gdx.utils.Array;
|
||||||
|
|
||||||
|
public class CollisionDetector {
|
||||||
|
Array<Entity> firstGroup;
|
||||||
|
Array<Entity> secondGroup;
|
||||||
|
|
||||||
|
public CollisionDetector(Array<Entity> firstGroup, Array<Entity> secondGroup) {
|
||||||
|
this.firstGroup = firstGroup;
|
||||||
|
this.secondGroup = secondGroup;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void collisionCheck() {
|
||||||
|
while (firstGroup.iterator().hasNext()) {
|
||||||
|
Entity firstEntity = firstGroup.iterator().next();
|
||||||
|
while (secondGroup.iterator().hasNext()) {
|
||||||
|
Entity secondEntity = secondGroup.iterator().next();
|
||||||
|
if (firstEntity.getHitZone().overlaps(secondEntity.getHitZone())) {
|
||||||
|
firstEntity.collided(secondEntity);
|
||||||
|
secondEntity.collided(firstEntity);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,7 +1,7 @@
|
|||||||
package zero1hd.polyjet.entity;
|
package zero1hd.polyjet.entity;
|
||||||
|
|
||||||
public enum Entities {
|
public enum Entities {
|
||||||
BAR_BEAT, VOID_CIRCLE, SHARDS;
|
POLYJET, BAR_BEAT, VOID_CIRCLE, SHARDS;
|
||||||
|
|
||||||
public float x;
|
public float x;
|
||||||
public float y;
|
public float y;
|
||||||
|
61
core/src/zero1hd/polyjet/entity/Entity.java
Normal file → Executable file
61
core/src/zero1hd/polyjet/entity/Entity.java
Normal file → Executable file
@ -1,52 +1,23 @@
|
|||||||
package zero1hd.polyjet.entity;
|
package zero1hd.polyjet.entity;
|
||||||
|
|
||||||
import com.badlogic.gdx.math.Rectangle;
|
import com.badlogic.gdx.math.Rectangle;
|
||||||
import com.badlogic.gdx.scenes.scene2d.Actor;
|
|
||||||
|
|
||||||
public class Entity extends Actor {
|
public interface Entity {
|
||||||
private Rectangle box;
|
/**
|
||||||
|
* Called whenever a collision is detected
|
||||||
|
* @param entity is the entity that hit this one.
|
||||||
|
*/
|
||||||
|
public void collided(Entity entity);
|
||||||
|
|
||||||
public Entity() {
|
/**
|
||||||
box = new Rectangle();
|
* gets the box that represents the hit box to calculate whether there is a collision or not
|
||||||
}
|
* @return the object that represents the hit box
|
||||||
|
*/
|
||||||
|
public Rectangle getHitZone();
|
||||||
|
|
||||||
@Override
|
/**
|
||||||
public void setHeight(float height) {
|
* gets the type of entity this entity is
|
||||||
box.height = height;
|
* @return the entity type
|
||||||
super.setHeight(height);
|
*/
|
||||||
}
|
public Entities getEntityType();
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setWidth(float width) {
|
|
||||||
box.width = width;
|
|
||||||
super.setWidth(width);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setSize(float width, float height) {
|
|
||||||
box.setSize(width, height);
|
|
||||||
super.setSize(width, height);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setX(float x) {
|
|
||||||
box.setX(x);
|
|
||||||
super.setX(x);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setY(float y) {
|
|
||||||
box.setY(y);
|
|
||||||
super.setY(y);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setPosition(float x, float y) {
|
|
||||||
box.setPosition(x, y);
|
|
||||||
super.setPosition(x, y);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Rectangle getBox() {
|
|
||||||
return box;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -3,27 +3,27 @@ package zero1hd.polyjet.entity;
|
|||||||
import com.badlogic.gdx.graphics.Texture;
|
import com.badlogic.gdx.graphics.Texture;
|
||||||
import com.badlogic.gdx.graphics.g2d.Batch;
|
import com.badlogic.gdx.graphics.g2d.Batch;
|
||||||
import com.badlogic.gdx.graphics.g2d.ParticleEffect;
|
import com.badlogic.gdx.graphics.g2d.ParticleEffect;
|
||||||
|
import com.badlogic.gdx.math.Rectangle;
|
||||||
import com.badlogic.gdx.scenes.scene2d.Actor;
|
import com.badlogic.gdx.scenes.scene2d.Actor;
|
||||||
import com.badlogic.gdx.scenes.scene2d.actions.Actions;
|
import com.badlogic.gdx.scenes.scene2d.actions.Actions;
|
||||||
|
|
||||||
import zero1hd.polyjet.Polyjet;
|
import zero1hd.polyjet.Polyjet;
|
||||||
|
|
||||||
public class PolyJetEntity extends Entity {
|
public class PolyJetEntity extends Actor implements Entity {
|
||||||
|
|
||||||
private ParticleEffect thrust;
|
private ParticleEffect thrust;
|
||||||
private Texture polyjet;
|
private Texture polyjet;
|
||||||
private ParticleEffect teleportCloak;
|
private ParticleEffect teleportCloak;
|
||||||
|
private Rectangle hitbox;
|
||||||
|
|
||||||
public boolean moveLeft, moveRight, moveUp, moveDown, teleporting;
|
public boolean moveLeft, moveRight, moveUp, moveDown, teleporting;
|
||||||
private float rate;
|
private float rate;
|
||||||
public PolyJetEntity(Polyjet core, float rate, String jet) {
|
public PolyJetEntity(Polyjet core, float rate, String jet) {
|
||||||
this.rate = rate;
|
this.rate = rate;
|
||||||
|
|
||||||
setSize(1.5f, 1.5f);
|
setSize(1.5f, 1.5f);
|
||||||
|
|
||||||
setPosition(Polyjet.GAME_AREA_WIDTH/2 - getWidth()/2, -4f);
|
setPosition(Polyjet.GAME_AREA_WIDTH/2 - getWidth()/2, -4f);
|
||||||
|
|
||||||
|
hitbox = new Rectangle(getX(), getY(), getWidth(), getHeight());
|
||||||
polyjet = core.getAssetManager().get("polyjet-" + jet + ".png", Texture.class);
|
polyjet = core.getAssetManager().get("polyjet-" + jet + ".png", Texture.class);
|
||||||
thrust = core.getAssetManager().get("standard_thrust.p", ParticleEffect.class);
|
thrust = core.getAssetManager().get("standard_thrust.p", ParticleEffect.class);
|
||||||
thrust.start();
|
thrust.start();
|
||||||
@ -35,11 +35,12 @@ public class PolyJetEntity extends Entity {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void act(float delta) {
|
public void act(float delta) {
|
||||||
|
hitbox.setPosition(getX(), getY());
|
||||||
|
|
||||||
thrust.setPosition(getX()+(getWidth())/2 - 1f/16f, getY()-0.15f);
|
thrust.setPosition(getX()+(getWidth())/2 - 1f/16f, getY()-0.15f);
|
||||||
thrust.update(delta);
|
thrust.update(delta);
|
||||||
teleportCloak.setPosition(getX() +(getWidth()-1)/2, getY() + (getHeight()-1)/2);
|
teleportCloak.setPosition(getX() +(getWidth()-1)/2, getY() + (getHeight()-1)/2);
|
||||||
|
|
||||||
super.act(delta);
|
|
||||||
|
|
||||||
//Movement!
|
//Movement!
|
||||||
if (moveLeft && !moveRight) {
|
if (moveLeft && !moveRight) {
|
||||||
@ -56,6 +57,7 @@ public class PolyJetEntity extends Entity {
|
|||||||
moveBy(0, -rate*delta);
|
moveBy(0, -rate*delta);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
super.act(delta);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -64,4 +66,18 @@ public class PolyJetEntity extends Entity {
|
|||||||
batch.draw(polyjet, getX(), getY(), getWidth(), getHeight());
|
batch.draw(polyjet, getX(), getY(), getWidth(), getHeight());
|
||||||
super.draw(batch, parentAlpha);
|
super.draw(batch, parentAlpha);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Rectangle getHitZone() {
|
||||||
|
return hitbox;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Entities getEntityType() {
|
||||||
|
return Entities.POLYJET;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void collided(Entity entity) {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
102
core/src/zero1hd/polyjet/entity/VoidCircle.java
Executable file
102
core/src/zero1hd/polyjet/entity/VoidCircle.java
Executable file
@ -0,0 +1,102 @@
|
|||||||
|
package zero1hd.polyjet.entity;
|
||||||
|
|
||||||
|
import com.badlogic.gdx.graphics.Color;
|
||||||
|
import com.badlogic.gdx.graphics.g2d.Batch;
|
||||||
|
import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
|
||||||
|
import com.badlogic.gdx.graphics.glutils.ShapeRenderer.ShapeType;
|
||||||
|
import com.badlogic.gdx.math.Rectangle;
|
||||||
|
import com.badlogic.gdx.scenes.scene2d.Actor;
|
||||||
|
import com.badlogic.gdx.utils.Pool.Poolable;
|
||||||
|
|
||||||
|
public class VoidCircle extends Actor implements Entity, Poolable {
|
||||||
|
float timer;
|
||||||
|
float endRadius;
|
||||||
|
private float currentRadius;
|
||||||
|
Rectangle hitBox;
|
||||||
|
ShapeRenderer shapeRenderer;
|
||||||
|
float growthRate;
|
||||||
|
boolean done;
|
||||||
|
|
||||||
|
public VoidCircle(ShapeRenderer shapeRenderer) {
|
||||||
|
hitBox = new Rectangle();
|
||||||
|
this.shapeRenderer = shapeRenderer;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void init(float endRadius, float x, float y, float growthRate, float warningTime) {
|
||||||
|
timer = warningTime;
|
||||||
|
this.endRadius = endRadius;
|
||||||
|
setSize(2*endRadius, 2*endRadius);
|
||||||
|
setX(x);
|
||||||
|
setY(y);
|
||||||
|
this.growthRate = growthRate;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void act(float delta) {
|
||||||
|
hitBox.setPosition(getX(), getY());
|
||||||
|
if (timer > 0) {
|
||||||
|
timer -= delta;
|
||||||
|
} else {
|
||||||
|
if (currentRadius < endRadius) {
|
||||||
|
growCurrentRadius(delta*growthRate);
|
||||||
|
} else {
|
||||||
|
endRadius = -1f;
|
||||||
|
if (currentRadius > 0) {
|
||||||
|
growCurrentRadius(delta*-3*growthRate);
|
||||||
|
} else {
|
||||||
|
done = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
super.act(delta);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void draw(Batch batch, float parentAlpha) {
|
||||||
|
if (timer <= 0) {
|
||||||
|
shapeRenderer.set(ShapeType.Filled);
|
||||||
|
shapeRenderer.setColor(Color.BLACK);
|
||||||
|
shapeRenderer.circle(getX(), getY(), currentRadius);
|
||||||
|
}
|
||||||
|
shapeRenderer.set(ShapeType.Line);
|
||||||
|
shapeRenderer.setColor(Color.RED);
|
||||||
|
shapeRenderer.circle(getX(), getY(), endRadius);
|
||||||
|
super.draw(batch, parentAlpha);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void reset() {
|
||||||
|
hitBox.set(0, 0, 0, 0);
|
||||||
|
currentRadius = 0;
|
||||||
|
growthRate = 0;
|
||||||
|
timer = 0;
|
||||||
|
endRadius = 0;
|
||||||
|
done = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCurrentRadius(float currentRadius) {
|
||||||
|
this.currentRadius = currentRadius;
|
||||||
|
hitBox.setSize(2*(currentRadius*currentRadius));
|
||||||
|
hitBox.setCenter(getX(), getY());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void growCurrentRadius(float currentRadius) {
|
||||||
|
this.currentRadius += currentRadius;
|
||||||
|
hitBox.setSize(2*(currentRadius*currentRadius));
|
||||||
|
hitBox.setCenter(getX(), getY());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Rectangle getHitZone() {
|
||||||
|
return hitBox;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Entities getEntityType() {
|
||||||
|
return Entities.VOID_CIRCLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void collided(Entity entity) {
|
||||||
|
}
|
||||||
|
}
|
@ -7,6 +7,7 @@ import com.badlogic.gdx.InputProcessor;
|
|||||||
import com.badlogic.gdx.ScreenAdapter;
|
import com.badlogic.gdx.ScreenAdapter;
|
||||||
import com.badlogic.gdx.graphics.Color;
|
import com.badlogic.gdx.graphics.Color;
|
||||||
import com.badlogic.gdx.graphics.GL20;
|
import com.badlogic.gdx.graphics.GL20;
|
||||||
|
import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
|
||||||
import com.badlogic.gdx.scenes.scene2d.Actor;
|
import com.badlogic.gdx.scenes.scene2d.Actor;
|
||||||
import com.badlogic.gdx.scenes.scene2d.Stage;
|
import com.badlogic.gdx.scenes.scene2d.Stage;
|
||||||
import com.badlogic.gdx.scenes.scene2d.ui.Image;
|
import com.badlogic.gdx.scenes.scene2d.ui.Image;
|
||||||
@ -37,6 +38,8 @@ public class GameScreen extends ScreenAdapter implements InputProcessor {
|
|||||||
|
|
||||||
private AudioData music;
|
private AudioData music;
|
||||||
|
|
||||||
|
private ShapeRenderer shapeRenderer;
|
||||||
|
|
||||||
public GameScreen(Polyjet polyJet) {
|
public GameScreen(Polyjet polyJet) {
|
||||||
core = polyJet;
|
core = polyJet;
|
||||||
|
|
||||||
@ -87,7 +90,7 @@ public class GameScreen extends ScreenAdapter implements InputProcessor {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void changed(ChangeEvent event, Actor actor) {
|
public void changed(ChangeEvent event, Actor actor) {
|
||||||
recommence();
|
restart();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -120,13 +123,16 @@ public class GameScreen extends ScreenAdapter implements InputProcessor {
|
|||||||
Gdx.gl.glClearColor(1f, 1f, 1f, 1f);
|
Gdx.gl.glClearColor(1f, 1f, 1f, 1f);
|
||||||
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);
|
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);
|
||||||
gameArea.getViewport().apply();
|
gameArea.getViewport().apply();
|
||||||
|
|
||||||
|
shapeRenderer.begin();
|
||||||
gameArea.draw();
|
gameArea.draw();
|
||||||
|
shapeRenderer.end();
|
||||||
|
|
||||||
|
|
||||||
overlay.getViewport().apply();
|
overlay.getViewport().apply();
|
||||||
overlay.draw();
|
overlay.draw();
|
||||||
if (!paused) {
|
if (!paused) {
|
||||||
music.readIndexUpdate();
|
music.readIndexUpdate();
|
||||||
gameArea.setAudioIndex(music.getReadIndex());
|
|
||||||
scoreLabel.setText("Score: " + gameArea.getScore());
|
scoreLabel.setText("Score: " + gameArea.getScore());
|
||||||
gameArea.act(delta);
|
gameArea.act(delta);
|
||||||
|
|
||||||
@ -135,12 +141,13 @@ public class GameScreen extends ScreenAdapter implements InputProcessor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
overlay.act(delta);
|
overlay.act(delta);
|
||||||
} else {
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!music.getPlaybackMusic().isPlaying()) {
|
if (!music.getPlaybackMusic().isPlaying()) {
|
||||||
end(true);
|
end(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
super.render(delta);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void end(boolean trueEnd) {
|
private void end(boolean trueEnd) {
|
||||||
@ -179,7 +186,7 @@ public class GameScreen extends ScreenAdapter implements InputProcessor {
|
|||||||
super.resume();
|
super.resume();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void recommence() {
|
public void restart() {
|
||||||
paused = false;
|
paused = false;
|
||||||
pauseMenu.remove();
|
pauseMenu.remove();
|
||||||
music.getPlaybackMusic().play();
|
music.getPlaybackMusic().play();
|
||||||
@ -207,7 +214,7 @@ public class GameScreen extends ScreenAdapter implements InputProcessor {
|
|||||||
|
|
||||||
case Keys.ESCAPE:
|
case Keys.ESCAPE:
|
||||||
if (paused) {
|
if (paused) {
|
||||||
recommence();
|
restart();
|
||||||
} else {
|
} else {
|
||||||
pause();
|
pause();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user