Coins can be collected
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
package main.entities;
|
package main.entities;
|
||||||
|
|
||||||
import main.SheetLoader;
|
import main.SheetLoader;
|
||||||
|
import main.entities.player.Player;
|
||||||
|
|
||||||
public class Coin extends AnimatedEntity {
|
public class Coin extends AnimatedEntity {
|
||||||
|
|
||||||
@@ -8,6 +9,11 @@ public class Coin extends AnimatedEntity {
|
|||||||
|
|
||||||
public Coin() {
|
public Coin() {
|
||||||
loader.generateFigures(8, 8, new int[] { 8, 8, 1 });
|
loader.generateFigures(8, 8, new int[] { 8, 8, 1 });
|
||||||
|
|
||||||
|
loader.getFigur(0).animationsGeschwindigkeitSetzen(100);
|
||||||
|
loader.getFigur(1).animationsGeschwindigkeitSetzen(100);
|
||||||
|
loader.getFigur(2).animationsGeschwindigkeitSetzen(100);
|
||||||
|
|
||||||
actionFigur.neuerZustand(loader.getFigur(0), "gold");
|
actionFigur.neuerZustand(loader.getFigur(0), "gold");
|
||||||
actionFigur.neuerZustand(loader.getFigur(1), "silver");
|
actionFigur.neuerZustand(loader.getFigur(1), "silver");
|
||||||
actionFigur.neuerZustand(loader.getFigur(2), "bronze");
|
actionFigur.neuerZustand(loader.getFigur(2), "bronze");
|
||||||
@@ -18,10 +24,18 @@ public class Coin extends AnimatedEntity {
|
|||||||
width = 0.375f;
|
width = 0.375f;
|
||||||
height = 0.25f;
|
height = 0.25f;
|
||||||
spriteOffsetY = -0.1f;
|
spriteOffsetY = -0.1f;
|
||||||
|
enablePushBack = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void update() {
|
protected void update() {
|
||||||
super.update();
|
super.update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onEntityCollision(Entity e) {
|
||||||
|
if (e instanceof Player) {
|
||||||
|
deleteEntity();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ public abstract class Entity implements Ticker {
|
|||||||
protected float friction = 0.2f; // Entschleunigung des entities in gameunits pro frame.
|
protected float friction = 0.2f; // Entschleunigung des entities in gameunits pro frame.
|
||||||
protected float width = 1f, height = 1f; // Breite und Höhe der Hitbox.
|
protected float width = 1f, height = 1f; // Breite und Höhe der Hitbox.
|
||||||
private boolean deleteEntity; // Wenn true wird dieses Entity von der map gelöscht
|
private boolean deleteEntity; // Wenn true wird dieses Entity von der map gelöscht
|
||||||
|
protected boolean enablePushBack = true; // Ob das Entity von anderen Entities weggedrückt werden kann.
|
||||||
|
|
||||||
// Das ist die Ticker-Methode von ea; wird jeden frame ausgeführt (frameloop)
|
// Das ist die Ticker-Methode von ea; wird jeden frame ausgeführt (frameloop)
|
||||||
@Override
|
@Override
|
||||||
@@ -85,14 +86,28 @@ public abstract class Entity implements Ticker {
|
|||||||
float dist = dist(e);
|
float dist = dist(e);
|
||||||
float sizes = esize / 2 + size / 2;
|
float sizes = esize / 2 + size / 2;
|
||||||
if (dist < sizes) {
|
if (dist < sizes) {
|
||||||
|
if (enablePushBack && e.enablePushBack) {
|
||||||
float overlap = dist - sizes;
|
float overlap = dist - sizes;
|
||||||
posX += (overlap * (e.posX - posX));
|
float xDist = e.posX - posX;
|
||||||
posY += (overlap * (e.posY - posY));
|
float yDist = e.posY - posY;
|
||||||
|
if (xDist == 0f) {
|
||||||
|
xDist = (float) (Math.random() - 0.5f) * 0.01f;
|
||||||
|
}
|
||||||
|
if (yDist == 0f) {
|
||||||
|
yDist = (float) (Math.random() - 0.5f) * 0.01f;
|
||||||
|
}
|
||||||
|
posX += (overlap * xDist);
|
||||||
|
posY += (overlap * yDist);
|
||||||
|
}
|
||||||
|
onEntityCollision(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void onEntityCollision(Entity e) {
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gehört mit zur collision detection. Hier werden kollisionen aufgelöst.
|
* Gehört mit zur collision detection. Hier werden kollisionen aufgelöst.
|
||||||
*/
|
*/
|
||||||
@@ -144,7 +159,7 @@ public abstract class Entity implements Ticker {
|
|||||||
Vektor v = new Vektor(e.posX - posX, e.posY - posY);
|
Vektor v = new Vektor(e.posX - posX, e.posY - posY);
|
||||||
;
|
;
|
||||||
if (v.x == 0 && v.y == 0) {
|
if (v.x == 0 && v.y == 0) {
|
||||||
return new Vektor(0.0000001f, 0.0000001f);
|
return new Vektor(0.001f, 0.001f);
|
||||||
}
|
}
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ import main.Main;
|
|||||||
import main.Tile;
|
import main.Tile;
|
||||||
import main.entities.AnimatedEntity;
|
import main.entities.AnimatedEntity;
|
||||||
import main.entities.Entity;
|
import main.entities.Entity;
|
||||||
import main.entities.LivingEntity;
|
|
||||||
import main.entities.player.Player;
|
import main.entities.player.Player;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -49,8 +48,8 @@ public abstract class Map extends Knoten implements Ticker {
|
|||||||
for (int i = 0; i < entities.size(); i++) {
|
for (int i = 0; i < entities.size(); i++) {
|
||||||
Entity e = entities.get(i);
|
Entity e = entities.get(i);
|
||||||
if (e.isReadyToDelete()) {
|
if (e.isReadyToDelete()) {
|
||||||
if (e instanceof LivingEntity) {
|
if (e instanceof AnimatedEntity) {
|
||||||
entfernen(((LivingEntity) e).actionFigur);
|
entfernen(((AnimatedEntity) e).actionFigur);
|
||||||
}
|
}
|
||||||
Main.instance.manager.abmelden(e);
|
Main.instance.manager.abmelden(e);
|
||||||
entities.remove(e);
|
entities.remove(e);
|
||||||
|
|||||||
@@ -18,7 +18,10 @@ public class TestWorld extends World {
|
|||||||
getCurrentMap().addAnimatedEntity(s);
|
getCurrentMap().addAnimatedEntity(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
getCurrentMap().addAnimatedEntity(new Coin());
|
for (int i = 0; i < 15; i++) {
|
||||||
|
Coin c = new Coin();
|
||||||
|
c.setPosX(i * 0.5f + 4);
|
||||||
|
getCurrentMap().addAnimatedEntity(c);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user