This commit is contained in:
2025-04-19 21:32:57 -05:00
parent 87afa3a0ec
commit a39f43e439
9 changed files with 180 additions and 44 deletions

View File

@@ -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;
}

View File

@@ -15,20 +15,22 @@ class WindowModule : public Archimedes::Module {
WindowModule() { name = "WindowModule"; }
~WindowModule();
~WindowModule() override;
void run();
void run() override;
void onLoad();
void onLoad() override;
bool onEvent(const Archimedes::Event& e) override;
//interface for other modules
Archimedes::Window* getWindow() { return window; }
std::vector<Archimedes::Window*>& getWindow() { return windows; }
Archimedes::Renderer* getRenderer() { return renderer; }
private:
Archimedes::Window* window;
std::vector<Archimedes::Window*> windows;
Archimedes::Renderer* renderer;
};