Program Listing for File KPController.hpp¶
↰ Return to documentation for file (src/KPController.hpp)
#pragma once
#include <KPFoundation.hpp>
#include <map>
class KPController {
private:
std::map<const char *, KPComponent *> mapNameToComponent;
public:
virtual void setup() = 0;
virtual void update() {
for (auto & p : mapNameToComponent) {
p.second->update();
}
}
void addComponent(KPComponent * c) {
if (mapNameToComponent.find(c->name) != mapNameToComponent.end()) {
halt(TRACE, c->name, " already exists");
}
mapNameToComponent[c->name] = c;
c->controller = this;
c->setup();
println(c->name, " setup");
}
void addComponent(KPComponent & c) {
addComponent(&c);
}
template <typename T>
T * getComponent(const char * name) {
auto c = mapNameToComponent[name];
if (c && c->enabled()) {
return static_cast<T *>(c);
}
return nullptr;
}
};