aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWBoerenkamps <wrj.boerenkamps@student.avans.nl>2024-09-27 14:00:57 +0200
committerWBoerenkamps <wrj.boerenkamps@student.avans.nl>2024-09-27 14:00:57 +0200
commita78f7bbfcdabad9550afe22f615b973b92cb074f (patch)
tree318e888219965634e3b81be9b74a0522af2136e0
parent86a7bd1aee2ee96079e00e2696a624fd6b642fa0 (diff)
parentf4560e02f703f1c6f857c8e5af63fa9fc4ca6438 (diff)
fixed merge conflict
-rw-r--r--.gitmodules9
-rw-r--r--contributing.md8
-rw-r--r--gameloop/.vscode/settings.json54
-rw-r--r--gameloop/include/eventManager.h4
-rw-r--r--gameloop/include/loopManager.h25
-rw-r--r--gameloop/include/window.h20
-rw-r--r--gameloop/src/gameObject.cpp58
-rw-r--r--gameloop/src/window.cpp60
-rw-r--r--gameloop/versions/delayBased.cpp57
-rw-r--r--lazy.mk33
m---------lib/sdl20
-rw-r--r--lib/soloud/CMakeLists.txt97
m---------lib/soloud/src0
-rw-r--r--makefile2
-rw-r--r--mwe/audio/bgm.oggbin0 -> 125020 bytes
-rw-r--r--mwe/audio/sfx1.wavbin0 -> 44144 bytes
-rw-r--r--mwe/audio/sfx2.wavbin0 -> 44144 bytes
-rw-r--r--mwe/audio/sfx3.wavbin0 -> 44144 bytes
-rw-r--r--mwe/audio/soloud/CMakeLists.txt19
-rw-r--r--mwe/audio/soloud/main.cpp48
-rw-r--r--mwe/dynlink/exec/main.c1
-rw-r--r--mwe/dynlink/exec/makefile1
-rw-r--r--mwe/dynlink/lib/lib.c5
-rw-r--r--mwe/dynlink/lib/lib.h1
-rw-r--r--mwe/dynlink/lib/makefile1
-rw-r--r--mwe/gameloop/CMakeLists.txt (renamed from gameloop/CMakeLists.txt)12
-rw-r--r--mwe/gameloop/imgs/demo.bmp (renamed from gameloop/imgs/demo.bmp)bin7998698 -> 7998698 bytes
-rw-r--r--mwe/gameloop/imgs/demo.jpg (renamed from gameloop/imgs/demo.jpg)bin903706 -> 903706 bytes
-rw-r--r--mwe/gameloop/include/eventManager.h1
-rw-r--r--mwe/gameloop/include/gameObject.h (renamed from gameloop/include/gameObject.h)0
-rw-r--r--mwe/gameloop/include/loopManager.h25
-rw-r--r--mwe/gameloop/include/timer.h (renamed from gameloop/include/timer.h)0
-rw-r--r--mwe/gameloop/include/window.h21
-rw-r--r--mwe/gameloop/src/eventManager.cpp (renamed from gameloop/src/eventManager.cpp)0
-rw-r--r--mwe/gameloop/src/gameObject.cpp30
-rw-r--r--mwe/gameloop/src/loopManager.cpp (renamed from gameloop/src/loopManager.cpp)0
-rw-r--r--mwe/gameloop/src/main.cpp (renamed from gameloop/src/main.cpp)6
-rw-r--r--mwe/gameloop/src/timer.cpp (renamed from gameloop/src/timer.cpp)7
-rw-r--r--mwe/gameloop/src/window.cpp57
-rw-r--r--mwe/gameloop/versions/delayBased.cpp56
-rw-r--r--readme.md24
-rw-r--r--src/makefile2
-rw-r--r--test/dummy.cpp5
-rw-r--r--test/makefile7
44 files changed, 397 insertions, 359 deletions
diff --git a/.gitmodules b/.gitmodules
index f8a9861..bb860c0 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,5 +1,12 @@
[submodule "lib/googletest"]
path = lib/googletest
url = https://github.com/google/googletest
- branch = v1.15.x
+ shallow = true
+[submodule "lib/soloud/src"]
+ path = lib/soloud/src
+ url = https://github.com/jarikomppa/soloud
+ shallow = true
+[submodule "lib/sdl2"]
+ path = lib/sdl2
+ url = https://github.com/libsdl-org/SDL
shallow = true
diff --git a/contributing.md b/contributing.md
index 40e1edd..eec5bc0 100644
--- a/contributing.md
+++ b/contributing.md
@@ -16,8 +16,9 @@
# Code style
-- Formatting nitty-gritty is handled by clang-format/clang-tidy
- ASCII only
+- Formatting nitty-gritty is handled by clang-format/clang-tidy (run `make
+ format` in the root folder of this repository to format all sources files)
- When using libraries of which the header include order is important, make
sure to separate the include statements using a blank line (clang-format may
sort include statements, but does not sort across empty lines).
@@ -32,12 +33,11 @@
# Documentation
- All documentation is written in U.S. English
-- TODO
# Libraries
- External libraries should be included as Git submodules under the `lib/`
subdirectory
-- When adding new submodules, make sure to manually set the `branch` and
- `shallow` options in the [.gitmodules](./.gitmodules) file
+- When adding new submodules, please set the `shallow` option to `true` in the
+ [.gitmodules](./.gitmodules) file
diff --git a/gameloop/.vscode/settings.json b/gameloop/.vscode/settings.json
deleted file mode 100644
index 6cee9cb..0000000
--- a/gameloop/.vscode/settings.json
+++ /dev/null
@@ -1,54 +0,0 @@
-{
- "files.associations": {
- "array": "cpp",
- "atomic": "cpp",
- "bit": "cpp",
- "*.tcc": "cpp",
- "cctype": "cpp",
- "clocale": "cpp",
- "cmath": "cpp",
- "compare": "cpp",
- "concepts": "cpp",
- "cstdarg": "cpp",
- "cstddef": "cpp",
- "cstdint": "cpp",
- "cstdio": "cpp",
- "cstdlib": "cpp",
- "cwchar": "cpp",
- "cwctype": "cpp",
- "deque": "cpp",
- "list": "cpp",
- "map": "cpp",
- "string": "cpp",
- "unordered_map": "cpp",
- "vector": "cpp",
- "exception": "cpp",
- "algorithm": "cpp",
- "functional": "cpp",
- "iterator": "cpp",
- "memory": "cpp",
- "memory_resource": "cpp",
- "numeric": "cpp",
- "optional": "cpp",
- "random": "cpp",
- "string_view": "cpp",
- "system_error": "cpp",
- "tuple": "cpp",
- "type_traits": "cpp",
- "utility": "cpp",
- "initializer_list": "cpp",
- "iosfwd": "cpp",
- "iostream": "cpp",
- "istream": "cpp",
- "limits": "cpp",
- "new": "cpp",
- "numbers": "cpp",
- "ostream": "cpp",
- "sstream": "cpp",
- "stdexcept": "cpp",
- "streambuf": "cpp",
- "cinttypes": "cpp",
- "typeinfo": "cpp",
- "valarray": "cpp"
- }
-}
diff --git a/gameloop/include/eventManager.h b/gameloop/include/eventManager.h
deleted file mode 100644
index 2aa0a68..0000000
--- a/gameloop/include/eventManager.h
+++ /dev/null
@@ -1,4 +0,0 @@
-class EventManager
-{
-
-};
diff --git a/gameloop/include/loopManager.h b/gameloop/include/loopManager.h
deleted file mode 100644
index 06bcd5f..0000000
--- a/gameloop/include/loopManager.h
+++ /dev/null
@@ -1,25 +0,0 @@
-#pragma once
-#include <SDL2/SDL.h>
-#include "window.h"
-#include "gameObject.h"
-class LoopManager{
- public:
- LoopManager();
- void setup();
- void loop();
- private:
-
- std::vector<GameObject*> objectList;
- void processInput();
- void update();
- void lateUpdate();
- void fixedUpdate();
- void render();
- bool gameRunning = false;
- WindowManager window;
- int timeScale = 1;
- float accumulator = 0.0;
- double currentTime;
- double t = 0.0;
- double dt = 0.01;
-};
diff --git a/gameloop/include/window.h b/gameloop/include/window.h
deleted file mode 100644
index cfde0e9..0000000
--- a/gameloop/include/window.h
+++ /dev/null
@@ -1,20 +0,0 @@
-#pragma once
-#include <SDL2/SDL.h>
-#include <vector>
-#include "gameObject.h"
-#include <iostream>
-class WindowManager{
- public:
- WindowManager();
- virtual ~WindowManager();
- void render(std::vector<GameObject*> objects);
- bool initWindow();
- void destroyWindow();
-
- SDL_Renderer* getRenderer();
- private:
- const int SCREEN_WIDTH = 800;
- const int SCREEN_HEIGHT = 600;
- SDL_Window* window = NULL;
- SDL_Renderer* renderer = NULL;
-};
diff --git a/gameloop/src/gameObject.cpp b/gameloop/src/gameObject.cpp
deleted file mode 100644
index f637314..0000000
--- a/gameloop/src/gameObject.cpp
+++ /dev/null
@@ -1,58 +0,0 @@
-#include "gameObject.h"
-std::string GameObject::getName() const{
- return name;
-}
-float GameObject::getX() const{
- return x;
-}
-
-float GameObject::getY() const{
- return y;
-}
-
-float GameObject::getWidth() const{
- return width;
-}
-
-float GameObject::getHeight() const{
- return height;
-}
-
-float GameObject::getVelX() const{
- return velX;
-}
-
-float GameObject::getVelY() const{
- return velY;
-}
-void GameObject::setName(std::string value){
- name = value;
-}
-void GameObject::setX(float value){
- x = value;
-}
-
-void GameObject::setY(float value){
- y = value;
-}
-
-void GameObject::setWidth(float value){
- width = value;
-}
-
-void GameObject::setHeight(float value){
- height = value;
-}
-
-void GameObject::setVelX(float value){
- velX = value;
-}
-
-void GameObject::setVelY(float value){
- velY = value;
-}
-
-GameObject::GameObject(std::string name, float x, float y, float width, float height, float velX, float velY)
- : name(name),x(x), y(y), width(width), height(height), velX(velX), velY(velY) {
-
- }
diff --git a/gameloop/src/window.cpp b/gameloop/src/window.cpp
deleted file mode 100644
index f998a79..0000000
--- a/gameloop/src/window.cpp
+++ /dev/null
@@ -1,60 +0,0 @@
-#include "window.h"
-WindowManager::WindowManager(){
- if( !initWindow() )
- {
- printf( "Failed to initialize!\n" );
- }
-}
-WindowManager::~WindowManager(){
- destroyWindow();
-}
-SDL_Renderer* WindowManager::getRenderer(){
- return renderer;
-}
-
-void WindowManager::render(std::vector<GameObject*> objects){
- // Set the draw color to black and clear the screen
- SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255);
- SDL_RenderClear(renderer);
-
- // Print object position (optional for debugging)
- //fprintf(stderr, "%d\n", objectList.size());
- for(int i = 0; i < objects.size();i++){
- //fprintf(stderr, "%f\n", objectList[i]->getX());
- // Create a rectangle representing the ball
- SDL_Rect ball_rect = {
- (int)objects[i]->getX(),
- (int)objects[i]->getY(),
- (int)objects[i]->getWidth(),
- (int)objects[i]->getHeight(),
- };
- // Set the draw color to white and render the ball
- SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
- SDL_RenderFillRect(renderer, &ball_rect);
- }
-
- SDL_RenderPresent(renderer);
-}
-
-bool WindowManager::initWindow(){
- if(SDL_Init(SDL_INIT_EVERYTHING) != 0){
- fprintf(stderr,"Error inititalising SDL.\n");
- return false;
- }
- window = SDL_CreateWindow( "SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN );
- if(!window){
- fprintf(stderr,"Error creating SDL Window. \n");
- return false;
- }
- renderer = SDL_CreateRenderer(window,-1,0);
- if(!renderer){
- fprintf(stderr,"Error creating SDL renderer. \n");
- return false;
- }
- return true;
-}
-void WindowManager::destroyWindow(){
- SDL_DestroyRenderer(renderer);
- SDL_DestroyWindow(window);
- SDL_Quit();
-}
diff --git a/gameloop/versions/delayBased.cpp b/gameloop/versions/delayBased.cpp
deleted file mode 100644
index a8cad15..0000000
--- a/gameloop/versions/delayBased.cpp
+++ /dev/null
@@ -1,57 +0,0 @@
-#include "loopManager.h"
-#include "timer.h"
-LoopManager::LoopManager(){
-}
-void LoopManager::processInput(){
- SDL_Event event;
- SDL_PollEvent(&event);
- switch(event.type){
- case SDL_QUIT:
- gameRunning = false;
- break;
- case SDL_KEYDOWN:
- if(event.key.keysym.sym == SDLK_ESCAPE){
- gameRunning = false;
- }
- break;
- }
-}
-void LoopManager::loop(){
- fprintf(stderr,"loop. \n");
- while(gameRunning){
- //Timer::getInstance().update();
- //deltaTime = Timer::getInstance().getDeltaTime();
- processInput();
- update();
- render();
- }
- window.destroyWindow();
-}
-void LoopManager::setup(){
- gameRunning = window.initWindow();
- LoopTimer::getInstance().start();
- LoopTimer::getInstance().setFPS(210);
-
- for(int i = 0; i < 2;i++){
- GameObject* square2 = new GameObject("square2",i*40,i*40,20,20,0,0);
- objectList.push_back(square2);
- }
-}
-void LoopManager::render(){
- if(gameRunning){
- window.render(objectList);
- }
-}
-
-void LoopManager::update() {
- LoopTimer& timer = LoopTimer::getInstance();
- timer.enforceFrameRate();
- timer.update();
- float delta= timer.getDeltaTime();
-
- for (int i = 0; i < objectList.size(); i++) {
- objectList[i]->setX(objectList[i]->getX() + 50 * delta);
- objectList[i]->setY(objectList[i]->getY() + 50 * delta);
- }
-}
-
diff --git a/lazy.mk b/lazy.mk
deleted file mode 100644
index a591fd5..0000000
--- a/lazy.mk
+++ /dev/null
@@ -1,33 +0,0 @@
-# NOTE: CMAKE IS THE PRIMARY BUILD SYSTEM FOR THIS PROJECT. THIS FILE IS
-# PROVIDED PURELY FOR CONVENIENCE, AND SHOULD NOT BECOME AN ESSENTIAL PART OF
-# THE BUILD SYSTEM!
-
-BUILD_DIR ?= build
-TARGET ?= $(BUILD_DIR)/main
-
-# always generate fresh build rules when cmake is re-run
-CMFLAGS += --fresh
-# make cmake shut up
-CMFLAGS += --log-level WARNING
-CMFLAGS += -Wno-deprecated
-
-.PHONY: FORCE
-
-all: FORCE $(TARGET)
-
-$(BUILD_DIR)/build.ninja: CMakeLists.txt
- @mkdir -p $(BUILD_DIR)
- @cmake -B $(BUILD_DIR) -G Ninja $(CMFLAGS)
-
-$(TARGET): $(BUILD_DIR)/build.ninja FORCE
- @ninja -C $(BUILD_DIR)
-
-clean: FORCE
- $(RM) -r $(BUILD_DIR)
-
-# Forward any unknown targets to Ninja
-ifneq ($(MAKECMDGOALS),)
-%::
- @ninja -C $(BUILD_DIR) $@
-endif
-
diff --git a/lib/sdl2 b/lib/sdl2
new file mode 160000
+Subproject 9519b9916cd29a14587af0507292f2bd31dd575
diff --git a/lib/soloud/CMakeLists.txt b/lib/soloud/CMakeLists.txt
new file mode 100644
index 0000000..8433281
--- /dev/null
+++ b/lib/soloud/CMakeLists.txt
@@ -0,0 +1,97 @@
+cmake_minimum_required(VERSION 3.28)
+
+set(CMAKE_C_STANDARD 11)
+set(CMAKE_CXX_STANDARD 20)
+
+add_compile_definitions(WITH_SDL2)
+
+add_subdirectory(../sdl2 sdl2)
+
+project(soloud C CXX)
+
+add_library(soloud STATIC
+ src/src/audiosource/ay/chipplayer.cpp
+ src/src/audiosource/ay/sndbuffer.cpp
+ src/src/audiosource/ay/sndchip.cpp
+ src/src/audiosource/ay/sndrender.cpp
+ src/src/audiosource/ay/soloud_ay.cpp
+ src/src/audiosource/monotone/soloud_monotone.cpp
+ src/src/audiosource/noise/soloud_noise.cpp
+ src/src/audiosource/openmpt/soloud_openmpt.cpp
+ src/src/audiosource/openmpt/soloud_openmpt_dll.c
+ src/src/audiosource/sfxr/soloud_sfxr.cpp
+ src/src/audiosource/speech/darray.cpp
+ src/src/audiosource/speech/klatt.cpp
+ src/src/audiosource/speech/resonator.cpp
+ src/src/audiosource/speech/soloud_speech.cpp
+ src/src/audiosource/speech/tts.cpp
+ src/src/audiosource/tedsid/sid.cpp
+ src/src/audiosource/tedsid/soloud_tedsid.cpp
+ src/src/audiosource/tedsid/ted.cpp
+ src/src/audiosource/vic/soloud_vic.cpp
+ src/src/audiosource/vizsn/soloud_vizsn.cpp
+ src/src/audiosource/wav/dr_impl.cpp
+ src/src/audiosource/wav/soloud_wav.cpp
+ src/src/audiosource/wav/soloud_wavstream.cpp
+ src/src/audiosource/wav/stb_vorbis.c
+
+ src/src/backend/alsa/soloud_alsa.cpp
+ src/src/backend/coreaudio/soloud_coreaudio.cpp
+ src/src/backend/jack/soloud_jack.cpp
+ src/src/backend/miniaudio/soloud_miniaudio.cpp
+ src/src/backend/nosound/soloud_nosound.cpp
+ src/src/backend/null/soloud_null.cpp
+ src/src/backend/openal/soloud_openal.cpp
+ src/src/backend/openal/soloud_openal_dll.c
+ src/src/backend/opensles/soloud_opensles.cpp
+ src/src/backend/oss/soloud_oss.cpp
+ src/src/backend/portaudio/soloud_portaudio.cpp
+ src/src/backend/portaudio/soloud_portaudio_dll.c
+ src/src/backend/sdl/soloud_sdl1.cpp
+ src/src/backend/sdl/soloud_sdl1_dll.c
+ src/src/backend/sdl/soloud_sdl2.cpp
+ src/src/backend/sdl/soloud_sdl2_dll.c
+ src/src/backend/sdl2_static/soloud_sdl2_static.cpp
+ src/src/backend/sdl_static/soloud_sdl_static.cpp
+ src/src/backend/wasapi/soloud_wasapi.cpp
+ src/src/backend/winmm/soloud_winmm.cpp
+ src/src/backend/xaudio2/soloud_xaudio2.cpp
+
+ src/src/core/soloud.cpp
+ src/src/core/soloud_audiosource.cpp
+ src/src/core/soloud_bus.cpp
+ src/src/core/soloud_core_3d.cpp
+ src/src/core/soloud_core_basicops.cpp
+ src/src/core/soloud_core_faderops.cpp
+ src/src/core/soloud_core_filterops.cpp
+ src/src/core/soloud_core_getters.cpp
+ src/src/core/soloud_core_setters.cpp
+ src/src/core/soloud_core_voicegroup.cpp
+ src/src/core/soloud_core_voiceops.cpp
+ src/src/core/soloud_fader.cpp
+ src/src/core/soloud_fft.cpp
+ src/src/core/soloud_fft_lut.cpp
+ src/src/core/soloud_file.cpp
+ src/src/core/soloud_filter.cpp
+ src/src/core/soloud_misc.cpp
+ src/src/core/soloud_queue.cpp
+ src/src/core/soloud_thread.cpp
+
+ # src/src/filter/soloud_bassboostfilter.cpp
+ # src/src/filter/soloud_biquadresonantfilter.cpp
+ # src/src/filter/soloud_dcremovalfilter.cpp
+ # src/src/filter/soloud_duckfilter.cpp
+ # src/src/filter/soloud_echofilter.cpp
+ # src/src/filter/soloud_eqfilter.cpp
+ # src/src/filter/soloud_fftfilter.cpp
+ # src/src/filter/soloud_flangerfilter.cpp
+ # src/src/filter/soloud_freeverbfilter.cpp
+ # src/src/filter/soloud_lofifilter.cpp
+ # src/src/filter/soloud_robotizefilter.cpp
+ # src/src/filter/soloud_waveshaperfilter.cpp
+)
+target_include_directories(soloud PRIVATE src/include)
+target_include_directories(soloud SYSTEM INTERFACE src/include)
+
+target_link_libraries(soloud PRIVATE SDL2)
+
diff --git a/lib/soloud/src b/lib/soloud/src
new file mode 160000
+Subproject e82fd32c1f62183922f08c14c814a02b58db187
diff --git a/makefile b/makefile
index 3792250..737e7a8 100644
--- a/makefile
+++ b/makefile
@@ -1,5 +1,3 @@
-all: $(TARGET) # TARGET is defined in lazy.mk (build/main)
-
.PHONY: FORCE
doxygen: Doxyfile FORCE
diff --git a/mwe/audio/bgm.ogg b/mwe/audio/bgm.ogg
new file mode 100644
index 0000000..d6397fb
--- /dev/null
+++ b/mwe/audio/bgm.ogg
Binary files differ
diff --git a/mwe/audio/sfx1.wav b/mwe/audio/sfx1.wav
new file mode 100644
index 0000000..576377a
--- /dev/null
+++ b/mwe/audio/sfx1.wav
Binary files differ
diff --git a/mwe/audio/sfx2.wav b/mwe/audio/sfx2.wav
new file mode 100644
index 0000000..908ec86
--- /dev/null
+++ b/mwe/audio/sfx2.wav
Binary files differ
diff --git a/mwe/audio/sfx3.wav b/mwe/audio/sfx3.wav
new file mode 100644
index 0000000..20b7c84
--- /dev/null
+++ b/mwe/audio/sfx3.wav
Binary files differ
diff --git a/mwe/audio/soloud/CMakeLists.txt b/mwe/audio/soloud/CMakeLists.txt
new file mode 100644
index 0000000..f2df20a
--- /dev/null
+++ b/mwe/audio/soloud/CMakeLists.txt
@@ -0,0 +1,19 @@
+cmake_minimum_required(VERSION 3.28)
+
+set(CMAKE_C_STANDARD 11)
+set(CMAKE_CXX_STANDARD 20)
+set(CMAKE_EXPORT_COMPILE_COMMANDS 1)
+set(CMAKE_BUILD_TYPE Debug)
+
+add_subdirectory(../../../lib/soloud soloud)
+
+project(poc C CXX)
+
+add_executable(main
+ main.cpp
+)
+
+target_link_libraries(main
+ soloud
+)
+
diff --git a/mwe/audio/soloud/main.cpp b/mwe/audio/soloud/main.cpp
new file mode 100644
index 0000000..25ba003
--- /dev/null
+++ b/mwe/audio/soloud/main.cpp
@@ -0,0 +1,48 @@
+#include <soloud.h>
+#include <soloud_wav.h>
+#include <soloud_wavstream.h>
+
+#include <chrono>
+#include <thread>
+
+using namespace std;
+using namespace std::chrono_literals;
+
+int main() {
+ SoLoud::Soloud soloud;
+ soloud.init();
+
+ // load background track
+ SoLoud::WavStream bgm;
+ bgm.load("../bgm.ogg");
+ // NOTE: SoLoud::Wav is poorly named as it also supports FLAC, MP3 and OGG
+
+ // load three short samples
+ SoLoud::Wav sfx[3];
+ sfx[0].load("../sfx1.wav");
+ sfx[1].load("../sfx2.wav");
+ sfx[2].load("../sfx3.wav");
+
+ // start the background track
+ SoLoud::handle bgm_handle = soloud.play(bgm);
+
+ // play each sample sequentially
+ this_thread::sleep_for(500ms);
+ soloud.play(sfx[0]);
+ this_thread::sleep_for(500ms);
+ soloud.play(sfx[1]);
+ soloud.setPause(bgm_handle, true);
+ this_thread::sleep_for(500ms);
+ soloud.play(sfx[2]);
+ soloud.setPause(bgm_handle, false);
+ this_thread::sleep_for(500ms);
+
+ // play all samples simultaniously
+ for (unsigned i = 0; i < 3; i++)
+ soloud.play(sfx[i]);
+ this_thread::sleep_for(1000ms);
+
+ // stop all audio and exit
+ soloud.deinit();
+ return 0;
+}
diff --git a/mwe/dynlink/exec/main.c b/mwe/dynlink/exec/main.c
index e3f458a..2bbdc20 100644
--- a/mwe/dynlink/exec/main.c
+++ b/mwe/dynlink/exec/main.c
@@ -5,4 +5,3 @@ int main() {
return 0;
}
-
diff --git a/mwe/dynlink/exec/makefile b/mwe/dynlink/exec/makefile
deleted file mode 100644
index eec7c61..0000000
--- a/mwe/dynlink/exec/makefile
+++ /dev/null
@@ -1 +0,0 @@
-include ../../../lazy.mk
diff --git a/mwe/dynlink/lib/lib.c b/mwe/dynlink/lib/lib.c
index 930e403..c7a78e4 100644
--- a/mwe/dynlink/lib/lib.c
+++ b/mwe/dynlink/lib/lib.c
@@ -1,6 +1,3 @@
#include <stdio.h>
-void library_function() {
- printf("%s\n", __PRETTY_FUNCTION__);
-}
-
+void library_function() { printf("%s\n", __PRETTY_FUNCTION__); }
diff --git a/mwe/dynlink/lib/lib.h b/mwe/dynlink/lib/lib.h
index 068f07d..093eadb 100644
--- a/mwe/dynlink/lib/lib.h
+++ b/mwe/dynlink/lib/lib.h
@@ -1,4 +1,3 @@
#pragma once
void library_function();
-
diff --git a/mwe/dynlink/lib/makefile b/mwe/dynlink/lib/makefile
deleted file mode 100644
index eec7c61..0000000
--- a/mwe/dynlink/lib/makefile
+++ /dev/null
@@ -1 +0,0 @@
-include ../../../lazy.mk
diff --git a/gameloop/CMakeLists.txt b/mwe/gameloop/CMakeLists.txt
index 6bc5017..233ba98 100644
--- a/gameloop/CMakeLists.txt
+++ b/mwe/gameloop/CMakeLists.txt
@@ -8,21 +8,19 @@ set(CMAKE_CXX_STANDARD_REQUIRED True)
# Find the SDL2 package
find_package(SDL2 REQUIRED)
-# Add your executable
-set(SOURCES
- src/loopManager
- src/window.cpp
- src/main.cpp
+add_executable(gameloop
+ src/loopManager.cpp
+ src/window.cpp
+ src/main.cpp
src/eventManager.cpp
src/gameObject.cpp
src/timer.cpp
)
-add_executable(gameloop ${SOURCES})
-
# Link the SDL2 library to your project
target_link_libraries(gameloop ${SDL2_LIBRARIES})
# Include SDL2 header files and project headers
target_include_directories(gameloop PRIVATE ${SDL2_INCLUDE_DIRS})
target_include_directories(gameloop PRIVATE ${CMAKE_SOURCE_DIR}/include)
+
diff --git a/gameloop/imgs/demo.bmp b/mwe/gameloop/imgs/demo.bmp
index 65354fe..65354fe 100644
--- a/gameloop/imgs/demo.bmp
+++ b/mwe/gameloop/imgs/demo.bmp
Binary files differ
diff --git a/gameloop/imgs/demo.jpg b/mwe/gameloop/imgs/demo.jpg
index f534e1b..f534e1b 100644
--- a/gameloop/imgs/demo.jpg
+++ b/mwe/gameloop/imgs/demo.jpg
Binary files differ
diff --git a/mwe/gameloop/include/eventManager.h b/mwe/gameloop/include/eventManager.h
new file mode 100644
index 0000000..69c6801
--- /dev/null
+++ b/mwe/gameloop/include/eventManager.h
@@ -0,0 +1 @@
+class EventManager {};
diff --git a/gameloop/include/gameObject.h b/mwe/gameloop/include/gameObject.h
index fc7d026..fc7d026 100644
--- a/gameloop/include/gameObject.h
+++ b/mwe/gameloop/include/gameObject.h
diff --git a/mwe/gameloop/include/loopManager.h b/mwe/gameloop/include/loopManager.h
new file mode 100644
index 0000000..e202423
--- /dev/null
+++ b/mwe/gameloop/include/loopManager.h
@@ -0,0 +1,25 @@
+#pragma once
+#include "gameObject.h"
+#include "window.h"
+#include <SDL2/SDL.h>
+class LoopManager {
+public:
+ LoopManager();
+ void setup();
+ void loop();
+
+private:
+ std::vector<GameObject *> objectList;
+ void processInput();
+ void update();
+ void lateUpdate();
+ void fixedUpdate();
+ void render();
+ bool gameRunning = false;
+ WindowManager window;
+ int timeScale = 1;
+ float accumulator = 0.0;
+ double currentTime;
+ double t = 0.0;
+ double dt = 0.01;
+};
diff --git a/gameloop/include/timer.h b/mwe/gameloop/include/timer.h
index ca1e5f3..ca1e5f3 100644
--- a/gameloop/include/timer.h
+++ b/mwe/gameloop/include/timer.h
diff --git a/mwe/gameloop/include/window.h b/mwe/gameloop/include/window.h
new file mode 100644
index 0000000..6806a26
--- /dev/null
+++ b/mwe/gameloop/include/window.h
@@ -0,0 +1,21 @@
+#pragma once
+#include "gameObject.h"
+#include <SDL2/SDL.h>
+#include <iostream>
+#include <vector>
+class WindowManager {
+public:
+ WindowManager();
+ virtual ~WindowManager();
+ void render(std::vector<GameObject *> objects);
+ bool initWindow();
+ void destroyWindow();
+
+ SDL_Renderer * getRenderer();
+
+private:
+ const int SCREEN_WIDTH = 800;
+ const int SCREEN_HEIGHT = 600;
+ SDL_Window * window = NULL;
+ SDL_Renderer * renderer = NULL;
+};
diff --git a/gameloop/src/eventManager.cpp b/mwe/gameloop/src/eventManager.cpp
index e69de29..e69de29 100644
--- a/gameloop/src/eventManager.cpp
+++ b/mwe/gameloop/src/eventManager.cpp
diff --git a/mwe/gameloop/src/gameObject.cpp b/mwe/gameloop/src/gameObject.cpp
new file mode 100644
index 0000000..78217c4
--- /dev/null
+++ b/mwe/gameloop/src/gameObject.cpp
@@ -0,0 +1,30 @@
+#include "gameObject.h"
+std::string GameObject::getName() const { return name; }
+float GameObject::getX() const { return x; }
+
+float GameObject::getY() const { return y; }
+
+float GameObject::getWidth() const { return width; }
+
+float GameObject::getHeight() const { return height; }
+
+float GameObject::getVelX() const { return velX; }
+
+float GameObject::getVelY() const { return velY; }
+void GameObject::setName(std::string value) { name = value; }
+void GameObject::setX(float value) { x = value; }
+
+void GameObject::setY(float value) { y = value; }
+
+void GameObject::setWidth(float value) { width = value; }
+
+void GameObject::setHeight(float value) { height = value; }
+
+void GameObject::setVelX(float value) { velX = value; }
+
+void GameObject::setVelY(float value) { velY = value; }
+
+GameObject::GameObject(std::string name, float x, float y, float width,
+ float height, float velX, float velY)
+ : name(name), x(x), y(y), width(width), height(height), velX(velX),
+ velY(velY) {}
diff --git a/gameloop/src/loopManager.cpp b/mwe/gameloop/src/loopManager.cpp
index dde3cef..dde3cef 100644
--- a/gameloop/src/loopManager.cpp
+++ b/mwe/gameloop/src/loopManager.cpp
diff --git a/gameloop/src/main.cpp b/mwe/gameloop/src/main.cpp
index 2333e63..9f407c4 100644
--- a/gameloop/src/main.cpp
+++ b/mwe/gameloop/src/main.cpp
@@ -4,13 +4,9 @@
//#include "window.h"
#include "loopManager.h"
#include "timer.h"
-//Screen dimension constants
-//Starts up SDL and creates window
-
-int main( int argc, char* args[] )
-{
+int main(int argc, char * args[]) {
LoopManager gameLoop;
gameLoop.setup();
gameLoop.loop();
diff --git a/gameloop/src/timer.cpp b/mwe/gameloop/src/timer.cpp
index 03a2dbb..03fb9eb 100644
--- a/gameloop/src/timer.cpp
+++ b/mwe/gameloop/src/timer.cpp
@@ -1,15 +1,11 @@
#include "timer.h"
-
-// Constructor (private)
LoopTimer::LoopTimer(){}
-// Get the singleton instance of the timer
LoopTimer& LoopTimer::getInstance() {
static LoopTimer instance;
return instance;
}
-// Start the timer (initialize frame time)
void LoopTimer::start() {
lastFrameTime = SDL_GetTicks64();
elapsedTime = 0;
@@ -17,10 +13,9 @@ void LoopTimer::start() {
deltaTime = 0;
}
-// Update the timer, calculate deltaTime
void LoopTimer::update() {
uint64_t currentFrameTime = SDL_GetTicks64();
- deltaTime = (currentFrameTime - lastFrameTime) / 1000.0; // Convert to seconds
+ deltaTime = (currentFrameTime - lastFrameTime) / 1000.0;
if (deltaTime > maximumDeltaTime) {
deltaTime = maximumDeltaTime;
diff --git a/mwe/gameloop/src/window.cpp b/mwe/gameloop/src/window.cpp
new file mode 100644
index 0000000..dd1d98f
--- /dev/null
+++ b/mwe/gameloop/src/window.cpp
@@ -0,0 +1,57 @@
+#include "window.h"
+WindowManager::WindowManager() {
+ if (!initWindow()) {
+ printf("Failed to initialize!\n");
+ }
+}
+WindowManager::~WindowManager() { destroyWindow(); }
+SDL_Renderer * WindowManager::getRenderer() { return renderer; }
+
+void WindowManager::render(std::vector<GameObject *> objects) {
+ // Set the draw color to black and clear the screen
+ SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255);
+ SDL_RenderClear(renderer);
+
+ // Print object position (optional for debugging)
+ //fprintf(stderr, "%d\n", objectList.size());
+ for (int i = 0; i < objects.size(); i++) {
+ //fprintf(stderr, "%f\n", objectList[i]->getX());
+ // Create a rectangle representing the ball
+ SDL_Rect ball_rect = {
+ (int) objects[i]->getX(),
+ (int) objects[i]->getY(),
+ (int) objects[i]->getWidth(),
+ (int) objects[i]->getHeight(),
+ };
+ // Set the draw color to white and render the ball
+ SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
+ SDL_RenderFillRect(renderer, &ball_rect);
+ }
+
+ SDL_RenderPresent(renderer);
+}
+
+bool WindowManager::initWindow() {
+ if (SDL_Init(SDL_INIT_EVERYTHING) != 0) {
+ fprintf(stderr, "Error inititalising SDL.\n");
+ return false;
+ }
+ window = SDL_CreateWindow("SDL Tutorial", SDL_WINDOWPOS_UNDEFINED,
+ SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH,
+ SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
+ if (!window) {
+ fprintf(stderr, "Error creating SDL Window. \n");
+ return false;
+ }
+ renderer = SDL_CreateRenderer(window, -1, 0);
+ if (!renderer) {
+ fprintf(stderr, "Error creating SDL renderer. \n");
+ return false;
+ }
+ return true;
+}
+void WindowManager::destroyWindow() {
+ SDL_DestroyRenderer(renderer);
+ SDL_DestroyWindow(window);
+ SDL_Quit();
+}
diff --git a/mwe/gameloop/versions/delayBased.cpp b/mwe/gameloop/versions/delayBased.cpp
new file mode 100644
index 0000000..253a03a
--- /dev/null
+++ b/mwe/gameloop/versions/delayBased.cpp
@@ -0,0 +1,56 @@
+#include "loopManager.h"
+#include "timer.h"
+LoopManager::LoopManager() {}
+void LoopManager::processInput() {
+ SDL_Event event;
+ SDL_PollEvent(&event);
+ switch (event.type) {
+ case SDL_QUIT:
+ gameRunning = false;
+ break;
+ case SDL_KEYDOWN:
+ if (event.key.keysym.sym == SDLK_ESCAPE) {
+ gameRunning = false;
+ }
+ break;
+ }
+}
+void LoopManager::loop() {
+ fprintf(stderr, "loop. \n");
+ while (gameRunning) {
+ //Timer::getInstance().update();
+ //deltaTime = Timer::getInstance().getDeltaTime();
+ processInput();
+ update();
+ render();
+ }
+ window.destroyWindow();
+}
+void LoopManager::setup() {
+ gameRunning = window.initWindow();
+ LoopTimer::getInstance().start();
+ LoopTimer::getInstance().setFPS(210);
+
+ for (int i = 0; i < 2; i++) {
+ GameObject * square2
+ = new GameObject("square2", i * 40, i * 40, 20, 20, 0, 0);
+ objectList.push_back(square2);
+ }
+}
+void LoopManager::render() {
+ if (gameRunning) {
+ window.render(objectList);
+ }
+}
+
+void LoopManager::update() {
+ LoopTimer & timer = LoopTimer::getInstance();
+ timer.enforceFrameRate();
+ timer.update();
+ float delta = timer.getDeltaTime();
+
+ for (int i = 0; i < objectList.size(); i++) {
+ objectList[i]->setX(objectList[i]->getX() + 50 * delta);
+ objectList[i]->setY(objectList[i]->getY() + 50 * delta);
+ }
+}
diff --git a/readme.md b/readme.md
index 4974694..f3aab09 100644
--- a/readme.md
+++ b/readme.md
@@ -1,6 +1,26 @@
# crêpe
-systems programming in c++ minor engine
+This repository contains:
-please read [contributing.md](./contributing.md)
+|folder|content|
+|-|-|
+|`lib/`|third-party libraries as git submodules|
+|`mwe/`|minimal working examples and proof-of-concepts|
+|`src/crepe/`|game engine source code|
+|`test/`|game engine unit tests|
+
+## Compilation
+
+This repository uses CMake (the makefile in the root of this repository is for
+running auxiliary tasks only). Make sure you have initialized and updated the
+submodules before compiling.
+
+## Documentation
+
+API documentation is done using Doxygen. To generate the docs, run `make
+doxygen`.
+
+## Code style
+
+Please read [contributing.md](./contributing.md).
diff --git a/src/makefile b/src/makefile
deleted file mode 100644
index 8352615..0000000
--- a/src/makefile
+++ /dev/null
@@ -1,2 +0,0 @@
-include ../lazy.mk
-
diff --git a/test/dummy.cpp b/test/dummy.cpp
index 08850b2..a00a9c6 100644
--- a/test/dummy.cpp
+++ b/test/dummy.cpp
@@ -1,6 +1,3 @@
#include <gtest/gtest.h>
-TEST(dummy, foo) {
- ASSERT_TRUE(1);
-}
-
+TEST(dummy, foo) { ASSERT_TRUE(1); }
diff --git a/test/makefile b/test/makefile
deleted file mode 100644
index 7aeee34..0000000
--- a/test/makefile
+++ /dev/null
@@ -1,7 +0,0 @@
-TARGET = $(BUILD_DIR)/test
-
-include ../lazy.mk
-
-test: $(TARGET) FORCE
- $(TARGET)
-