-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathResourceManager.cpp
More file actions
171 lines (141 loc) · 4 KB
/
ResourceManager.cpp
File metadata and controls
171 lines (141 loc) · 4 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
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
#include "ResourceManager.h"
int ResourceManager::getUpgradeCost(std::string upgrade)
{
// If upgrade is not found (max level or incorrect name)
if (upgradeCosts.count(upgrade) == 0)
return -1;
return upgradeCosts.at(upgrade);
}
bool ResourceManager::purchaseUpgrade(std::string name)
{
int currentLevel = getNumberResource("saveData", name);
int currentGold = getNumberResource("saveData", "gold");
std::string upgradeName = name + std::to_string(currentLevel + 1);
int price = INT_MAX;
price = getUpgradeCost(upgradeName);
if (price == -1)
return false;
// If the player does not have enough gold to purchase the upgrade
if (currentGold < price)
return false;
setResource("saveData", "gold", currentGold - price);
setResource("saveData", name, currentLevel + 1);
return true;
}
char ResourceManager::getNewScene()
{
return newScene;
}
void ResourceManager::loadAllResources()
{
loadResources("saveData", saveData);
loadResources("settings", settings);
}
void ResourceManager::loadResources(std::string source, std::unordered_map<std::string, std::string> &resourceMap)
{
std::ifstream readFile(source + ".txt");
std::string line;
bool pairSection; // false: key, true: value
std::string key;
std::string value;
while (std::getline(readFile, line))
{
pairSection = false;
key = "";
value = "";
for (char c : line)
{
if (!pairSection) // Add to key
{
if (c == ':') // If char is splitter ':'
{
pairSection = true;
continue;
}
key += c;
}
else // Add to value
{
value += c;
}
}
resourceMap.emplace(key, value); // Add resource and value to resourceMap
}
readFile.close();
}
void ResourceManager::loadResources(std::string source)
{
if (source == "saveData")
loadResources(source, saveData);
else if (source == "settings")
loadResources(source, settings);
}
void ResourceManager::saveAllResources()
{
saveResources("saveData", saveData);
saveResources("settings", settings);
}
void ResourceManager::saveResources(std::string destination, std::unordered_map<std::string, std::string> &resourceMap)
{
std::ofstream writeFile(destination + ".txt");
for (std::pair<std::string, std::string> resource : resourceMap)
writeFile << resource.first << ":" << resource.second << "\n";
writeFile.close();
}
void ResourceManager::saveResources(std::string destination)
{
if (destination == "saveData")
saveResources(destination, saveData);
else if (destination == "settings")
saveResources(destination, settings);
}
std::string ResourceManager::getStringResource(std::string source, std::string resource)
{
if (source == "saveData")
{
// If the resource isn't in saveData, add it with value ""
if (saveData.count(resource) == 0)
saveData.emplace(resource, "");
return (saveData.at(resource));
}
else if (source == "settings")
{
// If the resource isn't in settings, add it with value ""
if (settings.count(resource) == 0)
settings.emplace(resource, "");
return (settings.at(resource));
}
else // In case of invalid source
return (""); // Return nothing
}
double ResourceManager::getNumberResource(std::string source, std::string resource)
{
std::string rawValue = getStringResource(source, resource);
double value;
if (rawValue == "")
return 0;
try // Check to see if value is a valid number
{
value = std::stod(rawValue);
}
catch (int e)
{ // In case of invalid value
return 0;
}
return value;
}
void ResourceManager::setResource(std::string source, std::string resource, std::string value)
{
if (source == "saveData")
saveData.at(resource) = value;
else if (source == "settings")
settings.at(resource) = value;
}
void ResourceManager::setResource(std::string source, std::string resource, double value)
{
setResource(source, resource, std::to_string(value));
}
void ResourceManager::changeScene(char newScene_)
{
newScene = newScene_;
}