feat(oding): implement
This commit is contained in:
2
odin/Makefile
Normal file
2
odin/Makefile
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
raylib_odin: main.odin
|
||||||
|
odin build main.odin -file -out:raylib_odin
|
||||||
8
odin/README.md
Normal file
8
odin/README.md
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
# Raylib in Odin
|
||||||
|
|
||||||
|
## Quick start
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ make
|
||||||
|
$ ./raylib_odin
|
||||||
|
```
|
||||||
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()
|
||||||
|
}
|
||||||
BIN
odin/odin_logo.png
Normal file
BIN
odin/odin_logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 75 KiB |
Reference in New Issue
Block a user