X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;f=core%2Fsrc%2Fru%2Fdeadsoftware%2Fcavedroid%2Fgame%2FGameFluidsThread.java;h=d069a4058b171a259f57ab6e8a0de86266424c5b;hb=59d48c1b28c570755327a8fb0827fa57e7fd3914;hp=d404c43aca84b79aaca1bd7b5aac1d1db923238b;hpb=0d17e8d14a41f6fcedf2b52f01cd7ea88186280f;p=cavedroid.git diff --git a/core/src/ru/deadsoftware/cavedroid/game/GameFluidsThread.java b/core/src/ru/deadsoftware/cavedroid/game/GameFluidsThread.java index d404c43..d069a40 100644 --- a/core/src/ru/deadsoftware/cavedroid/game/GameFluidsThread.java +++ b/core/src/ru/deadsoftware/cavedroid/game/GameFluidsThread.java @@ -1,13 +1,15 @@ package ru.deadsoftware.cavedroid.game; +import com.badlogic.gdx.utils.TimeUtils; + import java.util.Arrays; import static ru.deadsoftware.cavedroid.GameScreen.GP; import static ru.deadsoftware.cavedroid.game.GameItems.*; -public class GameFluidsThread extends Thread { +class GameFluidsThread extends Thread { - private static final int FLUID_UPDATE_INTERVAL_MS = 150; + private static final int FLUID_UPDATE_INTERVAL_MS = 100; private static final int FLUID_STATES = 5; private static final int[] WATER_IDS = {8, 60, 61, 62, 63}; @@ -32,7 +34,9 @@ public class GameFluidsThread extends Thread { private int getNextBlockStateId(int id) { int nextState = getNextBlockState(id); - if (nextState == -1) return 0; + if (nextState == -1) { + return 0; + } if (isWater(id)) { return WATER_IDS[nextState]; } @@ -98,27 +102,38 @@ public class GameFluidsThread extends Thread { } private void updateFluids(int x, int y) { - if (!isFluid(id(x, y))) return; - if (drainFluid(x, y)) return; + if (!isFluid(id(x, y))) { + return; + } + if (drainFluid(x, y)) { + return; + } flowFluid(x, y); } private void fluidUpdater() { int midScreen = (int) (GP.renderer.getCamX() + GP.renderer.getWidth() / 2) / 16; - for (int y = 0; y < GP.world.getHeight(); y++) { - for (int x = 0; x < (int) (GP.renderer.getWidth() / 2) / 16 + 1; x++) { + for (int y = GP.world.getHeight() - 1; y >= 0; y--) { + for (int x = 0; x <= GP.world.getWidth() / 2; x++) { updateFluids(midScreen + x, y); updateFluids(midScreen - x, y); } } } + private boolean timeToUpdate() { + if (TimeUtils.timeSinceMillis(fluidLastUpdateTimestamp) >= FLUID_UPDATE_INTERVAL_MS) { + fluidLastUpdateTimestamp = TimeUtils.millis(); + return true; + } + return false; + } + @Override public void run() { while (!this.isInterrupted()) { - if (System.currentTimeMillis() - fluidLastUpdateTimestamp > FLUID_UPDATE_INTERVAL_MS) { + if (timeToUpdate()) { fluidUpdater(); - fluidLastUpdateTimestamp = System.currentTimeMillis(); } } }