forked from miketardy-ynov-classroom/ynov-b2-cpp-playground
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSaveIO.cpp
More file actions
68 lines (55 loc) · 2 KB
/
SaveIO.cpp
File metadata and controls
68 lines (55 loc) · 2 KB
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
//
// Created by Théodore Orfèvres on 15/03/2018.
//
#include "SaveIO.h"
SaveIO::SaveIO(const string &path) : path(path) {
}
void SaveIO::save(Save save) {
ptree out;
out.put("save.player.name", save.player.getName());
ptree children;
vector<Monster> inventory = save.player.getMonsters();
for (Monster m : inventory) {
// Each Monster
ptree inner;
inner.put("name", m.getName());
inner.put("exp", m.getExp());
inner.put("strength", m.getStrength());
inner.put("health", m.getHealth());
inner.put("critChance", m.getCritChance());
inner.put("energy", m.getEnergy());
inner.put("isMale", m.getIsMale());
inner.put("error", m.isError());
children.push_back(std::make_pair("", inner));
}
out.add_child("save.player.monsters", children);
out.put("save.player.gold", save.player.getGold());
out.put("save.days", save.days);
std::ostringstream oss;
boost::property_tree::write_json(oss, out);
ofstream saveFile(path, ios::trunc);
saveFile << oss.str();
saveFile.close();
}
Save SaveIO::load() {
ptree in;
boost::property_tree::read_json(path, in);
vector<Monster> monsters;
for (ptree::value_type &m : in.get_child("save.player.monsters")) {
Monster monster;
monster.setName(m.second.get<string>("name"));
monster.setStrength(m.second.get<int>("strength"));
monster.setHealth(m.second.get<int>("health"));
monster.setCritChance(m.second.get<int>("critChance"));
monster.setEnergy(m.second.get<int>("energy"));
monster.setExp(m.second.get<int>("exp"));
monster.setIsMale(m.second.get<bool>("isMale"));
monster.setError(m.second.get<bool>("error"));
monsters.push_back(monster);
}
Player player("error");
player.setName(in.get<string>("save.player.name"));
player.setGold(in.get<int>("save.player.gold"));
player.setMonsters(monsters);
return {player, in.get<int>("save.days")};
}