X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;f=core%2Fsrc%2Fru%2Fdeadsoftware%2Fcavedroid%2Fgame%2FGameSaver.java;h=39d227844ac1badb1d7898e28490d37019535e70;hb=1e285247085ba04351feb486a0be6aa577f43093;hp=53d147228f96a334a31ce9cd2e575c14b154e55e;hpb=289536374d18bb05cde615c04d9fe576d6ac26bc;p=cavedroid.git diff --git a/core/src/ru/deadsoftware/cavedroid/game/GameSaver.java b/core/src/ru/deadsoftware/cavedroid/game/GameSaver.java index 53d1472..39d2278 100644 --- a/core/src/ru/deadsoftware/cavedroid/game/GameSaver.java +++ b/core/src/ru/deadsoftware/cavedroid/game/GameSaver.java @@ -5,7 +5,8 @@ import com.badlogic.gdx.files.FileHandle; import ru.deadsoftware.cavedroid.MainConfig; import ru.deadsoftware.cavedroid.game.mobs.MobsController; import ru.deadsoftware.cavedroid.game.model.block.Block; -import ru.deadsoftware.cavedroid.game.objects.DropController; +import ru.deadsoftware.cavedroid.game.objects.drop.DropController; +import ru.deadsoftware.cavedroid.game.objects.container.ContainerController; import ru.deadsoftware.cavedroid.game.world.GameWorld; import javax.annotation.CheckForNull; @@ -24,11 +25,18 @@ public class GameSaver { @CheckForNull private DropController mDropController; @CheckForNull + private ContainerController mContainerController; + @CheckForNull private Block[][] mForeMap, mBackMap; - public Data(MobsController mobsController, DropController dropController, Block[][] foreMap, Block[][] backMap) { + public Data(MobsController mobsController, + DropController dropController, + ContainerController containerController, + Block[][] foreMap, + Block[][] backMap) { mMobsController = mobsController; mDropController = dropController; + mContainerController = containerController; mForeMap = foreMap; mBackMap = backMap; } @@ -47,6 +55,13 @@ public class GameSaver { return dropController; } + public ContainerController retrieveFurnaceController() { + assert mContainerController != null; + ContainerController containerController = mContainerController; + mContainerController = null; + return containerController; + } + public Block[][] retrieveForeMap() { assert mForeMap != null; Block[][] foreMap = mForeMap; @@ -62,7 +77,11 @@ public class GameSaver { } public boolean isEmpty() { - return mMobsController == null && mDropController == null && mForeMap == null && mBackMap == null; + return mMobsController == null && + mDropController == null && + mContainerController == null && + mForeMap == null && + mBackMap == null; } } @@ -118,7 +137,7 @@ public class GameSaver { BufferedOutputStream out = new BufferedOutputStream(file.write(false)); - out.write(intToBytes(SAVE_VERSION)); + out.write(SAVE_VERSION); out.write(intToBytes(width)); out.write(intToBytes(height)); @@ -127,16 +146,16 @@ public class GameSaver { run = 0; for (Block[] blocks : map) { int newValue = dict.get(blocks[y].getParams().getKey()); - if (newValue != block) { - out.write(intToBytes(run)); - out.write(intToBytes(block)); + if (run >= 0xFF || newValue != block) { + out.write(run); + out.write(block); run = 0; block = dict.get(blocks[y].getParams().getKey()); } run++; } - out.write(intToBytes(run)); - out.write(intToBytes(block)); + out.write(run); + out.write(block); } out.flush(); @@ -150,7 +169,7 @@ public class GameSaver { DataInputStream in = new DataInputStream(file.read()); - version = in.readInt(); + version = in.readByte(); if (SAVE_VERSION == version) { width = in.readInt(); @@ -158,8 +177,8 @@ public class GameSaver { map = new Block[width][height]; for (int y = 0; y < height; y++) { for (int x = 0; x < width; x += run) { - run = in.readInt(); - block = in.readInt(); + run = in.readUnsignedByte(); + block = in.readUnsignedByte(); for (int i = x; i < x + run; i++) { map[i][y] = gameItemsHolder.getBlock(dict[block]); } @@ -183,10 +202,12 @@ public class GameSaver { int version = in.readInt(); DropController dropController; MobsController mobsController; + ContainerController containerController; if (SAVE_VERSION == version) { dropController = (DropController) in.readObject(); mobsController = (MobsController) in.readObject(); + containerController = (ContainerController) in.readObject(); } else { throw new Exception("version mismatch"); } @@ -201,7 +222,7 @@ public class GameSaver { throw new Exception("couldn't load"); } - return new Data(mobsController, dropController, foreMap, backMap); + return new Data(mobsController, dropController, containerController, foreMap, backMap); } catch (Exception e) { Gdx.app.error("GameSaver", e.getMessage()); } @@ -212,6 +233,7 @@ public class GameSaver { public static void save(MainConfig mainConfig, DropController dropController, MobsController mobsController, + ContainerController containerController, GameWorld gameWorld) { String folder = mainConfig.getGameFolder(); FileHandle file = Gdx.files.absolute(folder + "/saves/"); @@ -229,6 +251,7 @@ public class GameSaver { out.writeInt(SAVE_VERSION); out.writeObject(dropController); out.writeObject(mobsController); + out.writeObject(containerController); out.close(); saveDict(Gdx.files.absolute(folder + "/saves/dict"), dict);