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
|
#include <memory>
#include <unordered_map>
#include "backend/Enemy.h"
#include "backend/EnemyFactory.h"
#include "backend/Object.h"
#include "backend/ObjectFactory.h"
#include "GameData.h"
using namespace std;
GameData & GameData::get_instance() {
static GameData instance;
return instance;
}
GameData::GameData() {
this->db = make_unique<DB>("kerkersendraken.db");
}
Enemy * GameData::create_enemy(const string & name) {
Enemy * enemy = EnemyFactory::create_enemy();
return enemy;
}
static const unordered_map<string, ObjectType> type_map = {
{ "teleportatiedrank", ObjectType::CONSUMABLE },
{ "ervaringsdrank", ObjectType::CONSUMABLE },
{ "levenselixer", ObjectType::CONSUMABLE },
{ "wapenrusting", ObjectType::ARMOR },
{ "wapen", ObjectType::WEAPON },
{ "goudstukken", ObjectType::GOLD },
};
Object * GameData::create_object(const string & name) {
DBStatement query = this->db->prepare("select type, omschrijving from Objecten where naam = ?");
query.bind(name);
try {
auto row = query.row();
string type = row.col<const char *>(0);
const char * description = row.col<const char *>(1);
if (!type_map.contains(type)) throw std::exception();
return ObjectFactory::create_object(type_map.at(type), name.c_str(), description);
} catch (...) {
return ObjectFactory::create_object(name.c_str());
}
}
void GameData::leaderbord_add(const string & name, unsigned int gold) {
this->db->prepare("insert into Leaderboard (naam, goudstukken) values (?, ?)")
.bind(name)
.bind(gold)
.execute();
}
|