VEGO-Engine  0.1
Loading...
Searching...
No Matches
GameFactory.h
1#pragma once
2
3#include <cassert>
4#include <iostream>
5#include <map>
6#include <functional>
7#include <string>
8#include <stdexcept>
9
10#include "Game.h"
11
12class GameInternal;
13
15public:
16 using CreateFunc = std::function<Game*()>;
17
18 static GameFactory& instance() {
19 static GameFactory factory;
20 return factory;
21 }
22
23 void registerClass(CreateFunc createFunc) {
24 this->creatorFunc = createFunc;
25 }
26
27 Game* create(GameInternal* gameInternal) {
28 if (this->creatorFunc == nullptr) {
29 throw std::runtime_error("No game implementation registered!");
30 return nullptr;
31 }
32 Game* game = (this->creatorFunc)();
33 game->gameInternal = gameInternal;
34 return game;
35 }
36
37private:
38 CreateFunc creatorFunc = nullptr;
39};
Definition GameFactory.h:14
Definition GameInternal.h:31
Definition Game.h:6