package me.hammerle.supersnuvi.entity; import me.hammerle.supersnuvi.entity.components.BoxMovement; import me.hammerle.supersnuvi.entity.components.DefaultHealth; import me.hammerle.supersnuvi.entity.components.DefaultMovement; import me.hammerle.supersnuvi.entity.components.DefaultEnergy; import me.hammerle.supersnuvi.entity.components.Energy; import me.hammerle.supersnuvi.entity.components.Health; import me.hammerle.supersnuvi.entity.components.StoneMovement; import me.hammerle.supersnuvi.entity.components.ai.HumanController; import me.hammerle.supersnuvi.entity.components.ai.LondonerController; import me.hammerle.supersnuvi.entity.components.ItemCollector; import me.hammerle.supersnuvi.entity.components.ai.PlatformController; import me.hammerle.supersnuvi.entity.components.ai.StartScreenHeroController; import me.hammerle.supersnuvi.entity.components.ai.StoneController; import me.hammerle.supersnuvi.util.SoundUtils.Sound; import me.hammerle.supersnuvi.gamelogic.Level; import me.hammerle.supersnuvi.tiles.Tile; import me.hammerle.supersnuvi.entity.components.IDespawn; import me.hammerle.supersnuvi.entity.components.ai.BoxController; public final class EntityBuilder { public static Entity buildHero(Level level, float x, float y) { Entity hero = new Entity(Tile.SIZE * 0.84375f, Tile.SIZE * 1.84375f, new HumanController(), new DefaultHealth(null, Sound.MIRROR_CRACK, Sound.MIRROR_BREAK), new DefaultEnergy(), new DefaultMovement(12.0f, 0.0f, 50.0f, false), ItemCollector.HERO, (ent) -> level.scheduleReset(), "Hero"); hero.setPosition(x, y); return hero; } public static Entity buildStartScreenHero(Level level, float x, float y) { Entity hero = new Entity(Tile.SIZE * 0.84375f, Tile.SIZE * 1.84375f, new StartScreenHeroController(), new DefaultHealth(null, Sound.MIRROR_CRACK, Sound.MIRROR_BREAK), new DefaultEnergy(), new DefaultMovement(12.0f, 0.0f, 50.0f, false), ItemCollector.HERO, (ent) -> level.scheduleReset(), "Hero"); hero.setPosition(x, y); return hero; } public static Entity buildLondoner(Level level, float x, float y, boolean evil) { Entity londoner = new Entity(Tile.SIZE * 0.4375f, Tile.SIZE * 1.40625f, new LondonerController(evil), new DefaultHealth(null, null, null), new DefaultEnergy(), new DefaultMovement(3.0f, 0.0f, 50.0f, true), ItemCollector.NULL, IDespawn.NULL, evil ? "EvilLondoner" : "Londoner"); londoner.setPosition(x, y); return londoner; } public static Entity buildCrumblingStone(Level level, float x, float y) { Entity stone = new Entity(Tile.SIZE, Tile.SIZE, new StoneController(), Health.NULL, Energy.NULL, StoneMovement.STONE, ItemCollector.NULL, IDespawn.NULL, "CrumblingStone"); stone.setPosition(x, y); return stone; } public static Entity buildPlatform(Level level, float x, float y, int tx) { // render offset: -0.03125, 0 Entity platform = new Entity(Tile.SIZE * tx, Tile.SIZE * 0.78125f, new PlatformController(), Health.NULL, Energy.NULL, StoneMovement.PLATFORM, ItemCollector.NULL, IDespawn.NULL, "Platform"); platform.setPosition(x, y); platform.setBaseFriction(0.0f, 0.0f); return platform; } public static Entity buildBox(Level level, float x, float y, int type) { Entity box = new Entity(Tile.SIZE, Tile.SIZE, new BoxController(type), Health.NULL, Energy.NULL, new BoxMovement(), ItemCollector.NULL, IDespawn.NULL, "Box"); box.setPosition(x, y); return box; } public static Entity fromId(int id, Level level, float x, float y) { switch(id) { case 1: return buildLondoner(level, x, y, true); case 2: return buildLondoner(level, x, y, false); case 3: return buildBox(level, x, y, 0); case 4: return buildBox(level, x, y, 1); case 5: return buildBox(level, x, y, 2); } return null; } }