CrumblingStoneTile.java 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package me.hammerle.supersnuvi.tiles;
  2. import java.util.HashSet;
  3. import me.hammerle.supersnuvi.entity.Entity;
  4. import me.hammerle.supersnuvi.entity.EntityBuilder;
  5. import me.hammerle.supersnuvi.gamelogic.Level;
  6. import me.hammerle.supersnuvi.util.BlockDataStorage;
  7. import me.hammerle.supersnuvi.util.CollisionBox;
  8. import me.hammerle.supersnuvi.util.CollisionObject;
  9. import me.hammerle.supersnuvi.util.Face;
  10. import me.hammerle.supersnuvi.util.SoundUtils;
  11. import me.hammerle.supersnuvi.util.Utils;
  12. public class CrumblingStoneTile extends BaseTile
  13. {
  14. private final BlockDataStorage states = new BlockDataStorage();
  15. public CrumblingStoneTile()
  16. {
  17. super(0.1875f, 0.125f, 0.25f, 0.1875f);
  18. super.setCollisionBox(CollisionBox.createScaledTileBox(0.0f, 0.0f, 1.0f, 0.6f));
  19. super.setMovementBox(CollisionBox.createScaledTileBox(0.0f, 0.0f, 1.0f, 0.6f));
  20. }
  21. @Override
  22. public CollisionObject getCollisionBox(int x, int y, Level l)
  23. {
  24. if(states.contains(x, y, l))
  25. {
  26. return CollisionObject.NULL_BOX;
  27. }
  28. return super.getCollisionBox(x, y, l);
  29. }
  30. @Override
  31. public CollisionObject getMovementBox(int x, int y, Level l)
  32. {
  33. if(states.contains(x, y, l))
  34. {
  35. return CollisionObject.NULL_BOX;
  36. }
  37. return super.getMovementBox(x, y, l);
  38. }
  39. @Override
  40. public void onEntityCollide(Entity ent, int x, int y, Face face, Level l)
  41. {
  42. super.onEntityCollide(ent, x, y, face, l);
  43. if(face == Face.UP)
  44. {
  45. if(states.add(x, y, l))
  46. {
  47. ent.getLevel().updateTile(x, y);
  48. l.spawnEntity(EntityBuilder.buildCrumblingStone(l, Utils.toCoord(x), Utils.toCoord(y)));
  49. SoundUtils.playSound(SoundUtils.Sound.STONE_CRUMBLING);
  50. }
  51. }
  52. }
  53. @Override
  54. public boolean shouldRender(int x, int y, Level l)
  55. {
  56. return !states.contains(x, y, l);
  57. }
  58. @Override
  59. public void reset(Level l)
  60. {
  61. states.clear(l);
  62. }
  63. }