package game import t "../tween" import rl "vendor:raylib" pickup_sound_data: []u8 : #load("../assets/sounds/pickup_sound.mp3") 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") hoe_sprite: []u8 : #load("../assets/hoe.png") scythe_sprite: []u8 : #load("../assets/scythe.png") pickup_sound: rl.Sound sell_button_texture: rl.Texture2D background_texture: rl.Texture2D tile_dirt_dry_texture: rl.Texture2D tile_dirt_wet_texture: rl.Texture2D tomato_texture: rl.Texture2D hoe_texture: rl.Texture2D scythe_texture: rl.Texture2D player_animation: Animation tomato_animation: Animation 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 } load_sound_from_memory :: proc( data: []u8, sound_extension: cstring = ".mp3", ) -> ( sound: rl.Sound, ) { wav := rl.LoadWaveFromMemory(sound_extension, raw_data(data), auto_cast len(data)) defer rl.UnloadWave(wav) sound = rl.LoadSoundFromWave(wav) return } load_resources :: proc() { tween_ctx_f32 = t.context_init(f32) tween_ctx_vec2 = t.context_init([2]f32) 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 player_animation = Animation { texture = load_texture_from_memory(player_spritesheet_sprite), num_frames = 2, frame_length = 0.5, loop = true, } tomato_animation = Animation { texture = load_texture_from_memory(tomato_spritesheet_sprite), num_frames = 4, frame_length = 0.1, loop = false, offset = {TILE_SIZE / 2, TILE_SIZE}, } 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) hoe_texture = load_texture_from_memory(hoe_sprite) scythe_texture = load_texture_from_memory(scythe_sprite) pickup_sound = load_sound_from_memory(pickup_sound_data) rl.SetSoundVolume(pickup_sound, 0.1) e := create_entity( Entity { pos = {GAME_SCREEN_WIDTH / 2, GAME_SCREEN_HEIGHT / 2}, kind = .Player, data = PlayerData{animation = player_animation}, }, ) player_handle = entity_to_handle(e^) } free_resources :: proc() { t.context_destroy(tween_ctx_f32) t.context_destroy(tween_ctx_vec2) rl.UnloadSound(pickup_sound) rl.UnloadTexture(tomato_texture) rl.UnloadTexture(sell_button_texture) rl.UnloadTexture(background_texture) rl.UnloadTexture(tile_dirt_dry_texture) rl.UnloadTexture(tile_dirt_wet_texture) rl.UnloadRenderTexture(game_render_buffer) // Unload render texture }