DEADSOFTWARE

Remove java serialization
[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / objects / drop / DropController.java
index 6666fc8f64b7edcc75fddf22ea701403b7ea5b5f..7b99676cbaabd769a88549959f7ac05e748dafcb 100644 (file)
@@ -3,16 +3,19 @@ package ru.deadsoftware.cavedroid.game.objects.drop;
 import org.jetbrains.annotations.NotNull;
 import ru.deadsoftware.cavedroid.game.GameItemsHolder;
 import ru.deadsoftware.cavedroid.game.GameScope;
+import ru.deadsoftware.cavedroid.game.model.dto.SaveDataDto;
 import ru.deadsoftware.cavedroid.game.model.item.InventoryItem;
 import ru.deadsoftware.cavedroid.game.model.item.Item;
+import ru.deadsoftware.cavedroid.misc.Saveable;
 
 import javax.inject.Inject;
-import java.io.Serializable;
 import java.util.Iterator;
 import java.util.LinkedList;
 
 @GameScope
-public class DropController implements Serializable {
+public class DropController implements Saveable {
+
+    private static final int SAVE_DATA_VERSION = 1;
 
     public interface Callback {
         void run(Drop drop);
@@ -25,7 +28,9 @@ public class DropController implements Serializable {
     }
 
     public void initDrops(GameItemsHolder gameItemsHolder) {
-        mDrops.forEach((drop) -> drop.initItem(gameItemsHolder));
+        for (Drop drop : mDrops) {
+            drop.initItem(gameItemsHolder);
+        }
     }
 
     public void addDrop(float x, float y, Item item) {
@@ -48,11 +53,36 @@ public class DropController implements Serializable {
     }
 
     public void forEach(Callback callback) {
-        mDrops.forEach(callback::run);
+        for (Drop drop : mDrops) {
+            callback.run(drop);
+        }
     }
 
     public Iterator<Drop> getIterator() {
         return mDrops.iterator();
     }
 
+    @Override
+    @NotNull
+    public SaveDataDto.DropControllerSaveData getSaveData() {
+        final LinkedList<SaveDataDto.DropSaveData> dropSaveData = new LinkedList<>();
+        for (Drop drop : mDrops) {
+            dropSaveData.add(drop.getSaveData());
+        }
+        return new SaveDataDto.DropControllerSaveData(SAVE_DATA_VERSION, dropSaveData);
+    }
+
+    public static DropController fromSaveData(
+            SaveDataDto.DropControllerSaveData saveData, GameItemsHolder gameItemsHolder) {
+        saveData.verifyVersion(SAVE_DATA_VERSION);
+
+        DropController controller = new DropController();
+
+        for (SaveDataDto.DropSaveData dropSaveData : saveData.getDrops()) {
+            controller.mDrops.add(Drop.Companion.fromSaveData(dropSaveData, gameItemsHolder));
+        }
+
+        return controller;
+    }
+
 }