-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSave.cpp
More file actions
111 lines (90 loc) · 2.72 KB
/
Save.cpp
File metadata and controls
111 lines (90 loc) · 2.72 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
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
// Save class implementation
// By Nick Verrochi
// Last Modified: 5/8/15
#include "Save.h"
using namespace std;
Save::Save(Player * player) {
CharacterStats *stats = ripStats(player);
character = player;
fileName = character->getPlayerClass() + "_" + character->getName() + ".sav";
fileSize = sizeof(CharacterStats);
fileStream.open(fileName, ios::out | ios::binary);
fileStream.write(reinterpret_cast<char *>(stats), fileSize);
fileStream.close();
}
Save::Save(const string &file) {
CharacterStats *stats = new CharacterStats;
fileName = file;
fileSize = sizeof(CharacterStats);
fileStream.open(fileName, ios::in | ios::binary);
if (!fileStream.is_open()) {
fileStream.close();
throw FileNotFoundException;
}
else {
fileStream.read(reinterpret_cast<char *>(stats), fileSize);
switch (stats->id) {
case WARRIOR:
character = new Warrior("");
break;
case NINJA:
character = new Ninja("");
break;
case MAGE:
character = new Mage("");
break;
default:
throw InvalidFileNameException;
}
}
fileStream.close();
setStats(stats);
}
Player * Save::getCharacterPointer() {
return character;
}
void Save::setFileName(const string &name) {
fileName = name;
}
string Save::getFileName() const {
return fileName;
}
long Save::getFileSize() const {
return fileSize;
}
CharacterStats * Save::ripStats(Player *player) {
CharacterStats *stats = new CharacterStats;
stats->id = player->getID();
stats->name = player->getName();
stats->playerClass = player->getPlayerClass();
stats->level = player->getLevel();
stats->exp = player->getExp();
stats->expToNext = player->getExpToNext();
stats->attack = player->getAttack();
stats->defense = player->getDefense();
stats->magicPower = player->getMagicPower();
stats->speed = player->getSpeed();
stats->hp = player->getHp();
stats->hpMax = player->getHpMax();
stats->mp = player->getMp();
stats->mpMax = player->getMpMax();
return stats;
}
void Save::setStats(CharacterStats *stats) {
character->setID(stats->id);
character->setName(stats->name);
character->setPlayerClass(stats->playerClass);
character->setLevel(stats->level);
character->setExp(stats->exp);
character->setExpToNext(stats->expToNext);
character->setAttack(stats->attack);
character->setDefense(stats->defense);
character->setMagicPower(stats->magicPower);
character->setSpeed(stats->speed);
character->setHpMax(stats->hpMax);
character->setHp(stats->hpMax);
character->setMpMax(stats->mpMax);
character->setMp(stats->mpMax);
}
const string Save::FileNotFoundException = "Error! File not found. \n";
const string Save::InvalidFileNameException = "Error! Invalid file name. \n";