diff options
| author | Arslaan Pathan <[email protected]> | 2025-06-29 12:58:54 +1200 |
|---|---|---|
| committer | Arslaan Pathan <[email protected]> | 2025-06-29 12:58:54 +1200 |
| commit | 7620372001ea41abe30f1a14216dda81c1103889 (patch) | |
| tree | 2337d0d6a7127f5e44a30a06b97257dcbd50b05c /src/main.cpp | |
| parent | 2ca2d786af025689fb4f18800f219bedc97d1ba9 (diff) | |
| download | showdownofthesticks-7620372001ea41abe30f1a14216dda81c1103889.tar.xz showdownofthesticks-7620372001ea41abe30f1a14216dda81c1103889.zip | |
KO graphics and sound + background music and sound support!
Diffstat (limited to 'src/main.cpp')
| -rw-r--r-- | src/main.cpp | 38 |
1 files changed, 37 insertions, 1 deletions
diff --git a/src/main.cpp b/src/main.cpp index eeed38f..c497786 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -119,6 +119,33 @@ int l_keycode_from_string(lua_State *L) return 1; } +int l_play_sound(lua_State* L) { + const char* filepath = luaL_checkstring(L, 1); + Mix_Chunk* sound = Mix_LoadWAV(filepath); + if (!sound) { + std::cerr << "Failed to load sound: " << Mix_GetError() << std::endl; + return 0; + } + Mix_PlayChannel(-1, sound, 0); // Play once on any free channel + return 0; +} + +int l_play_sound_loop(lua_State* L) { + const char* filepath = luaL_checkstring(L, 1); + Mix_Chunk* sound = Mix_LoadWAV(filepath); + if (!sound) { + std::cerr << "Failed to load sound: " << Mix_GetError() << std::endl; + return 0; + } + Mix_PlayChannel(-1, sound, -1); // Play forever until stopped on any free channel + return 0; +} + +int l_stop_all_sounds(lua_State* L) { + Mix_HaltChannel(-1); // Stops all channels immediately + return 0; // No return values to Lua +} + int l_queue_button_for_render(lua_State *L) { const char *text = luaL_checkstring(L, 1); @@ -333,6 +360,9 @@ void expose_c_functions() lua_register(L, "getTextWidth", l_get_text_width); lua_register(L, "quitGame", l_quit_game); lua_register(L, "queueRectForRender", l_queue_rect_for_render); + lua_register(L, "playSound", l_play_sound); + lua_register(L, "playSoundLoop", l_play_sound_loop); + lua_register(L, "stopAllSounds", l_stop_all_sounds); } int main() @@ -370,6 +400,12 @@ int main() SDL_SetWindowResizable(window, SDL_TRUE); SDL_SetWindowFullscreen(window, SDL_WINDOW_FULLSCREEN_DESKTOP); + if (Mix_OpenAudio(44100, MIX_DEFAULT_FORMAT, 2, 2048) == -1) + { + std::cerr << "Mix_OpenAudio failed: " << Mix_GetError() << std::endl; + return 1; + } + if (TTF_Init() == -1) { std::cerr << "TTF_Init failed: " << TTF_GetError() << std::endl; @@ -549,7 +585,7 @@ int main() textList.clear(); SDL_RenderPresent(renderer); - + // Frame limiting Uint32 frameTime = SDL_GetTicks() - frameStart; const int targetFrameTimeMs = 1000 / 60; // 60 FPS |
