109 lines
3.3 KiB
Odin
109 lines
3.3 KiB
Odin
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
|
|
}
|