summaryrefslogtreecommitdiff
path: root/core/src/kz/ilotterytea/maxon/player/Savegame.java
blob: dbabcb110dac0fa7990c6750c752e9884f65c215 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
package kz.ilotterytea.maxon.player;


import com.badlogic.gdx.Gdx;
import com.google.gson.Gson;
import kz.ilotterytea.maxon.MaxonConstants;
import kz.ilotterytea.maxon.utils.OsUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.*;
import java.util.ArrayList;
import java.util.HashMap;

public class Savegame implements Serializable {
    private static final File directory = new File(MaxonConstants.GAME_SAVEGAME_FOLDER);
    private static final File file = new File(
            String.format(
                    "%s/savegame.maxon",
                    (OsUtils.isAndroid || OsUtils.isIos)
                            ? Gdx.files.getExternalStoragePath()
                            : directory.getAbsolutePath()
            )
    );
    private static final Gson gson = new Gson();
    private static final Logger logger = LoggerFactory.getLogger(Savegame.class);

    private double money, multiplier;
    private final HashMap<String, Integer> purchasedPets = new HashMap<>();
    private final ArrayList<String> unlockedPets = new ArrayList<>();
    private String name;
    private long elapsedTime, slotsWins, slotsTotalSpins;
    private boolean isNewlyCreated;

    private static Savegame savegame;

    public static Savegame getInstance() {
        if (savegame == null) {
            savegame = load();
        }

        return savegame;
    }

    private Savegame() {
        setDefaultValues();
    }

    public static Savegame load() {
        if (!file.exists()) {
            return new Savegame();
        }

        try {
            FileInputStream fis = new FileInputStream(file);
            ObjectInputStream ois = new ObjectInputStream(fis);

            Savegame savegame = gson.fromJson(ois.readUTF(), Savegame.class);
            ois.close();

            savegame.isNewlyCreated = false;

            logger.info("Loaded the savegame");

            return savegame;
        } catch (IOException e) {
            logger.error("Failed to load a save: {}", e.toString());
            return new Savegame();
        }
    }

    public void save() {
        if (OsUtils.isPC && !directory.exists()) {
            directory.mkdirs();
        }

        try {
            FileOutputStream fos = new FileOutputStream(file);
            ObjectOutputStream oos = new ObjectOutputStream(fos);

            oos.writeUTF(gson.toJson(this));
            oos.close();

            logger.info("Saved the game");
        } catch (IOException e) {
            logger.error("Failed to save the game: {}", e.toString());
        }
    }

    public void delete() {
        if (file.delete()) {
            setDefaultValues();
        }
    }

    private void setDefaultValues() {
        money = 0.0f;
        multiplier = 0.0f;
        purchasedPets.clear();
        unlockedPets.clear();
        name = OsUtils.isPC ? System.getProperty("user.name", "Maxon") : "Maxon";
        elapsedTime = 0;
        slotsWins = 0;
        slotsTotalSpins = 0;
        isNewlyCreated = true;
    }

    public double getMoney() {
        return money;
    }

    public void setMoney(double money) {
        this.money = money;
    }

    public void increaseMoney(double money) {
        this.money += money;
    }

    public void decreaseMoney(double money) {
        this.money -= money;
    }

    public double getMultiplier() {
        return multiplier;
    }

    public void increaseMultiplier(double multiplier) {
        this.multiplier += multiplier;
    }

    public void decreaseMultiplier(double multiplier) {
        this.multiplier -= multiplier;
    }

    public HashMap<String, Integer> getPurchasedPets() {
        return purchasedPets;
    }

    public Integer getAllPetAmount() {
        Integer sum = 0;

        for (Integer v : getPurchasedPets().values()) {
            sum += v;
        }

        return sum;
    }

    public ArrayList<String> getUnlockedPets() {
        return unlockedPets;
    }

    public String getName() {
        return name;
    }

    public long getElapsedTime() {
        return elapsedTime;
    }

    public void setElapsedTime(long elapsedTime) {
        this.elapsedTime = elapsedTime;
    }

    public long getSlotsTotalSpins() {
        return slotsTotalSpins;
    }

    public void setSlotsTotalSpins(long slotsTotalSpins) {
        this.slotsTotalSpins = slotsTotalSpins;
    }

    public long getSlotsWins() {
        return slotsWins;
    }

    public void setSlotsWins(long slotsWins) {
        this.slotsWins = slotsWins;
    }

    public boolean isNewlyCreated() {
        return isNewlyCreated;
    }

    public void setNewlyCreated(boolean newlyCreated) {
        isNewlyCreated = newlyCreated;
    }
}