tetris improvements
added getexepath() to os module added some wrapper functions to glfw removed hardcored path in gg module better tetris example exit and resource loadingpull/777/head
							parent
							
								
									84f5d7e64b
								
							
						
					
					
						commit
						bed7440ebb
					
				|  | @ -131,6 +131,11 @@ fn main() { | ||||||
| 		game.draw_scene() | 		game.draw_scene() | ||||||
| 		window.swap_buffers() | 		window.swap_buffers() | ||||||
| 		glfw.wait_events() | 		glfw.wait_events() | ||||||
|  | 		if window.should_close() { | ||||||
|  | 			window.destroy() | ||||||
|  | 			glfw.terminate() | ||||||
|  | 			exit(0) | ||||||
|  | 		} | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -322,6 +327,8 @@ fn key_down(wnd voidptr, key, code, action, mods int) { | ||||||
| 	// Fetch the game object stored in the user pointer
 | 	// Fetch the game object stored in the user pointer
 | ||||||
| 	mut game := &Game(glfw.get_window_user_pointer(wnd)) | 	mut game := &Game(glfw.get_window_user_pointer(wnd)) | ||||||
| 	switch key { | 	switch key { | ||||||
|  | 	case glfw.KEY_ESCAPE: | ||||||
|  | 		glfw.set_should_close(wnd, true) | ||||||
| 	case glfw.KeyUp: | 	case glfw.KeyUp: | ||||||
| 		// Rotate the tetro
 | 		// Rotate the tetro
 | ||||||
| 		game.rotation_idx++ | 		game.rotation_idx++ | ||||||
|  |  | ||||||
							
								
								
									
										5
									
								
								gg/gg.v
								
								
								
								
							
							
						
						
									
										5
									
								
								gg/gg.v
								
								
								
								
							|  | @ -342,7 +342,10 @@ pub fn new_context_text(cfg Cfg, scale int) *GG { | ||||||
| 	// face := FT_Face{}
 | 	// face := FT_Face{}
 | ||||||
| 	mut font_path := 'RobotoMono-Regular.ttf' | 	mut font_path := 'RobotoMono-Regular.ttf' | ||||||
| 	if !os.file_exists(font_path) { | 	if !os.file_exists(font_path) { | ||||||
| 		font_path = '/var/tmp/RobotoMono-Regular.ttf' | 		exePath := os.getexepath() | ||||||
|  | 		exeDir := os.basedir(exePath) | ||||||
|  | 		println('Trying to load from $exeDir') | ||||||
|  | 		font_path = '${exeDir}/RobotoMono-Regular.ttf' | ||||||
| 	} | 	} | ||||||
| 	if !os.file_exists(font_path) { | 	if !os.file_exists(font_path) { | ||||||
| 		println('failed to load RobotoMono-Regular.ttf') | 		println('failed to load RobotoMono-Regular.ttf') | ||||||
|  |  | ||||||
							
								
								
									
										12
									
								
								glfw/glfw.v
								
								
								
								
							
							
						
						
									
										12
									
								
								glfw/glfw.v
								
								
								
								
							|  | @ -135,6 +135,14 @@ pub fn init() { | ||||||
| 	# glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); | 	# glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | pub fn (w &Window) destroy() { | ||||||
|  | 	C.glfwDestroyWindow(w.data) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | pub fn terminate() { | ||||||
|  | 	C.glfwTerminate() | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // pub fn mouse_move(w * GLFWwindow, x, y double) {
 | // pub fn mouse_move(w * GLFWwindow, x, y double) {
 | ||||||
| pub fn mouse_move(w voidptr, x, y f64) { | pub fn mouse_move(w voidptr, x, y f64) { | ||||||
| 	// #printf("%f : %f => %d \n", x,y);
 | 	// #printf("%f : %f => %d \n", x,y);
 | ||||||
|  | @ -203,6 +211,10 @@ pub fn poll_events() { | ||||||
| 	C.glfwPollEvents() | 	C.glfwPollEvents() | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | pub fn set_should_close(w voidptr, close bool) { | ||||||
|  | 	C.glfwSetWindowShouldClose(w, close) | ||||||
|  | } | ||||||
|  | 
 | ||||||
| pub fn (w &Window) should_close() bool { | pub fn (w &Window) should_close() bool { | ||||||
| 	// ChatsRepo
 | 	// ChatsRepo
 | ||||||
| 	return C.glfwWindowShouldClose(w.data) | 	return C.glfwWindowShouldClose(w.data) | ||||||
|  |  | ||||||
							
								
								
									
										21
									
								
								os/os.v
								
								
								
								
							
							
						
						
									
										21
									
								
								os/os.v
								
								
								
								
							|  | @ -7,6 +7,7 @@ module os | ||||||
| #include <sys/stat.h> | #include <sys/stat.h> | ||||||
| const ( | const ( | ||||||
| 	args = []string | 	args = []string | ||||||
|  | 	MAX_PATH = 4096 | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| struct FILE { | struct FILE { | ||||||
|  | @ -463,3 +464,23 @@ fn on_segfault(f voidptr) { | ||||||
| 		C.sigaction(SIGSEGV, &sa, 0) | 		C.sigaction(SIGSEGV, &sa, 0) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | pub fn getexepath() string { | ||||||
|  | 	mut result := [4096]byte // [MAX_PATH]byte --> error byte undefined
 | ||||||
|  | 	$if linux { | ||||||
|  | 		count := int(C.readlink('/proc/self/exe', result, MAX_PATH )) | ||||||
|  | 		if(count < 0) { | ||||||
|  | 			panic('error reading /proc/self/exe to get exe path') | ||||||
|  | 		} | ||||||
|  | 		return tos(result, count) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	$if windows { | ||||||
|  | 		return tos( result, C.GetModuleFileName( 0, result, MAX_PATH ) ) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	$if mac { | ||||||
|  | 		//panic('getexepath() not impl')
 | ||||||
|  | 		return '' | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue