DEADSOFTWARE

Update version script
[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.util.Iterator;
13 import java.util.LinkedList;
15 @GameScope
16 public class DropController implements Saveable {
18 private static final int SAVE_DATA_VERSION = 1;
20 public interface Callback {
21 void run(Drop drop);
22 }
24 private final LinkedList<Drop> mDrops = new LinkedList<>();
26 @Inject
27 public DropController() {
28 }
30 public void initDrops(GameItemsHolder gameItemsHolder) {
31 for (Drop drop : mDrops) {
32 drop.initItem(gameItemsHolder);
33 }
34 }
36 public void addDrop(float x, float y, Item item) {
37 addDrop(x, y, item, 1);
38 }
40 public void addDrop(float x, float y, Item item, int count) {
41 if (item.isNone()) {
42 return;
43 }
44 mDrops.add(new Drop(x, y, item, count));
45 }
47 public void addDrop(float x, float y, @NotNull InventoryItem invItem) {
48 addDrop(x, y, invItem.getItem(), invItem.getAmount());
49 }
51 public int getSize() {
52 return mDrops.size();
53 }
55 public void forEach(Callback callback) {
56 for (Drop drop : mDrops) {
57 callback.run(drop);
58 }
59 }
61 public Iterator<Drop> getIterator() {
62 return mDrops.iterator();
63 }
65 @Override
66 @NotNull
67 public SaveDataDto.DropControllerSaveData getSaveData() {
68 final LinkedList<SaveDataDto.DropSaveData> dropSaveData = new LinkedList<>();
69 for (Drop drop : mDrops) {
70 dropSaveData.add(drop.getSaveData());
71 }
72 return new SaveDataDto.DropControllerSaveData(SAVE_DATA_VERSION, dropSaveData);
73 }
75 public static DropController fromSaveData(
76 SaveDataDto.DropControllerSaveData saveData, GameItemsHolder gameItemsHolder) {
77 saveData.verifyVersion(SAVE_DATA_VERSION);
79 DropController controller = new DropController();
81 for (SaveDataDto.DropSaveData dropSaveData : saveData.getDrops()) {
82 controller.mDrops.add(Drop.Companion.fromSaveData(dropSaveData, gameItemsHolder));
83 }
85 return controller;
86 }
88 }