feat(oding): implement
This commit is contained in:
107
odin/main.odin
Normal file
107
odin/main.odin
Normal file
@@ -0,0 +1,107 @@
|
||||
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()
|
||||
}
|
||||
Reference in New Issue
Block a user