package me.hammerle.supersnuvi.tiles; import me.hammerle.supersnuvi.entity.Entity; import me.hammerle.supersnuvi.util.BlockDataStorage; import me.hammerle.supersnuvi.util.Face; import me.hammerle.supersnuvi.gamelogic.Level; public class HeadHitOnceTile extends BaseBoxTile { private final BlockDataStorage states = new BlockDataStorage(); private final float tMinX2; private final float tMaxX2; private final float tMinY2; private final float tMaxY2; public HeadHitOnceTile(float tMinX, float tMinY, float tMaxX, float tMaxY, float tMinX2, float tMinY2, float tMaxX2, float tMaxY2) { super(tMinX, tMinY, tMaxX, tMaxY); this.tMinX2 = tMinX2; this.tMaxX2 = tMaxX2; this.tMinY2 = tMinY2; this.tMaxY2 = tMaxY2; } @Override public float getTextureMinX(int x, int y, Level l) { return states.contains(x, y, l) ? tMinX2 : super.getTextureMinX(x, y, l); } @Override public float getTextureMinY(int x, int y, Level l) { return states.contains(x, y, l) ? tMinY2 : super.getTextureMinY(x, y, l); } @Override public float getTextureMaxX(int x, int y, Level l) { return states.contains(x, y, l) ? tMaxX2 : super.getTextureMaxX(x, y, l); } @Override public float getTextureMaxY(int x, int y, Level l) { return states.contains(x, y, l) ? tMaxY2 : super.getTextureMaxY(x, y, l); } @Override public void onEntityCollide(Entity ent, int x, int y, Face face, Level l) { if(face == Face.DOWN && ent.getItemCollector().isHero() && ent.getMotionY() > 0 && states.add(x, y, l)) { l.getTileUpdater().add(l.getData().getBackgroundIndex(), x, y); l.callEvent("tile_hit", (sc) -> { sc.setVar("tile_x", (double) x); sc.setVar("tile_y", (double) y); sc.setVar("entity", ent); }, null); } } @Override public void reset(Level l) { states.clear(l); } @Override public void reset(int x, int y, Level l) { states.clear(x, y, l); } }