diff --git a/CMakeLists.txt b/CMakeLists.txt index 6fbf53f..7c967a2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,4 +3,11 @@ project(ecsgame) set(CMAKE_CXX_STANDARD 17) -add_executable(ecsgame main.cpp) \ No newline at end of file +find_package(OpenGL REQUIRED) +find_package(glfw3 REQUIRED) + +add_executable(ecsgame main.cpp) + +include_directories(${OPENGL_INCLUDE_DIRS}) + +target_link_libraries(ecsgame ${OPENGL_LIBRARY} glfw) \ No newline at end of file diff --git a/main.cpp b/main.cpp index 4226a0c..4410663 100644 --- a/main.cpp +++ b/main.cpp @@ -1,11 +1,12 @@ #include #include "ECS.h" +#include using namespace ECS; -struct Position -{ +struct Position { Position(float x, float y, float z) : x(x), y(y), z(z) {} + Position() : x(0.f), y(0.f), z(0.f) {} float x; @@ -13,19 +14,16 @@ struct Position float z; }; -class GravitySystem : public EntitySystem -{ +class GravitySystem : public EntitySystem { public: - GravitySystem(float amount) - { + GravitySystem(float amount) { gravityAmount = amount; } virtual ~GravitySystem() {} - virtual void tick(World* world, float deltaTime) override - { - world->each([&](Entity* ent, ComponentHandle position) { + virtual void tick(World *world, float deltaTime) override { + world->each([&](Entity *ent, ComponentHandle position) { position->y += gravityAmount * deltaTime; }); } @@ -35,10 +33,10 @@ private: }; int main() { - World* world = World::createWorld(); + World *world = World::createWorld(); world->registerSystem(new GravitySystem(-9.8f)); - Entity* ent = world->create(); + Entity *ent = world->create(); ent->assign(0.f, 0.f, 0.f); // assign() takes arguments and passes them to the constructor world->tick(1.0f); @@ -46,5 +44,35 @@ int main() { ComponentHandle pos = ent->get(); std::cout << "y position after tick: " << pos->y << std::endl; + + GLFWwindow *window; + + /* Initialize the library */ + if (!glfwInit()) + return -1; + + /* Create a windowed mode window and its OpenGL context */ + window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL); + if (!window) { + glfwTerminate(); + return -1; + } + + /* Make the window's context current */ + glfwMakeContextCurrent(window); + + /* Loop until the user closes the window */ + while (!glfwWindowShouldClose(window)) { + /* Render here */ + glClear(GL_COLOR_BUFFER_BIT); + + /* Swap front and back buffers */ + glfwSwapBuffers(window); + + /* Poll for and process events */ + glfwPollEvents(); + } + + glfwTerminate(); return 0; }