Compare commits

...
3 Commits
Author SHA1 Message Date
jasonhilder 5038bc5673 Setup game controller status on game state. 2026-10-21 07:28:49 +02:00
jasonhilder 7fbdb9f5cf Updated readme for credits. 2026-10-19 07:19:10 +02:00
jasonhilder b1bab7ece5 Screenshots v1.0 2026-10-15 06:59:13 +02:00
7 changed files with 29 additions and 19 deletions
+2 -2
View File
@@ -70,10 +70,10 @@ While in theory if you have the odin compiler it should just work as there is no
## Credits ## Credits
Sourced from the web, not mine. Sourced from the web, not mine.
| File | Title | Author | Source | License | | File | Title | Author | Source | License |
|------|-------|--------|--------|---------| |------|-------|--------|--------|---------|
| `...` | TODO | TODO | URL | TODO | | `UI, gameplay effects` | Impact Sounds 1.0 + Interface Sounds 1.0 | Kenney | https://www.kenney.nl | [CC0 1.0](http://creativecommons.org/publicdomain/zero/1.0/) |
| `Background Music` | 5 Action Chiptunes By Juhani Junkala | Juhani Junkala | <download page URL> | CC0 1.0 |
### Third-Party ### Third-Party
Binary file not shown.

After

Width:  |  Height:  |  Size: 632 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 400 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 420 KiB

+9 -4
View File
@@ -49,7 +49,11 @@ Game :: struct {
// resolution state // resolution state
window_w: i32, window_w: i32,
window_h: i32, window_h: i32,
res_index: int res_index: int,
// Controller state.
controller_gid: i32,
controller_connected: bool,
} }
// AO: lets me load this at compile time! // AO: lets me load this at compile time!
@@ -60,6 +64,7 @@ gamepad_compat := #load("../gamecontrollerdb.txt", string)
// ------------------------------------------------------------------------------ // ------------------------------------------------------------------------------
game_init :: proc(game: ^Game) { game_init :: proc(game: ^Game) {
rl.SetConfigFlags({.WINDOW_ALWAYS_RUN, .MSAA_4X_HINT, .WINDOW_RESIZABLE}) rl.SetConfigFlags({.WINDOW_ALWAYS_RUN, .MSAA_4X_HINT, .WINDOW_RESIZABLE})
game.controller_gid = -1
game.res_index = 0 game.res_index = 0
game.window_w = RESOLUTIONS[game.res_index].width game.window_w = RESOLUTIONS[game.res_index].width
game.window_h = RESOLUTIONS[game.res_index].height game.window_h = RESOLUTIONS[game.res_index].height
@@ -67,9 +72,10 @@ game_init :: proc(game: ^Game) {
rl.InitWindow(game.window_w, game.window_h, WINDOW_TITLE) rl.InitWindow(game.window_w, game.window_h, WINDOW_TITLE)
rl.SetTargetFPS(60) rl.SetTargetFPS(60)
rl.SetExitKey(.KEY_NULL) rl.SetExitKey(.KEY_NULL)
rl.ToggleBorderlessWindowed()
rl.HideCursor() rl.HideCursor()
game_set_resolution(game, game.res_index)
gamepad_cstr := strings.clone_to_cstring(gamepad_compat) gamepad_cstr := strings.clone_to_cstring(gamepad_compat)
defer delete(gamepad_cstr) defer delete(gamepad_cstr)
rl.SetGamepadMappings(gamepad_cstr) rl.SetGamepadMappings(gamepad_cstr)
@@ -115,7 +121,7 @@ game_init :: proc(game: ^Game) {
game_update :: proc(game: ^Game) { game_update :: proc(game: ^Game) {
dt := rl.GetFrameTime() dt := rl.GetFrameTime()
input := poll_input() input := poll_input(game)
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
// Update Camera Shake // Update Camera Shake
@@ -183,7 +189,6 @@ game_render :: proc(game: ^Game) {
render_game_to_window(game) render_game_to_window(game)
// when DEBUG do rl.DrawFPS(10, rl.GetScreenHeight() - 20) // when DEBUG do rl.DrawFPS(10, rl.GetScreenHeight() - 20)
rl.EndDrawing() rl.EndDrawing()
} }
+18 -12
View File
@@ -1,5 +1,6 @@
package game package game
import "core:strings"
import rl "vendor:raylib" import rl "vendor:raylib"
// ------------------------------------------------------------------------------ // ------------------------------------------------------------------------------
@@ -21,35 +22,40 @@ Input_Event :: struct {
} }
// Currently active controller // Currently active controller
active_gamepad_id: i32 = -1 is_real_pad :: proc(i: i32) -> bool {
return rl.IsGamepadAvailable(i) &&
!strings.contains(string(rl.GetGamepadName(i)), "Mouse") &&
!strings.contains(string(rl.GetGamepadName(i)), "Keyboard")
}
update_active_gamepad :: proc() { update_active_gamepad :: proc(game: ^Game) {
// is there currently a controller, if so check if its still connected. // is there currently a controller, if so check if its still connected.
if active_gamepad_id != -1 { if game.controller_gid != -1 {
if rl.IsGamepadAvailable(active_gamepad_id) { if rl.IsGamepadAvailable(game.controller_gid) {
// do nothing still connected // do nothing still connected
return return
} }
// else we lost connection // else we lost connection
active_gamepad_id = -1 game.controller_gid = -1
rl.TraceLog(.WARNING, "Controller disconnected!!") game.controller_connected = false
} }
for i: i32 = 0; i < 4; i += 1 { for i: i32 = 0; i < 4; i += 1 {
if rl.IsGamepadAvailable(i) { if rl.IsGamepadAvailable(i) && is_real_pad(i) {
active_gamepad_id = i game.controller_connected = true
game.controller_gid = i
return return
} }
} }
} }
poll_input :: proc() -> Input_Event { poll_input :: proc(game: ^Game) -> Input_Event {
input_event := Input_Event{} input_event := Input_Event{}
input_dir := rl.Vector2{0, 0} input_dir := rl.Vector2{0, 0}
update_active_gamepad() update_active_gamepad(game)
gamepad_active := active_gamepad_id != -1 gamepad_active := game.controller_connected
gid := active_gamepad_id gid := game.controller_gid
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
// Continuous Input (keyboard + gamepad d-pad) // Continuous Input (keyboard + gamepad d-pad)
-1
View File
@@ -1,6 +1,5 @@
package game package game
import "core:strings"
import "core:fmt" import "core:fmt"
import rl "vendor:raylib" import rl "vendor:raylib"