fumarole/main.odin

60 lines
1 KiB
Odin
Raw Normal View History

2025-06-20 14:53:56 +02:00
package main
import "core:fmt"
2025-06-22 21:35:03 +02:00
import "core:image/png"
import "vendor:sdl3"
2025-06-20 14:53:56 +02:00
WIDTH :: 1600
HEIGHT :: 900
2025-06-20 15:13:11 +02:00
Game :: struct {
2025-06-22 21:35:03 +02:00
render: ^sdl3.Renderer,
units: [dynamic]Unit,
2025-06-20 15:13:11 +02:00
}
2025-06-20 14:53:56 +02:00
main :: proc() {
2025-06-22 21:35:03 +02:00
assert(sdl3.Init(sdl3.INIT_VIDEO))
defer sdl3.Quit()
2025-06-20 14:53:56 +02:00
2025-06-22 21:35:03 +02:00
window := sdl3.CreateWindow("Game", 1600, 900, nil)
assert(window != nil)
defer sdl3.DestroyWindow(window)
2025-06-20 14:53:56 +02:00
2025-06-22 21:35:03 +02:00
render := sdl3.CreateRenderer(window, "vulkan")
assert(render != nil)
2025-06-20 14:53:56 +02:00
2025-06-22 21:35:03 +02:00
units := make([dynamic]Unit)
append(&units, Unit{faction = Faction.Player, position = Position{x = 500, y = 500}, hp = 100})
append(&units, Unit{faction = Faction.Enemy, position = Position{x = 700, y = 700}, hp = 100})
2025-06-20 15:13:11 +02:00
game := Game {
render = render,
2025-06-22 21:35:03 +02:00
units = units,
2025-06-20 14:53:56 +02:00
}
2025-06-20 15:13:11 +02:00
for {
2025-06-22 21:35:03 +02:00
event: sdl3.Event
for sdl3.PollEvent(&event) {
2025-06-20 15:13:11 +02:00
#partial switch event.type {
case .QUIT:
return
2025-06-22 21:35:03 +02:00
case .KEY_DOWN:
{
fmt.println(event.key)
}
2025-06-20 15:13:11 +02:00
}
}
2025-06-20 14:53:56 +02:00
2025-06-22 21:35:03 +02:00
sdl3.SetRenderDrawColor(render, 0, 0, 0, 0)
sdl3.RenderClear(render)
for unit in game.units {
RenderUnit(unit, game)
}
sdl3.RenderPresent(render)
2025-06-20 14:53:56 +02:00
}
}