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
;
17 public class DropController
implements Serializable
, Saveable
{
19 private static final int SAVE_DATA_VERSION
= 1;
21 public interface Callback
{
25 private final LinkedList
<Drop
> mDrops
= new LinkedList
<>();
28 public DropController() {
31 public void initDrops(GameItemsHolder gameItemsHolder
) {
32 for (Drop drop
: mDrops
) {
33 drop
.initItem(gameItemsHolder
);
37 public void addDrop(float x
, float y
, Item item
) {
38 addDrop(x
, y
, item
, 1);
41 public void addDrop(float x
, float y
, Item item
, int count
) {
45 mDrops
.add(new Drop(x
, y
, item
, count
));
48 public void addDrop(float x
, float y
, @NotNull InventoryItem invItem
) {
49 addDrop(x
, y
, invItem
.getItem(), invItem
.getAmount());
52 public int getSize() {
56 public void forEach(Callback callback
) {
57 for (Drop drop
: mDrops
) {
62 public Iterator
<Drop
> getIterator() {
63 return mDrops
.iterator();
68 public SaveDataDto
.DropControllerSaveData
getSaveData() {
69 final LinkedList
<SaveDataDto
.DropSaveData
> dropSaveData
= new LinkedList
<>();
70 for (Drop drop
: mDrops
) {
71 dropSaveData
.add(drop
.getSaveData());
73 return new SaveDataDto
.DropControllerSaveData(SAVE_DATA_VERSION
, dropSaveData
);
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
));