module main

import gg
import gx
import automaton

const (
	screen_width = 800
	screen_height = 600
	filled_color = gx.blue
)

fn new_graphics() &gg.Context {
	glfw.init_glfw()
	return gg.new_context(gg.Cfg{
		width: screen_width
		height: screen_height
		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(f32(square_size*x), f32(square_size*y), f32(square_size),
					f32(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()
	}
}