Tile extends Observable implements Drawable, Tickable { @Override public void tick() { if (tileType == TileRegister.getInstance().getTileType("dirt")) { double random = new Random().nextDouble(); if (random < 0.000016) { tileType = TileRegister.getInstance().getTileType("grass"); } else if (random < 0.000032) { tileType = TileRegister.getInstance().getTileType("grass2"); } else if (random < 0.00005) { tileType = TileRegister.getInstance().getTileType("grass3"); } } if (tileEntity != null) { tileEntity.tick(); } if ((System.currentTimeMillis() - lastWaterUpdateTime) > 2000) { decreaseWaterLevel(); List<Point> selection = GameManager.getInstance().getSelection(); if (selection != null) { updateSelected(selection); } lastWaterUpdateTime = System.currentTimeMillis(); } } Tile(int x, int y, int tileType); @Override double getWorldX(); @Override double getWorldY(); double getWidth(); double getHeight(); void draw(Viewport v, GraphicsContext g); void setTileType(int tileType); void clearProperties(); void setProperty(TileProperty prop, Object value); Boolean hasProperty(TileProperty prop); Object getProperty(TileProperty prop); void removeProperty(TileProperty prop); int getTileType(); TileEntity getTileEntity(); void setTileEntity(TileEntity tileEntity); @Override void tick(); float getWaterLevel(); void increaseWaterLevel(); void setWaterLevel(float newLevel); void decreaseWaterLevel(); void handleObservers(); double getPollution(); void setPollution(double pollution); boolean getSafeZone(); void setSafeZone(boolean safe); void setActiveSeason(String season); String getActiveSeason(); boolean adjacentToWater();  }
@Test public void testTick() { }