Events
This commit is contained in:
@@ -2,28 +2,52 @@
|
||||
|
||||
WindowModule::~WindowModule() {
|
||||
if(app) {
|
||||
app->unregisterEvent(Archimedes::WindowResizeEvent());
|
||||
app->unregisterEvent(Archimedes::WindowCloseEvent());
|
||||
app->unregisterEvent(Archimedes::WindowKeyPressedEvent());
|
||||
app->unregisterEvent(Archimedes::WindowKeyReleasedEvent());
|
||||
app->unregisterEvent(Archimedes::WindowMouseButtonPressedEvent());
|
||||
app->unregisterEvent(Archimedes::WindowMouseButtonReleasedEvent());
|
||||
app->unregisterEvent(Archimedes::WindowScrollEvent());
|
||||
app->unregisterEvent(Archimedes::WindowMouseMovedEvent());
|
||||
app->unregisterEvent(Archimedes::WindowFocusedEvent());
|
||||
app->unregisterEvent(Archimedes::WindowFocusLostEvent());
|
||||
app->unregisterEvent(Archimedes::WindowMovedEvent());
|
||||
|
||||
if(renderer) {
|
||||
renderer->getCmdList().clear();
|
||||
delete renderer;
|
||||
}
|
||||
if(window) {
|
||||
delete window;
|
||||
for(auto* w : windows) {
|
||||
if(w)
|
||||
delete w;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void WindowModule::onLoad() {
|
||||
|
||||
window = new Archimedes::Window([this](Archimedes::Event* e){
|
||||
app->registerEvent(Archimedes::WindowResizeEvent());
|
||||
app->registerEvent(Archimedes::WindowCloseEvent());
|
||||
app->registerEvent(Archimedes::WindowKeyPressedEvent());
|
||||
app->registerEvent(Archimedes::WindowKeyReleasedEvent());
|
||||
app->registerEvent(Archimedes::WindowMouseButtonPressedEvent());
|
||||
app->registerEvent(Archimedes::WindowMouseButtonReleasedEvent());
|
||||
app->registerEvent(Archimedes::WindowScrollEvent());
|
||||
app->registerEvent(Archimedes::WindowMouseMovedEvent());
|
||||
app->registerEvent(Archimedes::WindowFocusedEvent());
|
||||
app->registerEvent(Archimedes::WindowFocusLostEvent());
|
||||
app->registerEvent(Archimedes::WindowMovedEvent());
|
||||
|
||||
windows.push_back(new Archimedes::Window([this](Archimedes::Event* e){
|
||||
app->emitEvent(e);
|
||||
});
|
||||
}));
|
||||
|
||||
renderer = new Archimedes::Renderer();
|
||||
|
||||
window->setRenderer(renderer);
|
||||
for(auto* window : windows)
|
||||
window->setRenderer(renderer);
|
||||
|
||||
//renderer = window->getRenderer();
|
||||
|
||||
if(!renderer->init()) {
|
||||
std::cout << "Renderer init failed!\n";
|
||||
std::abort();
|
||||
@@ -32,16 +56,60 @@ void WindowModule::onLoad() {
|
||||
|
||||
void WindowModule::run() {
|
||||
|
||||
if(window->shouldClose()) {
|
||||
app->end();
|
||||
for(auto* window : windows) {
|
||||
|
||||
if(window->shouldClose()) {
|
||||
app->end();
|
||||
}
|
||||
|
||||
for(auto e : window->getWindowImpl().data.eventList) {
|
||||
app->emitEvent(e);
|
||||
}
|
||||
|
||||
window->getWindowImpl().data.eventList.clear();
|
||||
|
||||
window->doFrame();
|
||||
}
|
||||
|
||||
for(auto e : window->getWindowImpl().data.eventList) {
|
||||
app->emitEvent(e);
|
||||
}
|
||||
|
||||
window->getWindowImpl().data.eventList.clear();
|
||||
|
||||
window->doFrame();
|
||||
}
|
||||
|
||||
bool WindowModule::onEvent(const Archimedes::Event& e) {
|
||||
|
||||
unsigned int type = app->getEventType(e);
|
||||
|
||||
if(type == app->getEventType(Archimedes::WindowResizeEvent())) {
|
||||
|
||||
return true;
|
||||
} else if(type == app->getEventType(Archimedes::WindowCloseEvent())) {
|
||||
|
||||
return true;
|
||||
} else if(type == app->getEventType(Archimedes::WindowKeyPressedEvent())) {
|
||||
|
||||
return true;
|
||||
} else if(type == app->getEventType(Archimedes::WindowKeyReleasedEvent())) {
|
||||
|
||||
return true;
|
||||
} else if(type == app->getEventType(Archimedes::WindowMouseButtonPressedEvent())) {
|
||||
|
||||
return true;
|
||||
} else if(type == app->getEventType(Archimedes::WindowMouseButtonReleasedEvent())) {
|
||||
|
||||
return true;
|
||||
} else if(type == app->getEventType(Archimedes::WindowScrollEvent())) {
|
||||
|
||||
return true;
|
||||
} else if(type == app->getEventType(Archimedes::WindowMouseMovedEvent())) {
|
||||
|
||||
return true;
|
||||
} else if(type == app->getEventType(Archimedes::WindowFocusedEvent())) {
|
||||
|
||||
return true;
|
||||
} else if(type == app->getEventType(Archimedes::WindowFocusLostEvent())) {
|
||||
|
||||
return true;
|
||||
} else if(type == app->getEventType(Archimedes::WindowMovedEvent())) {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user