226 lines
3.5 KiB
V
226 lines
3.5 KiB
V
module main
|
|
|
|
import nsauzede.vsdl2
|
|
import nsauzede.vsdl2.image as img
|
|
//import time
|
|
|
|
struct App {
|
|
mut:
|
|
w int
|
|
h int
|
|
dt f32
|
|
|
|
// Sdl (fixme?)
|
|
window voidptr
|
|
screen &vsdl2.Surface
|
|
renderer voidptr
|
|
}
|
|
|
|
fn new_app() &App {
|
|
println("new_app()")
|
|
|
|
a := &App{
|
|
dt: 0.0,
|
|
screen: &vsdl2.Surface(0),
|
|
}
|
|
|
|
// Update ctx
|
|
ctx.app = a
|
|
|
|
return a
|
|
}
|
|
|
|
fn (mut a App) init(w, h int, title string) {
|
|
println("app init() w: $w, h: $h")
|
|
|
|
// Init sdl
|
|
println("init sdl...")
|
|
|
|
C.SDL_Init(C.SDL_INIT_VIDEO)
|
|
C.atexit(C.SDL_Quit)
|
|
C.TTF_Init()
|
|
C.atexit(C.TTF_Quit)
|
|
bpp := 32
|
|
vsdl2.create_window_and_renderer(w, h, 0, &a.window, &a.renderer)
|
|
C.SDL_SetWindowTitle(a.window, title.str)
|
|
a.w = w
|
|
a.h = h
|
|
a.screen = vsdl2.create_rgb_surface(0, w, h, bpp, 0x00FF0000, 0x0000FF00, 0x000000FF, 0xFF000000)
|
|
//a.texture = C.SDL_CreateTexture(sdl.renderer, C.SDL_PIXELFORMAT_ARGB8888, C.SDL_TEXTUREACCESS_STREAMING, w, h)
|
|
|
|
flags := C.IMG_INIT_PNG
|
|
imgres := img.img_init(flags)
|
|
if (imgres & flags) != flags {
|
|
println('error initializing image library.')
|
|
}
|
|
|
|
// Init drawer
|
|
println("init drawer...")
|
|
|
|
mut d := new_drawer()
|
|
d.init(w, h, a.renderer)
|
|
|
|
// Update vars fixme?
|
|
|
|
ctx.vars.res_x = w
|
|
ctx.vars.res_y = h
|
|
|
|
println("app init done")
|
|
}
|
|
|
|
fn (mut a App) get_mouse_state() (int, int) {
|
|
x := 0
|
|
y := 0
|
|
C.SDL_GetMouseState(&x, &y)
|
|
|
|
return x, y
|
|
}
|
|
|
|
/*
|
|
fn (mut a App) get_keyboard_state() voidptr {
|
|
state := C.SDL_GetKeyboardState()
|
|
|
|
return state
|
|
}
|
|
*/
|
|
|
|
fn (mut a App) is_key_pressed(key int) bool {
|
|
//state := C.SDL_GetKeyboardState(voidptr(0))
|
|
//state := C.SDL_GetKeyboardState(intptr(0))
|
|
//numkeys := &int(0)
|
|
//state := C.SDL_GetKeyboardState(numkeys)
|
|
numkeys := int(0)
|
|
state := C.SDL_GetKeyboardState(&numkeys)
|
|
skey := C.SDL_GetScancodeFromKey(key)
|
|
|
|
//println("state: $state")
|
|
//println("skey: $skey")
|
|
|
|
mut pressed := false
|
|
|
|
mut d := &byte(0)
|
|
|
|
unsafe {
|
|
d = &state[0]
|
|
println("d1:")
|
|
//println(d.len)
|
|
//println(d[0])
|
|
//println(d[1])
|
|
//println(d[255])
|
|
//println(d[key])
|
|
|
|
//if d[255] > 0 {
|
|
//if d[79] > 0 {
|
|
//if d[82] > 0 { // Up
|
|
if d[skey] > 0 {
|
|
println("test")
|
|
pressed = true
|
|
}
|
|
}
|
|
|
|
/*
|
|
|
|
//mut m_state := &int(0)
|
|
//mut m_state := &[]int{}
|
|
//mut m_state := []&int{}
|
|
//mut z := []int{}
|
|
mut z := []byte{}
|
|
mut z_ptr := &z
|
|
|
|
//m_state = state
|
|
z_ptr = state
|
|
|
|
println("z_ptr:")
|
|
println(z_ptr)
|
|
println(z_ptr.len)
|
|
|
|
q := *z_ptr
|
|
|
|
println("q:")
|
|
println(q)
|
|
println(q.len)
|
|
|
|
*/
|
|
|
|
/*
|
|
unsafe {
|
|
//m_state = state
|
|
}
|
|
*/
|
|
|
|
|
|
//println("len v: ${m_state.len}")
|
|
//println(m_state)
|
|
//println(m_state.len)
|
|
|
|
//v := m_state[0]
|
|
|
|
//println("v: $v")
|
|
|
|
//println("skey: $skey")
|
|
//pp(2)
|
|
|
|
//return false
|
|
return pressed
|
|
}
|
|
|
|
fn (mut a App) pump_events() {
|
|
C.SDL_PumpEvents()
|
|
}
|
|
|
|
fn (mut a App) step() bool {
|
|
println("app step()")
|
|
|
|
a.dt = f32(20.0)
|
|
|
|
mut should_close := false
|
|
//for {
|
|
//evt := SDL_Event{}
|
|
evt := vsdl2.Event{}
|
|
for 0 < vsdl2.poll_event(&evt) {
|
|
match int(evt.@type) {
|
|
C.SDL_QUIT { should_close = true }
|
|
|
|
C.SDL_KEYDOWN {
|
|
key := evt.key.keysym.sym
|
|
if key == C.SDLK_ESCAPE || key == C.SDLK_q {
|
|
should_close = true
|
|
break
|
|
}
|
|
}
|
|
|
|
else {}
|
|
}
|
|
|
|
}
|
|
//}
|
|
|
|
if should_close {
|
|
//pp(2)
|
|
return false
|
|
}
|
|
|
|
//a.render()
|
|
|
|
a.update(a.dt)
|
|
|
|
return true
|
|
}
|
|
|
|
fn (mut a App) flip() {
|
|
println("app flip()")
|
|
|
|
C.SDL_RenderPresent(a.renderer)
|
|
}
|
|
|
|
fn (mut a App) quit() {
|
|
println("app quit()")
|
|
|
|
//C.SDL_DestroyRenderer(a.renderer)
|
|
C.SDL_DestroyWindow(a.window)
|
|
C.SDL_Quit()
|
|
}
|
|
|
|
fn (mut a App) update(dt f32) {
|
|
|
|
}
|