56 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			V
		
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			V
		
	
	
module main
 | 
						|
 | 
						|
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()
 | 
						|
	}
 | 
						|
}
 |