From ec8ced3958746e2cfce80f718f029d06a839fd9c Mon Sep 17 00:00:00 2001 From: Stefan Stefanov Date: Sat, 10 Feb 2024 18:11:18 +0200 Subject: [PATCH] added health sprite to the game --- Makefile | 13 ++++++------- assets/texture_atlas.png | Bin 1560 -> 1652 bytes game.odin | 34 ++++++++++++++++++++++++++++------ main.odin | 2 ++ sprites.odin | 1 + 5 files changed, 37 insertions(+), 13 deletions(-) diff --git a/Makefile b/Makefile index c32d29e..25efb0d 100644 --- a/Makefile +++ b/Makefile @@ -3,6 +3,12 @@ REL_FOLDER=release_x64_win DEB_FOLDER=debug_x64_win BIN_FOLDER=./bin +run: build + ${BIN_FOLDER}/${EXE}.exe + +run_rel: build_release + ${BIN_FOLDER}/${EXE}_rel.exe + build: clean odin build . -out:${BIN_FOLDER}/${EXE}.exe -debug @@ -19,10 +25,3 @@ package: build_release cp -r ./assets/ ${BIN_FOLDER}/${REL_FOLDER}/ cp ${BIN_FOLDER}/${EXE}_rel.exe ${BIN_FOLDER}/${REL_FOLDER}/${EXE}.exe tar.exe -a -c -f ${BIN_FOLDER}/release_x64_win.zip ${BIN_FOLDER}/release_x64_win - -run: build - ${BIN_FOLDER}/${EXE}.exe - -run_rel: build_release - ${BIN_FOLDER}/${EXE}_rel.exe - diff --git a/assets/texture_atlas.png b/assets/texture_atlas.png index 723bd8366c5f50e829a6e5b978deae5f0030d593..70d40500d7118eec9e45e89f22ba8e79884dfdac 100644 GIT binary patch delta 1538 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 0; row -= 1 { + for row := ALIEN_ROWS - 1; row >= 0; row -= 1 { alien := aliens[(row * ALIENS_PER_ROW) + alien_idx] if alien.alive { - if result % 3 == 0 { + if result % 6 == 0 && frame_counter % int(target_fps * 1) == 0 { fire_bullet(&bullets, &bullet_index, false, &alien) } break @@ -171,7 +171,7 @@ update_game :: proc(state: ^GameState) { for &bullet, bi in bullets { if !bullet.alive {continue} // Update bullet pos first - bullet_dir : f32 = bullet.player_bullet ? -1 : 1 + bullet_dir: f32 = bullet.player_bullet ? -1 : 1 bullet.position.y += f32(BULLET_SPEED * delta_time) * bullet_dir } corner_alien_pos := @@ -213,8 +213,14 @@ update_game :: proc(state: ^GameState) { for &bullet, bi in bullets { if !bullet.alive {continue} // Collision check bullet - if collideAABB(ALIEN_RECT, alien.position, BULLET_RECT, bullet.position) { - bullet, alien = damage_alien(state, bullets[bi], aliens[ai]) + if bullet.player_bullet { + if collideAABB(ALIEN_RECT, alien.position, BULLET_RECT, bullet.position) { + bullet, alien = damage_alien(state, bullets[bi], aliens[ai]) + } + } else { + if collideAABB(PLAYER_RECT, player_pos, BULLET_RECT, bullet.position) { + bullet = damage_player(state, bullets[bi]) + } } } } @@ -361,6 +367,22 @@ draw_game :: proc(state: ^GameState) { ) } - rl.DrawText(rl.TextFormat("Score: %d", player_score), 20, 0, 20, rl.WHITE) + rl.DrawText(rl.TextFormat("SCORE: %d", player_score), 20, 0, 20, rl.WHITE) + for heart, hi in 0..= player_health { + rl.DrawTexturePro( + texture_atlas, + {HEART_TO.x, HEART_TO.y, SPRITE_CELL, SPRITE_CELL}, + { + f32(screen_width / GLOBAL_SPRITE_SCALE) - f32(hi * SPRITE_CELL * GLOBAL_SPRITE_SCALE), + 0, + f32(PLAYER_RECT.x), + f32(PLAYER_RECT.y), + }, + {0,0}, + 0, + rl.WHITE, + ) + } + // rl.DrawText("GAMEPLAY SCREEN", 20, 20, 40, rl.MAROON) } diff --git a/main.odin b/main.odin index fad77f9..6c300cf 100644 --- a/main.odin +++ b/main.odin @@ -103,6 +103,8 @@ main :: proc() { if !ODIN_DEBUG { rl.SetExitKey(nil) + } else { + log.info("Built with Odin compiler version: ", ODIN_VERSION) } texture_atlas_image = rl.LoadImage(TEXTURE_ATLAS_PATH) diff --git a/sprites.odin b/sprites.odin index 8a2f6c5..95707f3 100644 --- a/sprites.odin +++ b/sprites.odin @@ -28,6 +28,7 @@ PLAYER_RECT :: glm.vec2{SPRITE_CELL * GLOBAL_SPRITE_SCALE, SPRITE_CELL * GLOBAL_ // texture offset for ship SHIP_TO :: glm.vec2{0, 112} +HEART_TO :: glm.vec2{16, 112} BULLET_TO := [2]glm.vec2{{0, 80}, {16, 80}} BULLET_FRAME_ANIM := 0