58 lines
		
	
	
		
			920 B
		
	
	
	
		
			V
		
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			920 B
		
	
	
	
		
			V
		
	
	
module main
 | 
						|
 | 
						|
import gg
 | 
						|
import gx
 | 
						|
import automaton
 | 
						|
 | 
						|
const (
 | 
						|
	screen_width  = 800
 | 
						|
	screen_height = 600
 | 
						|
	filled_color  = gx.blue
 | 
						|
)
 | 
						|
 | 
						|
[live]
 | 
						|
fn print_automaton(app &App) {
 | 
						|
	square_size := 18
 | 
						|
	for y := 1; y < app.a.field.maxy; y++ {
 | 
						|
		for x := 1; x < app.a.field.maxx; x++ {
 | 
						|
			cell := app.a.field.get(x, y)
 | 
						|
			if cell == 1 {
 | 
						|
				app.gg.draw_rect(f32(square_size * x), f32(square_size * y), f32(square_size),
 | 
						|
					f32(square_size), filled_color)
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
struct App {
 | 
						|
mut:
 | 
						|
	gg &gg.Context
 | 
						|
	a  automaton.Automaton
 | 
						|
}
 | 
						|
 | 
						|
fn frame(mut app App) {
 | 
						|
	app.gg.begin()
 | 
						|
	app.a.update()
 | 
						|
	print_automaton(app)
 | 
						|
	app.gg.end()
 | 
						|
}
 | 
						|
 | 
						|
fn main() {
 | 
						|
	mut app := App{
 | 
						|
		gg: 0
 | 
						|
		a: automaton.gun()
 | 
						|
	}
 | 
						|
	app.gg = gg.new_context({
 | 
						|
		bg_color: gx.white
 | 
						|
		frame_fn: frame
 | 
						|
		user_data: &app
 | 
						|
		width: screen_width
 | 
						|
		height: screen_height
 | 
						|
		use_ortho: true
 | 
						|
		create_window: true
 | 
						|
		resizable: false
 | 
						|
		window_title: 'v life (with gg, gx)'
 | 
						|
	})
 | 
						|
	app.gg.run()
 | 
						|
}
 |