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
;
16 public class DropController
implements Saveable
{
18 private static final int SAVE_DATA_VERSION
= 1;
20 public interface Callback
{
24 private final LinkedList
<Drop
> mDrops
= new LinkedList
<>();
27 public DropController() {
30 public void initDrops(GameItemsHolder gameItemsHolder
) {
31 for (Drop drop
: mDrops
) {
32 drop
.initItem(gameItemsHolder
);
36 public void addDrop(float x
, float y
, Item item
) {
37 addDrop(x
, y
, item
, 1);
40 public void addDrop(float x
, float y
, Item item
, int count
) {
44 mDrops
.add(new Drop(x
, y
, item
, count
));
47 public void addDrop(float x
, float y
, @NotNull InventoryItem invItem
) {
48 addDrop(x
, y
, invItem
.getItem(), invItem
.getAmount());
51 public int getSize() {
55 public void forEach(Callback callback
) {
56 for (Drop drop
: mDrops
) {
61 public Iterator
<Drop
> getIterator() {
62 return mDrops
.iterator();
67 public SaveDataDto
.DropControllerSaveData
getSaveData() {
68 final LinkedList
<SaveDataDto
.DropSaveData
> dropSaveData
= new LinkedList
<>();
69 for (Drop drop
: mDrops
) {
70 dropSaveData
.add(drop
.getSaveData());
72 return new SaveDataDto
.DropControllerSaveData(SAVE_DATA_VERSION
, dropSaveData
);
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
));