auts/isotest/app.v
2020-09-04 10:51:31 +03:00

227 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) {
}