sdl3 and uh some fun stuff!

This commit is contained in:
Morrígan 2025-06-22 21:35:03 +02:00
parent bbd12beab2
commit d5e67552d4
Signed by: morrigan
GPG key ID: CACB010F463A77D0
4 changed files with 65 additions and 25 deletions

3
README.md Normal file
View file

@ -0,0 +1,3 @@
# Fumarole
This project has the goal of exploring the Odin programming language, and its game dev applications.

View file

@ -1,54 +1,59 @@
package main
import "core:fmt"
import "vendor:sdl2"
import "core:image/png"
import "vendor:sdl3"
WIDTH :: 1600
HEIGHT :: 900
Game :: struct {
render: ^sdl2.Renderer,
time: f64,
dt: f64,
}
get_time :: proc() -> f64 {
return f64(sdl2.GetPerformanceCounter()) * 1000 / f64(sdl2.GetPerformanceFrequency())
render: ^sdl3.Renderer,
units: [dynamic]Unit,
}
main :: proc() {
assert(sdl2.Init(sdl2.INIT_VIDEO) == 0, sdl2.GetErrorString())
defer sdl2.Quit()
assert(sdl3.Init(sdl3.INIT_VIDEO))
defer sdl3.Quit()
window := sdl2.CreateWindow("Game", 0, 0, 1600, 900, sdl2.WINDOW_SHOWN)
assert(window != nil, sdl2.GetErrorString())
defer sdl2.DestroyWindow(window)
window := sdl3.CreateWindow("Game", 1600, 900, nil)
assert(window != nil)
defer sdl3.DestroyWindow(window)
render := sdl2.CreateRenderer(window, -1, sdl2.RENDERER_ACCELERATED)
assert(render != nil, sdl2.GetErrorString())
render := sdl3.CreateRenderer(window, "vulkan")
assert(render != nil)
tickrate := 240.0
ticktime := 1000.0 / tickrate
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})
game := Game {
render = render,
time = get_time(),
dt = ticktime,
units = units,
}
for {
event: sdl2.Event
for sdl2.PollEvent(&event) {
event: sdl3.Event
for sdl3.PollEvent(&event) {
#partial switch event.type {
case .QUIT:
return
case .KEY_DOWN:
{
fmt.println(event.key)
}
}
}
sdl2.SetRenderDrawColor(render, 0, 0, 0, 0)
sdl2.RenderClear(render)
sdl2.RenderPresent(render)
sdl3.SetRenderDrawColor(render, 0, 0, 0, 0)
sdl3.RenderClear(render)
for unit in game.units {
RenderUnit(unit, game)
}
sdl3.RenderPresent(render)
}
}

5
math.odin Normal file
View file

@ -0,0 +1,5 @@
package main
Position :: struct {
x, y: f32,
}

27
unit.odin Normal file
View file

@ -0,0 +1,27 @@
package main
import "vendor:sdl3"
Faction :: enum {
Player,
Enemy,
}
Unit :: struct {
faction: Faction,
position: Position,
hp: u32,
}
RenderUnit :: proc(unit: Unit, game: Game) {
switch unit.faction {
case Faction.Player:
sdl3.SetRenderDrawColor(game.render, 0, 255, 0, 0)
case Faction.Enemy:
sdl3.SetRenderDrawColor(game.render, 255, 0, 0, 0)
}
sdl3.RenderRect(
game.render,
&sdl3.FRect{x = unit.position.x, y = unit.position.y, w = 10, h = 10},
)
}