OBJDIR = objdir
SOURCES = \
- src/main.cc
+ src/main.cc \
+ src/game.cc
-HEADERS =
+HEADERS = \
+ src/game.h
OBJECTS = $(addprefix ${OBJDIR}/,$(subst .cc,.cc.o,${SOURCES}))
format:
clang-format -i --style=google ${HEADERS} ${SOURCES}
-${OBJDIR}/%.cc.o: %.cc
+.SECONDEXPANSION:
+
+${OBJDIR}/%.cc.o: $$(subst ${OBJDIR}/,,%.cc) ${HEADERS}
@mkdir -p $(dir $@)
- ${CXX} -c ${CXX_FLAGS} -o $@ $^
+ ${CXX} -c ${CXX_FLAGS} -o $@ $<
--- /dev/null
+#include "game.h"
+
+// third party includes
+#include <raylib.h>
+
+Game::Game() {}
+
+void Game::update() {}
+
+void Game::draw() { DrawText("Testing...", 100, 100, 30, RAYWHITE); }
--- /dev/null
+#ifndef JUMPARTIFACT_DOT_COM_DEMO_GAME_H_
+#define JUMPARTIFACT_DOT_COM_DEMO_GAME_H_
+
+class Game {
+ public:
+ Game();
+
+ // No copy.
+ Game(const Game&) = delete;
+ Game& operator=(const Game&) = delete;
+
+ // Allow move.
+ Game(Game&&) = default;
+ Game& operator=(Game&&) = default;
+
+ void update();
+ void draw();
+
+ private:
+};
+
+#endif
#include <raylib.h>
// local includes
+#include "game.h"
#ifdef __EMSCRIPTEN__
extern "C" {
// Main loop frame
void jumpartifact_demo_update(void *ud) {
+ Game *game = (Game *)ud;
+
+ game->update();
+
BeginDrawing();
ClearBackground(BLACK);
- DrawText("Testing...", 100, 100, 30, RAYWHITE);
+ game->draw();
EndDrawing();
}
int main() {
InitWindow(800, 800, "Demo");
+
+ Game game{};
+
#ifdef __EMSCRIPTEN__
SetWindowSize(call_js_get_canvas_width(), call_js_get_canvas_height());
- emscripten_set_resize_callback(EMSCRIPTEN_EVENT_TARGET_WINDOW, 0, false,
+ emscripten_set_resize_callback(EMSCRIPTEN_EVENT_TARGET_WINDOW, &game, false,
resize_event_callback);
- emscripten_set_main_loop_arg(jumpartifact_demo_update, 0, 0, 1);
+ emscripten_set_main_loop_arg(jumpartifact_demo_update, &game, 0, 1);
#else
SetTargetFPS(60);
while (!WindowShouldClose()) {
- jumpartifact_demo_update(0);
+ jumpartifact_demo_update(&game);
}
CloseAudioDevice();