diff --git a/assets/MainMenu.xcf b/assets/MainMenu.xcf new file mode 100644 index 0000000..7f1ac36 Binary files /dev/null and b/assets/MainMenu.xcf differ diff --git a/data/MainMenu.bmp b/data/MainMenu.bmp new file mode 100644 index 0000000..cc4261a Binary files /dev/null and b/data/MainMenu.bmp differ diff --git a/src/Main.cake b/src/Main.cake index d74deba..4497348 100644 --- a/src/Main.cake +++ b/src/Main.cake @@ -727,6 +727,37 @@ ;; Main ;; +;; On return null, play the game, else, exit for returned reason +(defun-local do-main-menu (renderer (* SDL_Renderer) + main-menu-texture (* SDL_Texture) + &return (* (const char))) + (var exit-reason (* (const char)) null) + (var in-state input-state (array 0)) + (while (not exit-reason) + (var event SDL_Event) + (while (SDL_PollEvent (addr event)) + (when (= (field event type) SDL_QUIT) + (set exit-reason "Window event"))) + (var currentKeyStates (* (const Uint8)) (SDL_GetKeyboardState null)) + (when (at SDL_SCANCODE_ESCAPE currentKeyStates) + (set exit-reason "Escape pressed")) + + (unless (= 0 (SDL_RenderCopy renderer main-menu-texture + null null)) + (sdl-print-error) + (set exit-reason "Render error")) + + (var mouse-x int 0) + (var mouse-y int 0) + (var mouse-button-state Uint32 (SDL_GetMouseState (addr mouse-x) (addr mouse-y))) + (when (bit-and mouse-button-state SDL_BUTTON_LMASK) + ;; Play the game! + (return null)) + + (SDL_RenderPresent renderer) + (SDL_Delay todo-arbitrary-delay-ms)) + (return exit-reason)) + (comptime-cond ('Kitty-Main (defun main (num-args int args ([] (* char)) &return int) (SDL_Log "Kitty Gridlock\n\n @@ -798,6 +829,10 @@ Rush Hour database from Michael Fogleman.\n\n") (read-progression-data) + (var main-menu-texture (* SDL_Texture) + (sdl-texture-from-bmp (in-data-dir "MainMenu.bmp") renderer)) + (unless main-menu-texture (return 1)) + (var background-texture (* SDL_Texture) (sdl-texture-from-bmp (in-data-dir "Board.bmp") renderer)) (unless background-texture (return 1)) @@ -853,7 +888,8 @@ Rush Hour database from Michael Fogleman.\n\n") (unless font-texture (return 1)) (var textures-to-destroy ([] (* SDL_Texture)) - (array background-texture + (array main-menu-texture + background-texture grid-texture pieces-texture win-texture @@ -886,6 +922,9 @@ Rush Hour database from Michael Fogleman.\n\n") (sdl-print-time-delta start-load-ticks "Game loop starting") (var exit-reason (* (const char)) null) + + (set exit-reason (do-main-menu renderer main-menu-texture)) + (while (not exit-reason) (var event SDL_Event) (while (SDL_PollEvent (addr event)) @@ -1110,6 +1149,7 @@ Rush Hour database from Michael Fogleman.\n\n") recent-n-perf-counts i (var delta-time float (/ (at i recent-n-perf-counts) (type-cast performance-num-ticks-per-second float))) + (unless delta-time (continue)) (SDL_Log "\t%f %fhz\n" delta-time (/ 1.f delta-time)))) ;;