package buildcraft.core.tablet; import buildcraft.api.tablet.TabletBitmap; import buildcraft.api.tablet.TabletTicker; class TabletRenderer { private TabletBitmap currDisplay, newDisplay; private final TabletTicker refreshRate = new TabletTicker(0.035F); private boolean changed = false; private boolean isTicking = false; private int tickLocation = 7; public TabletRenderer(TabletBitmap display) { this.currDisplay = display; } public TabletBitmap get() { return currDisplay; } public boolean shouldChange() { boolean oldChanged = changed; changed = false; return oldChanged; } public void update(TabletBitmap display) { synchronized (refreshRate) { newDisplay = display; isTicking = true; tickLocation = 7; refreshRate.reset(); } } public boolean tick(float tick) { if (isTicking) { synchronized (refreshRate) { refreshRate.add(tick); changed = false; for (int times = 0; times < refreshRate.getTicks(); times++) { for (int j = 0; j < currDisplay.height; j++) { for (int i = 0; i < currDisplay.width; i++) { int oldI = currDisplay.get(i, j); int newI = newDisplay.get(i, j); if (Math.abs(oldI - newI) == tickLocation) { if (oldI < newI) { changed = true; currDisplay.set(i, j, oldI + 1); } else if (oldI > newI) { changed = true; currDisplay.set(i, j, oldI - 1); } } } } tickLocation--; if (!changed || tickLocation == 0) { isTicking = false; break; } } refreshRate.tick(); } return true; } else { return false; } } }