package it.marteEngine.test.fuzzy; import it.marteEngine.ME; import it.marteEngine.ResourceManager; import it.marteEngine.entity.Entity; import it.marteEngine.entity.PlatformerEntity; import it.marteEngine.tween.Tweener; import org.newdawn.slick.GameContainer; import org.newdawn.slick.Graphics; import org.newdawn.slick.SlickException; public class FuzzyBat extends Entity { public static final String BAT = "bat"; private float moveSpeed = 3; protected boolean faceRight = true; private boolean toRemove; /** To handle effects **/ private Tweener tweener = FuzzyFactory.getFadeMoveTweener(); private float ty; public FuzzyBat(float x, float y) throws SlickException { super(x, y); addAnimation(ResourceManager.getSpriteSheet("batLeft"), "moveLeft", true, 0, 0, 1, 2); addAnimation(ResourceManager.getSpriteSheet("batRight"), "moveRight", true, 0, 0, 1, 2); addType(BAT, SOLID); setHitBox(0, 0, 32, 32); speed.x = moveSpeed; setAnim("moveRight"); } @Override public void update(GameContainer container, int delta) throws SlickException { if (!toRemove) { super.update(container, delta); if (faceRight && collide(SOLID, x + 1, y) != null) { faceRight = false; setAnim("moveLeft"); } else if (!faceRight && collide(SOLID, x - 1, y) != null) { faceRight = true; setAnim("moveRight"); } ty = y; Entity player = collide(PLAYER, x, y - 1); if (player != null) { toRemove = true; ((PlatformerEntity) player).jump(); FuzzyGameWorld.addPoints(100); } player = collide(PLAYER, x + 1, y); damagePlayer(player); player = collide(PLAYER, x - 1, y); damagePlayer(player); if (faceRight) { speed.x = moveSpeed; } else { speed.x = moveSpeed * -1; } } else { tweener.update(delta); } if (getAlpha() == 0f) { if (!FuzzyGameWorld.killSound.playing()) { FuzzyGameWorld.killSound.play(); } ME.world.remove(this); } } @Override public void render(GameContainer container, Graphics g) throws SlickException { super.render(container, g); if (toRemove) { // if to remove, apply effects setAlpha(tweener.getTween(FuzzyFactory.FADE).getValue()); ty -= tweener.getTween(FuzzyFactory.MOVE_UP).getValue(); FuzzyMain.font.drawString(x, ty, "100"); } } private boolean damagePlayer(Entity player) { if (player != null) { FuzzyPlayer pl = (FuzzyPlayer) ME.world.find(PLAYER); pl.damage(-1); // change direction if (faceRight) { this.x -= 5; faceRight = false; this.speed.x = -moveSpeed; } else { this.x += 5; faceRight = true; this.speed.x = +moveSpeed; } return true; } return false; } }