Coins can be collected

This commit is contained in:
Asecave
2021-06-30 18:03:47 +02:00
parent f386ef49f6
commit d440ad8f67
4 changed files with 46 additions and 15 deletions

View File

@@ -1,13 +1,19 @@
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 {
private static SheetLoader loader = new SheetLoader("/res/images/coins.png"); private static SheetLoader loader = new SheetLoader("/res/images/coins.png");
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();
}
}
} }

View File

@@ -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;
} }

View File

@@ -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);

View File

@@ -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);
}
} }
} }