package main import "core:fmt" import "core:image/png" import "vendor:sdl3" WIDTH :: 1600 HEIGHT :: 900 Game :: struct { render: ^sdl3.Renderer, units: [dynamic]Unit, player: Unit, input_state: map[sdl3.Scancode]bool, } main :: proc() { assert(sdl3.Init(sdl3.INIT_VIDEO)) defer sdl3.Quit() window := sdl3.CreateWindow("Game", 1600, 900, nil) assert(window != nil) defer sdl3.DestroyWindow(window) render := sdl3.CreateRenderer(window, "vulkan") assert(render != nil) units := make([dynamic]Unit) append(&units, Unit{faction = Faction.Allied, position = Position{x = 500, y = 500}, hp = 100}) append(&units, Unit{faction = Faction.Enemy, position = Position{x = 700, y = 700}, hp = 100}) input_state := make(map[sdl3.Scancode]bool) game := Game { render = render, units = units, player = Unit{faction = Faction.Player, position = Position{x = 255, y = 255}, hp = 100}, input_state = input_state, } for { event: sdl3.Event for sdl3.PollEvent(&event) { #partial switch event.type { case .QUIT: return case .KEY_UP: HandleInput(&game, event) case .KEY_DOWN: HandleInput(&game, event) } } MovePlayer(&game) RenderGame(&game) } } RenderGame :: proc(game: ^Game) { sdl3.SetRenderDrawColor(game.render, 0, 0, 0, 0) sdl3.RenderClear(game.render) for unit in game.units { RenderUnit(unit, game) } RenderUnit(game.player, game) sdl3.RenderPresent(game.render) }