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

@@ -19,7 +19,7 @@ namespace CMEvent {
msg->Release();
}
operator std::string() const { return "CMEvent::DataRecievedEvent"; }
operator std::string() const override { return "CMEvent::DataRecievedEvent"; }
ISteamNetworkingMessage* msg;
@@ -33,7 +33,7 @@ namespace CMEvent {
DataSentEvent(ISteamNetworkingMessage* m) : msg(m) {}
operator std::string() const { return "CMEvent::DataSentEvent"; }
operator std::string() const override { return "CMEvent::DataSentEvent"; }
ISteamNetworkingMessage* msg;
};
@@ -46,7 +46,7 @@ namespace CMEvent {
ConnectionStatusChangedEvent(SteamNetConnectionStatusChangedCallback_t* i) : info(i) {}
operator std::string() const { return "CMEvent::ConnectionStatusChangedEvent"; }
operator std::string() const override { return "CMEvent::ConnectionStatusChangedEvent"; }
SteamNetConnectionStatusChangedCallback_t* info;
};

View File

@@ -80,3 +80,64 @@ void ImguiModule::onLoad() {
ImGui_ImplGlfw_NewFrame();
ImGui::NewFrame();
}
bool ImguiModule::onEvent(const Archimedes::Event &event) {
/*
unsigned int type = app->getEventType(event);
ImGuiIO& io = ImGui::GetIO();
if(type == app->getEventType(Archimedes::WindowResizeEvent())) {
Archimedes::WindowResizeEvent& e = (Archimedes::WindowResizeEvent&) event;
io.DisplaySize = ImVec2(e.width, e.height);
return true;
} else if(type == app->getEventType(Archimedes::WindowKeyPressedEvent())) {
if(io.WantCaptureKeyboard) {
Archimedes::WindowKeyPressedEvent& e = (Archimedes::WindowKeyPressedEvent&) event;
io.KeysData[e.key].Down = true;
return true;
}
return false;
} else if(type == app->getEventType(Archimedes::WindowKeyReleasedEvent())) {
if(io.WantCaptureKeyboard) {
Archimedes::WindowKeyPressedEvent& e = (Archimedes::WindowKeyPressedEvent&) event;
io.KeysData[e.key].Down = false;
return true;
}
return false;
} else if(type == app->getEventType(Archimedes::WindowMouseButtonPressedEvent())) {
if(io.WantCaptureMouse) {
Archimedes::WindowMouseButtonPressedEvent& e = (Archimedes::WindowMouseButtonPressedEvent&) event;
io.MouseDown[e.button] = true;
return true;
} else
return false;
} else if(type == app->getEventType(Archimedes::WindowMouseButtonReleasedEvent())) {
if(io.WantCaptureMouse) {
Archimedes::WindowMouseButtonReleasedEvent& e = (Archimedes::WindowMouseButtonReleasedEvent&) event;
io.MouseDown[e.button] = false;
return true;
} else
return false;
return true;
} else if(type == app->getEventType(Archimedes::WindowScrollEvent())) {
if(io.WantCaptureMouse) {
Archimedes::WindowScrollEvent& e = (Archimedes::WindowScrollEvent&) event;
io.MouseWheel += e.dy;
io.MouseWheelH += e.dx;
return true;
} else
return false;
} else if(type == app->getEventType(Archimedes::WindowMouseMovedEvent())) {
if(io.WantSetMousePos) {
Archimedes::WindowMouseMovedEvent& e = (Archimedes::WindowMouseMovedEvent&) event;
io.MousePos = ImVec2(e.x, e.y);
return true;
} else
return false;
}
*/
return false;
}

View File

@@ -16,9 +16,9 @@ class ImguiModule : public Archimedes::Module {
~ImguiModule();
void onLoad();
void onLoad() override;
bool onEvent(const Archimedes::Event& e) { return false; }
bool onEvent(const Archimedes::Event&) override;
ImGuiContext* getContext() { return context; }

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