v/examples/game_of_life/life_gg.v

59 lines
1.1 KiB
V

module main
import time
import gg
import glfw
import gx
import automaton
const (
screenWidth = 800
screenHeight = 600
filled_color = gx.Blue
)
fn new_graphics() &gg.GG {
glfw.init_glfw()
return gg.new_context(gg.Cfg{
width: screenWidth
height: screenHeight
use_ortho: true
create_window: true
resizable: false
window_title: 'v life (with gg, glfw, gx)'
window_user_ptr: 0
})
}
const (
graphics = new_graphics()
)
[live]
fn print_automaton(a &automaton.Automaton){
gg.clear(gx.White)
square_size := 18
for y := 1; y<a.field.maxy; y++ {
for x := 1; x<a.field.maxx; x++ {
cell := a.field.get(x,y)
if cell == 1 {
graphics.draw_rect( square_size*x, square_size*y, square_size, square_size, filled_color )
}
}
}
}
fn main() {
mut a := automaton.gun()
for {
if graphics.window.should_close() { graphics.window.destroy() break }
gg.post_empty_event() // needed so the animation does not stop
///////////////////////////////////////////////
a.update()
print_automaton(a)
graphics.render()
time.sleep_ms(1) // TODO: remove this when live reload depence on the time module is fixed
}
}