From 01dec4e5c1732a51ea3f6d903ca6c09f1ccffd2d Mon Sep 17 00:00:00 2001 From: Stefan Stefanov Date: Sat, 28 Dec 2024 22:49:23 +0200 Subject: [PATCH] update drawing items and attempt at adding sound FX --- assets/sounds/pickup_sound.mp3 | Bin 0 -> 16154 bytes assets/sounds/pickup_sound.ogg | Bin 0 -> 27699 bytes assets/sounds/sell_sound.mp3 | Bin 0 -> 5570 bytes assets/tomato_item.png | Bin 0 -> 242 bytes src/main.odin | 194 ++++++++++++++++++++------------- 5 files changed, 119 insertions(+), 75 deletions(-) create mode 100644 assets/sounds/pickup_sound.mp3 create mode 100644 assets/sounds/pickup_sound.ogg create mode 100644 assets/sounds/sell_sound.mp3 create mode 100644 assets/tomato_item.png diff --git a/assets/sounds/pickup_sound.mp3 b/assets/sounds/pickup_sound.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..5904998849ef84ce99483219740cc28816774ff6 GIT binary patch literal 16154 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 T|K86WD(N>?|}b literal 0 HcmV?d00001 diff --git a/assets/sounds/pickup_sound.ogg b/assets/sounds/pickup_sound.ogg new file mode 100644 index 0000000000000000000000000000000000000000..47648df75f83d69228b693d1f1521f5e10e7a4a4 GIT binary patch literal 27699 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 OEr`L|F4PhMDE<%nq;|0Y literal 0 HcmV?d00001 diff --git a/assets/sounds/sell_sound.mp3 b/assets/sounds/sell_sound.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..f4cc225267d061ca62343a0fc31e402efb874af5 GIT binary patch literal 5570 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 bd2Y|XQS5)#zR!Pf{MNe0dx`u13g&+STA|GS literal 0 HcmV?d00001 diff --git a/assets/tomato_item.png b/assets/tomato_item.png new file mode 100644 index 0000000000000000000000000000000000000000..7c5f1043ab235949b05e3355bcb5546de4e17867 GIT binary patch literal 242 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|)_A%&hFJ6_ zCoEt$*tGFaeoFFB`D1R=l2xuMNc_Gt@o|reWP`799CKcq`v3hkzipU-z*$<{Iz}ea z7{nIVJIezEyH>RoY+RLZFS%;p-y;Ft51D49u>rvh?hB45b`}@ZYUnj&9$PB-Y>}y( zTY>k6D#!4v0;?6L=g)WlDCWmpu#-XhKo)~$!!EWJ>*sif9CGSoT_ZI?SkUM~sOgan hEi0yUoK0KB$Y3|qHJi;h?*-7^44$rjF6*2UngGdBRIdO4 literal 0 HcmV?d00001 diff --git a/src/main.odin b/src/main.odin index fec4ff6..545c8b0 100644 --- a/src/main.odin +++ b/src/main.odin @@ -1,5 +1,6 @@ package game +import t "../tween" import sa "core:container/small_array" import "core:fmt" import "core:math" @@ -26,48 +27,28 @@ world_mouse: rl.Vector2 screen_game_area: rl.Rectangle game_render_buffer_area := rl.Rectangle{0, 0, GAME_SCREEN_WIDTH, -GAME_SCREEN_HEIGHT} -player_sprite: []u8 : #load("../assets/player.png") -tomato_sprite: []u8 : #load("../assets/tomato.png") +pickup_sound := rl.LoadSound("assets/sounds/pickup_sound.ogg") + +player_spritesheet_sprite: []u8 : #load("../assets/player.png") +tomato_spritesheet_sprite: []u8 : #load("../assets/tomato.png") +tomato_item_sprite: []u8 : #load("../assets/tomato_item.png") sell_button_sprite: []u8 : #load("../assets/sell_button.png") background_sprite: []u8 : #load("../assets/background.png") tile_dirt_dry_sprite: []u8 : #load("../assets/tile_dirt_dry.png") tile_dirt_wet_sprite: []u8 : #load("../assets/tile_dirt_wet.png") -player_spritesheet_image := rl.LoadImageFromMemory( - ".png", - raw_data(player_sprite), - auto_cast len(player_sprite), -) -tomato_spritesheet_image := rl.LoadImageFromMemory( - ".png", - raw_data(tomato_sprite), - auto_cast len(tomato_sprite), -) -sell_button_image := rl.LoadImageFromMemory( - ".png", - raw_data(sell_button_sprite), - auto_cast len(sell_button_sprite), -) -background_image := rl.LoadImageFromMemory( - ".png", - raw_data(background_sprite), - auto_cast len(background_sprite), -) +load_texture_from_memory :: proc(data: []u8) -> (texture: rl.Texture2D) { + img := rl.LoadImageFromMemory(".png", raw_data(data), auto_cast len(data)) + defer rl.UnloadImage(img) + texture = rl.LoadTextureFromImage(img) + return texture +} + sell_button_texture: rl.Texture2D background_texture: rl.Texture2D - -tile_dirt_dry_image := rl.LoadImageFromMemory( - ".png", - raw_data(tile_dirt_dry_sprite), - auto_cast len(tile_dirt_dry_sprite), -) -tile_dirt_wet_image := rl.LoadImageFromMemory( - ".png", - raw_data(tile_dirt_wet_sprite), - auto_cast len(tile_dirt_wet_sprite), -) tile_dirt_dry_texture: rl.Texture2D tile_dirt_wet_texture: rl.Texture2D +tomato_texture: rl.Texture2D player_animation: Animation tomato_animation: Animation @@ -79,35 +60,44 @@ animations: [dynamic]^Animation entities: [256]Entity +tween_ctx_f32: t.TweenContext(f32) +tween_ctx_vec2: t.TweenContext([2]f32) + main :: proc() { rl.SetConfigFlags({.VSYNC_HINT, .WINDOW_RESIZABLE, .WINDOW_HIGHDPI, .MSAA_4X_HINT}) rl.InitWindow(1280, 720, "Raylib Minimal") rl.SetTargetFPS(rl.GetMonitorRefreshRate(rl.GetCurrentMonitor())) + rl.InitAudioDevice() game_render_buffer = rl.LoadRenderTexture( auto_cast GAME_SCREEN_WIDTH, auto_cast GAME_SCREEN_HEIGHT, ) rl.SetTextureFilter(game_render_buffer.texture, rl.TextureFilter.POINT) // Texture scale filter to use + tween_ctx_f32 = t.context_init(f32) + tween_ctx_vec2 = t.context_init([2]f32) + defer t.context_destroy(tween_ctx_f32) + defer t.context_destroy(tween_ctx_vec2) + player_animation = Animation { - texture = rl.LoadTextureFromImage(player_spritesheet_image), + texture = load_texture_from_memory(player_spritesheet_sprite), num_frames = 2, frame_length = 0.5, loop = true, } tomato_animation = Animation { - texture = rl.LoadTextureFromImage(tomato_spritesheet_image), + texture = load_texture_from_memory(tomato_spritesheet_sprite), num_frames = 4, - frame_length = 2, + frame_length = 0.1, loop = false, offset = {TILE_SIZE / 2, TILE_SIZE}, } - sell_button_texture = rl.LoadTextureFromImage(sell_button_image) - background_texture = rl.LoadTextureFromImage(background_image) - - tile_dirt_dry_texture = rl.LoadTextureFromImage(tile_dirt_dry_image) - tile_dirt_wet_texture = rl.LoadTextureFromImage(tile_dirt_wet_image) + tomato_texture = load_texture_from_memory(tomato_item_sprite) + sell_button_texture = load_texture_from_memory(sell_button_sprite) + background_texture = load_texture_from_memory(background_sprite) + tile_dirt_dry_texture = load_texture_from_memory(tile_dirt_dry_sprite) + tile_dirt_wet_texture = load_texture_from_memory(tile_dirt_wet_sprite) e := create_entity( Entity { @@ -118,17 +108,25 @@ main :: proc() { ) player_handle = entity_to_handle(e^) + rl.PlaySound(pickup_sound) + for !rl.WindowShouldClose() { free_all(context.temp_allocator) update() draw() } + rl.UnloadRenderTexture(game_render_buffer) // Unload render texture + rl.CloseAudioDevice() rl.CloseWindow() } update :: proc() { + // :tween update + t.tween_update(&tween_ctx_f32, auto_cast rl.GetFrameTime()) + t.tween_update(&tween_ctx_vec2, auto_cast rl.GetFrameTime()) + // :scaling update screen_scale = min( f32(rl.GetScreenWidth()) / GAME_SCREEN_WIDTH, @@ -155,16 +153,7 @@ update :: proc() { } // :animation update - for &e in entities { - if .Allocated not_in e.flags {continue} - - #partial switch &data in e.data { - case TileData: - update_animation(&data.animation) - case PlayerData: - update_animation(&data.animation) - } - } + update_entities() // :sell hover_sell_button := rl.CheckCollisionPointRec( @@ -179,7 +168,7 @@ update :: proc() { // :player update player := handle_to_entity(player_handle) if player != nil { - pd, ok := player.data.(PlayerData);if ok { + pd, ok := &player.data.(PlayerData);if ok { vel: rl.Vector2 if rl.IsKeyDown(.D) do vel.x += 1 if rl.IsKeyDown(.A) do vel.x -= 1 @@ -202,21 +191,8 @@ draw :: proc() { rl.BeginDrawing() rl.DrawTextureV(background_texture, {}, rl.WHITE) - // :animation draw - //for t in tiles { - // rl.DrawRectangle(auto_cast t.pos.x, auto_cast t.pos.y, TILE_SIZE, TILE_SIZE, rl.BLACK) - // draw_animation(t.animation, t.pos) - //} - for e in entities { - if .Allocated not_in e.flags {continue} - #partial switch &data in e.data { - case TileData: - draw_tile(e) - case PlayerData: - draw_player(e) - } - } + draw_entities() rl.DrawTextureV(sell_button_texture, SELL_BUTTON_POS, rl.WHITE) rl.EndMode2D() @@ -330,16 +306,17 @@ PlayerData :: struct { } ItemData :: struct { - id: int, - count: int, - animation: Animation, + id: int, + count: int, + texture: rl.Texture2D, } TileData :: struct { - has_plant: bool, - is_watered: bool, - plant_id: int, - animation: Animation, + has_plant: bool, + is_watered: bool, + plant_id: int, + animation: Animation, + plant_grown: bool, } EntityData :: union { @@ -389,11 +366,76 @@ handle_to_entity :: proc(handle: EntityHandle) -> ^Entity { return nil } +update_entities :: proc() { + for &e in entities { + if .Allocated not_in e.flags {continue} + + #partial switch &data in e.data { + case TileData: + update_tile(e, &data) + case PlayerData: + update_animation(&data.animation) + case ItemData: + //rl.DrawTextureV(data.texture, e.pos + {0, t * 3}, rl.WHITE) + } + } +} + +update_tile :: proc(e: Entity, data: ^TileData) { + update_animation(&data.animation) + if data.has_plant && data.animation.done && data.plant_grown == false { + data.plant_grown = true + player := handle_to_entity(player_handle) + if player != nil { + item := create_entity( + Entity { + pos = e.pos, + kind = .Item, + data = ItemData{id = data.plant_id, count = 3, texture = tomato_texture}, + }, + ) + tw := t.tween_to(&tween_ctx_vec2, &item.pos, player.pos) + tw.id = item.handle + tw.data = tw + tw.on_update = proc(ctx: ^t.TweenContext([2]f32), data: rawptr) { + player := handle_to_entity(player_handle) + if player != nil { + tween: ^t.Tween([2]f32) = transmute(^t.Tween([2]f32))data + tween.goal = player.pos - {TILE_SIZE, TILE_SIZE} + } + } + tw.on_complete = proc(ctx: ^t.TweenContext([2]f32), data: rawptr) { + tween: ^t.Tween([2]f32) = transmute(^t.Tween([2]f32))data + fmt.println("Done") + rl.PlaySound(pickup_sound) + e := handle_to_entity(tween.id) + if e != nil && e.kind == .Item { + destroy_entity(e) + } + } + } + } +} + +draw_entities :: proc() { + for e in entities { + if .Allocated not_in e.flags {continue} + + switch &data in e.data { + case TileData: + draw_tile(e) + case PlayerData: + draw_player(e) + case ItemData: + draw_item(e) + } + } +} + entity_to_handle :: proc(e: Entity) -> EntityHandle { return e.handle } - draw_player :: proc(e: Entity) { data, ok := e.data.(PlayerData) draw_animation(data.animation, e.pos) @@ -406,5 +448,7 @@ draw_tile :: proc(e: Entity) { } draw_item :: proc(e: Entity) { data, ok := e.data.(ItemData) - draw_animation(data.animation, e.pos) + t := f32(math.sin(rl.GetTime() * 5)) + rl.DrawTextureV(data.texture, e.pos + {0, t * 3}, rl.WHITE) + //draw_animation(data.animation, e.pos + {0, t * 3}) }