sdl3 and uh some fun stuff!
This commit is contained in:
parent
bbd12beab2
commit
d5e67552d4
4 changed files with 65 additions and 25 deletions
3
README.md
Normal file
3
README.md
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
# Fumarole
|
||||||
|
|
||||||
|
This project has the goal of exploring the Odin programming language, and its game dev applications.
|
55
main.odin
55
main.odin
|
@ -1,54 +1,59 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import "core:fmt"
|
import "core:fmt"
|
||||||
import "vendor:sdl2"
|
import "core:image/png"
|
||||||
|
import "vendor:sdl3"
|
||||||
|
|
||||||
WIDTH :: 1600
|
WIDTH :: 1600
|
||||||
HEIGHT :: 900
|
HEIGHT :: 900
|
||||||
|
|
||||||
Game :: struct {
|
Game :: struct {
|
||||||
render: ^sdl2.Renderer,
|
render: ^sdl3.Renderer,
|
||||||
time: f64,
|
units: [dynamic]Unit,
|
||||||
dt: f64,
|
|
||||||
}
|
|
||||||
|
|
||||||
get_time :: proc() -> f64 {
|
|
||||||
return f64(sdl2.GetPerformanceCounter()) * 1000 / f64(sdl2.GetPerformanceFrequency())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
main :: proc() {
|
main :: proc() {
|
||||||
assert(sdl2.Init(sdl2.INIT_VIDEO) == 0, sdl2.GetErrorString())
|
assert(sdl3.Init(sdl3.INIT_VIDEO))
|
||||||
defer sdl2.Quit()
|
defer sdl3.Quit()
|
||||||
|
|
||||||
window := sdl2.CreateWindow("Game", 0, 0, 1600, 900, sdl2.WINDOW_SHOWN)
|
window := sdl3.CreateWindow("Game", 1600, 900, nil)
|
||||||
assert(window != nil, sdl2.GetErrorString())
|
assert(window != nil)
|
||||||
defer sdl2.DestroyWindow(window)
|
defer sdl3.DestroyWindow(window)
|
||||||
|
|
||||||
render := sdl2.CreateRenderer(window, -1, sdl2.RENDERER_ACCELERATED)
|
render := sdl3.CreateRenderer(window, "vulkan")
|
||||||
assert(render != nil, sdl2.GetErrorString())
|
assert(render != nil)
|
||||||
|
|
||||||
tickrate := 240.0
|
units := make([dynamic]Unit)
|
||||||
ticktime := 1000.0 / tickrate
|
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 {
|
game := Game {
|
||||||
render = render,
|
render = render,
|
||||||
time = get_time(),
|
units = units,
|
||||||
dt = ticktime,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for {
|
for {
|
||||||
event: sdl2.Event
|
event: sdl3.Event
|
||||||
for sdl2.PollEvent(&event) {
|
for sdl3.PollEvent(&event) {
|
||||||
#partial switch event.type {
|
#partial switch event.type {
|
||||||
case .QUIT:
|
case .QUIT:
|
||||||
return
|
return
|
||||||
|
case .KEY_DOWN:
|
||||||
|
{
|
||||||
|
fmt.println(event.key)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sdl2.SetRenderDrawColor(render, 0, 0, 0, 0)
|
sdl3.SetRenderDrawColor(render, 0, 0, 0, 0)
|
||||||
sdl2.RenderClear(render)
|
sdl3.RenderClear(render)
|
||||||
sdl2.RenderPresent(render)
|
|
||||||
|
for unit in game.units {
|
||||||
|
RenderUnit(unit, game)
|
||||||
|
}
|
||||||
|
|
||||||
|
sdl3.RenderPresent(render)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
5
math.odin
Normal file
5
math.odin
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
Position :: struct {
|
||||||
|
x, y: f32,
|
||||||
|
}
|
27
unit.odin
Normal file
27
unit.odin
Normal 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},
|
||||||
|
)
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue