108 lines
2.5 KiB
Odin
108 lines
2.5 KiB
Odin
package main
|
|
|
|
import "core:time"
|
|
|
|
foreign import raylib {
|
|
"../raylib-5.5_linux_amd64/lib/libraylib.a",
|
|
"system:m",
|
|
}
|
|
|
|
Image :: struct {
|
|
data: rawptr,
|
|
width: i32,
|
|
height: i32,
|
|
mipmaps: i32,
|
|
format: i32,
|
|
}
|
|
|
|
Texture2D :: struct {
|
|
id: u32,
|
|
width: i32,
|
|
height: i32,
|
|
mipmaps: i32,
|
|
format: i32,
|
|
}
|
|
|
|
Vector2 :: struct {
|
|
x: f32,
|
|
y: f32,
|
|
}
|
|
|
|
Color :: struct {
|
|
r: u8,
|
|
g: u8,
|
|
b: u8,
|
|
a: u8,
|
|
}
|
|
|
|
@(default_calling_convention = "c")
|
|
foreign raylib {
|
|
InitWindow :: proc(width: i32, height: i32, title: cstring) ---
|
|
CloseWindow :: proc() ---
|
|
SetTargetFPS :: proc(fps: i32) ---
|
|
SetRandomSeed :: proc(seed: u32) ---
|
|
GetRandomValue :: proc(min: i32, max: i32) -> i32 ---
|
|
LoadImage :: proc(file_name: cstring) -> Image ---
|
|
ImageResize :: proc(image: ^Image, new_width: i32, new_height: i32) ---
|
|
LoadTextureFromImage :: proc(image: Image) -> Texture2D ---
|
|
UnloadImage :: proc(image: Image) ---
|
|
UnloadTexture :: proc(texture: Texture2D) ---
|
|
WindowShouldClose :: proc() -> bool ---
|
|
GetFrameTime :: proc() -> f32 ---
|
|
BeginDrawing :: proc() ---
|
|
ClearBackground :: proc(color: Color) ---
|
|
DrawTextureV :: proc(texture: Texture2D, position: Vector2, tint: Color) ---
|
|
EndDrawing :: proc() ---
|
|
}
|
|
|
|
WINDOW_WIDTH :: 800
|
|
WINDOW_HEIGHT :: 600
|
|
LOGO_HEIGHT :: 64
|
|
LOGO_SPEED :: 300
|
|
|
|
BLACK :: Color{0, 0, 0, 255}
|
|
WHITE :: Color{255, 255, 255, 255}
|
|
|
|
main :: proc() {
|
|
InitWindow(WINDOW_WIDTH, WINDOW_HEIGHT, "Raylib in Odin")
|
|
SetTargetFPS(60)
|
|
SetRandomSeed(cast(u32)time.now()._nsec)
|
|
|
|
logo_image := LoadImage("./odin_logo.png")
|
|
ImageResize(&logo_image, logo_image.width * LOGO_HEIGHT / logo_image.height, LOGO_HEIGHT)
|
|
logo_texture := LoadTextureFromImage(logo_image)
|
|
UnloadImage(logo_image)
|
|
|
|
x := f32(GetRandomValue(0, WINDOW_WIDTH - logo_texture.width))
|
|
y := f32(GetRandomValue(0, WINDOW_HEIGHT - logo_texture.height))
|
|
|
|
dx: f32 = LOGO_SPEED
|
|
if GetRandomValue(0, 1) == 1 do dx = -dx
|
|
dy: f32 = LOGO_SPEED
|
|
if GetRandomValue(0, 1) == 1 do dy = -dy
|
|
|
|
for !WindowShouldClose() {
|
|
delta_time := GetFrameTime()
|
|
|
|
x += dx * delta_time
|
|
y += dy * delta_time
|
|
|
|
if x < 0 || x + f32(logo_texture.width) >= WINDOW_WIDTH - 1 {
|
|
dx *= -1
|
|
x += dx * delta_time
|
|
}
|
|
if y < 0 || y + f32(logo_texture.height) >= WINDOW_HEIGHT - 1 {
|
|
dy *= -1
|
|
y += dy * delta_time
|
|
}
|
|
|
|
BeginDrawing()
|
|
ClearBackground(BLACK)
|
|
DrawTextureV(logo_texture, Vector2{x, y}, WHITE)
|
|
EndDrawing()
|
|
}
|
|
|
|
UnloadTexture(logo_texture)
|
|
CloseWindow()
|
|
}
|