DEADSOFTWARE

New saving fromat and rewrite in kotlin
[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / objects / drop / DropController.java
1 package ru.deadsoftware.cavedroid.game.objects.drop;
3 import org.jetbrains.annotations.NotNull;
4 import ru.deadsoftware.cavedroid.game.GameItemsHolder;
5 import ru.deadsoftware.cavedroid.game.GameScope;
6 import ru.deadsoftware.cavedroid.game.model.dto.SaveDataDto;
7 import ru.deadsoftware.cavedroid.game.model.item.InventoryItem;
8 import ru.deadsoftware.cavedroid.game.model.item.Item;
9 import ru.deadsoftware.cavedroid.misc.Saveable;
11 import javax.inject.Inject;
12 import java.io.Serializable;
13 import java.util.Iterator;
14 import java.util.LinkedList;
16 @GameScope
17 public class DropController implements Serializable, Saveable {
19 private static final int SAVE_DATA_VERSION = 1;
21 public interface Callback {
22 void run(Drop drop);
23 }
25 private final LinkedList<Drop> mDrops = new LinkedList<>();
27 @Inject
28 public DropController() {
29 }
31 public void initDrops(GameItemsHolder gameItemsHolder) {
32 for (Drop drop : mDrops) {
33 drop.initItem(gameItemsHolder);
34 }
35 }
37 public void addDrop(float x, float y, Item item) {
38 addDrop(x, y, item, 1);
39 }
41 public void addDrop(float x, float y, Item item, int count) {
42 if (item.isNone()) {
43 return;
44 }
45 mDrops.add(new Drop(x, y, item, count));
46 }
48 public void addDrop(float x, float y, @NotNull InventoryItem invItem) {
49 addDrop(x, y, invItem.getItem(), invItem.getAmount());
50 }
52 public int getSize() {
53 return mDrops.size();
54 }
56 public void forEach(Callback callback) {
57 for (Drop drop : mDrops) {
58 callback.run(drop);
59 }
60 }
62 public Iterator<Drop> getIterator() {
63 return mDrops.iterator();
64 }
66 @Override
67 @NotNull
68 public SaveDataDto.DropControllerSaveData getSaveData() {
69 final LinkedList<SaveDataDto.DropSaveData> dropSaveData = new LinkedList<>();
70 for (Drop drop : mDrops) {
71 dropSaveData.add(drop.getSaveData());
72 }
73 return new SaveDataDto.DropControllerSaveData(SAVE_DATA_VERSION, dropSaveData);
74 }
76 public static DropController fromSaveData(
77 SaveDataDto.DropControllerSaveData saveData, GameItemsHolder gameItemsHolder) {
78 saveData.verifyVersion(SAVE_DATA_VERSION);
80 DropController controller = new DropController();
82 for (SaveDataDto.DropSaveData dropSaveData : saveData.getDrops()) {
83 controller.mDrops.add(Drop.Companion.fromSaveData(dropSaveData, gameItemsHolder));
84 }
86 return controller;
87 }
89 }