| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | /*************************************************************************/ | 
					
						
							|  |  |  | /*  test_math.cpp                                                        */ | 
					
						
							|  |  |  | /*************************************************************************/ | 
					
						
							|  |  |  | /*                       This file is part of:                           */ | 
					
						
							|  |  |  | /*                           GODOT ENGINE                                */ | 
					
						
							| 
									
										
										
										
											2017-08-27 14:16:55 +02:00
										 |  |  | /*                      https://godotengine.org                          */ | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | /*************************************************************************/ | 
					
						
							| 
									
										
										
										
											2017-03-05 15:47:28 +01:00
										 |  |  | /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur.                 */ | 
					
						
							| 
									
										
										
										
											2017-04-08 00:11:42 +02:00
										 |  |  | /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)    */ | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | /*                                                                       */ | 
					
						
							|  |  |  | /* Permission is hereby granted, free of charge, to any person obtaining */ | 
					
						
							|  |  |  | /* a copy of this software and associated documentation files (the       */ | 
					
						
							|  |  |  | /* "Software"), to deal in the Software without restriction, including   */ | 
					
						
							|  |  |  | /* without limitation the rights to use, copy, modify, merge, publish,   */ | 
					
						
							|  |  |  | /* distribute, sublicense, and/or sell copies of the Software, and to    */ | 
					
						
							|  |  |  | /* permit persons to whom the Software is furnished to do so, subject to */ | 
					
						
							|  |  |  | /* the following conditions:                                             */ | 
					
						
							|  |  |  | /*                                                                       */ | 
					
						
							|  |  |  | /* The above copyright notice and this permission notice shall be        */ | 
					
						
							|  |  |  | /* included in all copies or substantial portions of the Software.       */ | 
					
						
							|  |  |  | /*                                                                       */ | 
					
						
							|  |  |  | /* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,       */ | 
					
						
							|  |  |  | /* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF    */ | 
					
						
							|  |  |  | /* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ | 
					
						
							|  |  |  | /* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY  */ | 
					
						
							|  |  |  | /* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,  */ | 
					
						
							|  |  |  | /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE     */ | 
					
						
							|  |  |  | /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.                */ | 
					
						
							|  |  |  | /*************************************************************************/ | 
					
						
							|  |  |  | #include "test_math.h"
 | 
					
						
							| 
									
										
										
										
											2017-03-05 15:47:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | #include "camera_matrix.h"
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | #include "math_funcs.h"
 | 
					
						
							|  |  |  | #include "matrix3.h"
 | 
					
						
							|  |  |  | #include "os/file_access.h"
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | #include "os/keyboard.h"
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | #include "os/os.h"
 | 
					
						
							|  |  |  | #include "print_string.h"
 | 
					
						
							|  |  |  | #include "scene/main/node.h"
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | #include "scene/resources/texture.h"
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | #include "servers/visual/shader_language.h"
 | 
					
						
							|  |  |  | #include "transform.h"
 | 
					
						
							|  |  |  | #include "ustring.h"
 | 
					
						
							|  |  |  | #include "variant.h"
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | #include "vmap.h"
 | 
					
						
							| 
									
										
										
										
											2016-06-22 23:12:20 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | #include "method_ptrcall.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | namespace TestMath { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | class GetClassAndNamespace { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	String code; | 
					
						
							|  |  |  | 	int idx; | 
					
						
							|  |  |  | 	int line; | 
					
						
							|  |  |  | 	String error_str; | 
					
						
							|  |  |  | 	bool error; | 
					
						
							|  |  |  | 	Variant value; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	String class_name; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	enum Token { | 
					
						
							|  |  |  | 		TK_BRACKET_OPEN, | 
					
						
							|  |  |  | 		TK_BRACKET_CLOSE, | 
					
						
							|  |  |  | 		TK_CURLY_BRACKET_OPEN, | 
					
						
							|  |  |  | 		TK_CURLY_BRACKET_CLOSE, | 
					
						
							|  |  |  | 		TK_PERIOD, | 
					
						
							|  |  |  | 		TK_COLON, | 
					
						
							|  |  |  | 		TK_COMMA, | 
					
						
							|  |  |  | 		TK_SYMBOL, | 
					
						
							|  |  |  | 		TK_IDENTIFIER, | 
					
						
							|  |  |  | 		TK_STRING, | 
					
						
							|  |  |  | 		TK_NUMBER, | 
					
						
							|  |  |  | 		TK_EOF, | 
					
						
							|  |  |  | 		TK_ERROR | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	Token get_token() { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		while (true) { | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 			switch (code[idx]) { | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 				case '\n': { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					line++; | 
					
						
							|  |  |  | 					idx++; | 
					
						
							|  |  |  | 					break; | 
					
						
							|  |  |  | 				}; | 
					
						
							|  |  |  | 				case 0: { | 
					
						
							|  |  |  | 					return TK_EOF; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				} break; | 
					
						
							|  |  |  | 				case '{': { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					idx++; | 
					
						
							|  |  |  | 					return TK_CURLY_BRACKET_OPEN; | 
					
						
							|  |  |  | 				}; | 
					
						
							|  |  |  | 				case '}': { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					idx++; | 
					
						
							|  |  |  | 					return TK_CURLY_BRACKET_CLOSE; | 
					
						
							|  |  |  | 				}; | 
					
						
							|  |  |  | 				case '[': { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					idx++; | 
					
						
							|  |  |  | 					return TK_BRACKET_OPEN; | 
					
						
							|  |  |  | 				}; | 
					
						
							|  |  |  | 				case ']': { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					idx++; | 
					
						
							|  |  |  | 					return TK_BRACKET_CLOSE; | 
					
						
							|  |  |  | 				}; | 
					
						
							|  |  |  | 				case ':': { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					idx++; | 
					
						
							|  |  |  | 					return TK_COLON; | 
					
						
							|  |  |  | 				}; | 
					
						
							|  |  |  | 				case ',': { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					idx++; | 
					
						
							|  |  |  | 					return TK_COMMA; | 
					
						
							|  |  |  | 				}; | 
					
						
							|  |  |  | 				case '.': { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					idx++; | 
					
						
							|  |  |  | 					return TK_PERIOD; | 
					
						
							|  |  |  | 				}; | 
					
						
							|  |  |  | 				case '#': { | 
					
						
							|  |  |  | 					//compiler directive
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 					while (code[idx] != '\n' && code[idx] != 0) { | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 						idx++; | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 					continue; | 
					
						
							|  |  |  | 				} break; | 
					
						
							|  |  |  | 				case '/': { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 					switch (code[idx + 1]) { | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 						case '*': { // block comment
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 							idx += 2; | 
					
						
							|  |  |  | 							while (true) { | 
					
						
							|  |  |  | 								if (code[idx] == 0) { | 
					
						
							|  |  |  | 									error_str = "Unterminated comment"; | 
					
						
							|  |  |  | 									error = true; | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 									return TK_ERROR; | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 								} else if (code[idx] == '*' && code[idx + 1] == '/') { | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 									idx += 2; | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 									break; | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 								} else if (code[idx] == '\n') { | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 									line++; | 
					
						
							|  |  |  | 								} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 								idx++; | 
					
						
							|  |  |  | 							} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 						} break; | 
					
						
							|  |  |  | 						case '/': { // line comment skip
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 							while (code[idx] != '\n' && code[idx] != 0) { | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 								idx++; | 
					
						
							|  |  |  | 							} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 						} break; | 
					
						
							|  |  |  | 						default: { | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 							value = "/"; | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 							idx++; | 
					
						
							|  |  |  | 							return TK_SYMBOL; | 
					
						
							|  |  |  | 						} | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					continue; // a comment
 | 
					
						
							|  |  |  | 				} break; | 
					
						
							|  |  |  | 				case '\'': | 
					
						
							|  |  |  | 				case '"': { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					CharType begin_str = code[idx]; | 
					
						
							|  |  |  | 					idx++; | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 					String tk_string = String(); | 
					
						
							|  |  |  | 					while (true) { | 
					
						
							|  |  |  | 						if (code[idx] == 0) { | 
					
						
							|  |  |  | 							error_str = "Unterminated String"; | 
					
						
							|  |  |  | 							error = true; | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 							return TK_ERROR; | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 						} else if (code[idx] == begin_str) { | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 							idx++; | 
					
						
							|  |  |  | 							break; | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 						} else if (code[idx] == '\\') { | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 							//escaped characters...
 | 
					
						
							|  |  |  | 							idx++; | 
					
						
							|  |  |  | 							CharType next = code[idx]; | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 							if (next == 0) { | 
					
						
							|  |  |  | 								error_str = "Unterminated String"; | 
					
						
							|  |  |  | 								error = true; | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 								return TK_ERROR; | 
					
						
							|  |  |  | 							} | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 							CharType res = 0; | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 							switch (next) { | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 								case 'b': res = 8; break; | 
					
						
							|  |  |  | 								case 't': res = 9; break; | 
					
						
							|  |  |  | 								case 'n': res = 10; break; | 
					
						
							|  |  |  | 								case 'f': res = 12; break; | 
					
						
							|  |  |  | 								case 'r': | 
					
						
							|  |  |  | 									res = 13; | 
					
						
							|  |  |  | 									break; | 
					
						
							|  |  |  | 								case '\"': res = '\"'; break; | 
					
						
							|  |  |  | 								case '\\': | 
					
						
							|  |  |  | 									res = '\\'; | 
					
						
							|  |  |  | 									break; | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 								default: { | 
					
						
							|  |  |  | 									res = next; | 
					
						
							|  |  |  | 								} break; | 
					
						
							|  |  |  | 							} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 							tk_string += res; | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 						} else { | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 							if (code[idx] == '\n') | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 								line++; | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 							tk_string += code[idx]; | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 						} | 
					
						
							|  |  |  | 						idx++; | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 					value = tk_string; | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 					return TK_STRING; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				} break; | 
					
						
							|  |  |  | 				default: { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 					if (code[idx] <= 32) { | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 						idx++; | 
					
						
							|  |  |  | 						break; | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 					if ((code[idx] >= 33 && code[idx] <= 47) || (code[idx] >= 58 && code[idx] <= 64) || (code[idx] >= 91 && code[idx] <= 96) || (code[idx] >= 123 && code[idx] <= 127)) { | 
					
						
							|  |  |  | 						value = String::chr(code[idx]); | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 						idx++; | 
					
						
							|  |  |  | 						return TK_SYMBOL; | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 					if (code[idx] == '-' || (code[idx] >= '0' && code[idx] <= '9')) { | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 						//a number
 | 
					
						
							|  |  |  | 						const CharType *rptr; | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 						double number = String::to_double(&code[idx], &rptr); | 
					
						
							|  |  |  | 						idx += (rptr - &code[idx]); | 
					
						
							|  |  |  | 						value = number; | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 						return TK_NUMBER; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 					} else if ((code[idx] >= 'A' && code[idx] <= 'Z') || (code[idx] >= 'a' && code[idx] <= 'z') || code[idx] > 127) { | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 						String id; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 						while ((code[idx] >= 'A' && code[idx] <= 'Z') || (code[idx] >= 'a' && code[idx] <= 'z') || code[idx] > 127) { | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 							id += code[idx]; | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 							idx++; | 
					
						
							|  |  |  | 						} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 						value = id; | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 						return TK_IDENTIFIER; | 
					
						
							|  |  |  | 					} else { | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 						error_str = "Unexpected character."; | 
					
						
							|  |  |  | 						error = true; | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 						return TK_ERROR; | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | public: | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	Error parse(const String &p_code, const String &p_known_class_name = String()) { | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 		code = p_code; | 
					
						
							|  |  |  | 		idx = 0; | 
					
						
							|  |  |  | 		line = 0; | 
					
						
							|  |  |  | 		error_str = String(); | 
					
						
							|  |  |  | 		error = false; | 
					
						
							|  |  |  | 		value = Variant(); | 
					
						
							|  |  |  | 		class_name = String(); | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 		bool use_next_class = false; | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 		Token tk = get_token(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 		Map<int, String> namespace_stack; | 
					
						
							|  |  |  | 		int curly_stack = 0; | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 		while (!error || tk != TK_EOF) { | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 			if (tk == TK_BRACKET_OPEN) { | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 				tk = get_token(); | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 				if (tk == TK_IDENTIFIER && String(value) == "ScriptClass") { | 
					
						
							|  |  |  | 					if (get_token() == TK_BRACKET_CLOSE) { | 
					
						
							|  |  |  | 						use_next_class = true; | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 					} | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 			} else if (tk == TK_IDENTIFIER && String(value) == "class") { | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 				tk = get_token(); | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 				if (tk == TK_IDENTIFIER) { | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 					String name = value; | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 					if (use_next_class || p_known_class_name == name) { | 
					
						
							|  |  |  | 						for (Map<int, String>::Element *E = namespace_stack.front(); E; E = E->next()) { | 
					
						
							|  |  |  | 							class_name += E->get() + "."; | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 						} | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 						class_name += String(value); | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 						break; | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 			} else if (tk == TK_IDENTIFIER && String(value) == "namespace") { | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 				String name; | 
					
						
							|  |  |  | 				int at_level = curly_stack; | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 				while (true) { | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 					tk = get_token(); | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 					if (tk == TK_IDENTIFIER) { | 
					
						
							|  |  |  | 						name += String(value); | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 					} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					tk = get_token(); | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 					if (tk == TK_PERIOD) { | 
					
						
							|  |  |  | 						name += "."; | 
					
						
							|  |  |  | 					} else if (tk == TK_CURLY_BRACKET_OPEN) { | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 						curly_stack++; | 
					
						
							|  |  |  | 						break; | 
					
						
							|  |  |  | 					} else { | 
					
						
							|  |  |  | 						break; //whathever else
 | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 				if (name != String()) { | 
					
						
							|  |  |  | 					namespace_stack[at_level] = name; | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 				} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 			} else if (tk == TK_CURLY_BRACKET_OPEN) { | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 				curly_stack++; | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 			} else if (tk == TK_CURLY_BRACKET_CLOSE) { | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 				curly_stack--; | 
					
						
							|  |  |  | 				if (namespace_stack.has(curly_stack)) { | 
					
						
							|  |  |  | 					namespace_stack.erase(curly_stack); | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			tk = get_token(); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if (error) | 
					
						
							|  |  |  | 			return ERR_PARSE_ERROR; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return OK; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	String get_error() { | 
					
						
							|  |  |  | 		return error_str; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	String get_class() { | 
					
						
							|  |  |  | 		return class_name; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | void test_vec(Plane p_vec) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	CameraMatrix cm; | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	cm.set_perspective(45, 1, 0, 100); | 
					
						
							|  |  |  | 	Plane v0 = cm.xform4(p_vec); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	print_line("out: " + v0); | 
					
						
							|  |  |  | 	v0.normal.z = (v0.d / 100.0 * 2.0 - 1.0) * v0.d; | 
					
						
							|  |  |  | 	print_line("out_F: " + v0); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | uint32_t ihash(uint32_t a) { | 
					
						
							|  |  |  | 	a = (a + 0x7ed55d16) + (a << 12); | 
					
						
							|  |  |  | 	a = (a ^ 0xc761c23c) ^ (a >> 19); | 
					
						
							|  |  |  | 	a = (a + 0x165667b1) + (a << 5); | 
					
						
							|  |  |  | 	a = (a + 0xd3a2646c) ^ (a << 9); | 
					
						
							|  |  |  | 	a = (a + 0xfd7046c5) + (a << 3); | 
					
						
							|  |  |  | 	a = (a ^ 0xb55a4f09) ^ (a >> 16); | 
					
						
							|  |  |  | 	return a; | 
					
						
							| 
									
										
										
										
											2016-02-11 00:00:11 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | uint32_t ihash2(uint32_t a) { | 
					
						
							|  |  |  | 	a = (a ^ 61) ^ (a >> 16); | 
					
						
							|  |  |  | 	a = a + (a << 3); | 
					
						
							|  |  |  | 	a = a ^ (a >> 4); | 
					
						
							|  |  |  | 	a = a * 0x27d4eb2d; | 
					
						
							|  |  |  | 	a = a ^ (a >> 15); | 
					
						
							|  |  |  | 	return a; | 
					
						
							| 
									
										
										
										
											2016-02-11 00:00:11 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | uint32_t ihash3(uint32_t a) { | 
					
						
							|  |  |  | 	a = (a + 0x479ab41d) + (a << 8); | 
					
						
							|  |  |  | 	a = (a ^ 0xe4aa10ce) ^ (a >> 5); | 
					
						
							|  |  |  | 	a = (a + 0x9942f0a6) - (a << 14); | 
					
						
							|  |  |  | 	a = (a ^ 0x5aedd67d) ^ (a >> 3); | 
					
						
							|  |  |  | 	a = (a + 0x17bea992) + (a << 7); | 
					
						
							|  |  |  | 	return a; | 
					
						
							| 
									
										
										
										
											2016-02-11 00:00:11 -03:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | MainLoop *test() { | 
					
						
							| 
									
										
										
										
											2016-06-22 23:12:20 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-28 21:46:48 -03:00
										 |  |  | 	{ | 
					
						
							|  |  |  | 		float r = 1; | 
					
						
							|  |  |  | 		float g = 0.5; | 
					
						
							|  |  |  | 		float b = 0.1; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		const float pow2to9 = 512.0f; | 
					
						
							|  |  |  | 		const float B = 15.0f; | 
					
						
							|  |  |  | 		const float N = 9.0f; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-27 21:07:15 +02:00
										 |  |  | 		float sharedexp = 65408.000f; | 
					
						
							| 
									
										
										
										
											2017-05-28 21:46:48 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		float cRed = MAX(0.0f, MIN(sharedexp, r)); | 
					
						
							|  |  |  | 		float cGreen = MAX(0.0f, MIN(sharedexp, g)); | 
					
						
							|  |  |  | 		float cBlue = MAX(0.0f, MIN(sharedexp, b)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		float cMax = MAX(cRed, MAX(cGreen, cBlue)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		float expp = MAX(-B - 1.0f, floor(Math::log(cMax) / Math_LN2)) + 1.0f + B; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		float sMax = (float)floor((cMax / Math::pow(2.0f, expp - B - N)) + 0.5f); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		float exps = expp + 1.0f; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if (0.0 <= sMax && sMax < pow2to9) { | 
					
						
							|  |  |  | 			exps = expp; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		float sRed = Math::floor((cRed / pow(2.0f, exps - B - N)) + 0.5f); | 
					
						
							|  |  |  | 		float sGreen = Math::floor((cGreen / pow(2.0f, exps - B - N)) + 0.5f); | 
					
						
							|  |  |  | 		float sBlue = Math::floor((cBlue / pow(2.0f, exps - B - N)) + 0.5f); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		print_line("R: " + rtos(sRed) + " G: " + rtos(sGreen) + " B: " + rtos(sBlue) + " EXP: " + rtos(exps)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		uint32_t rgbe = (Math::fast_ftoi(sRed) & 0x1FF) | ((Math::fast_ftoi(sGreen) & 0x1FF) << 9) | ((Math::fast_ftoi(sBlue) & 0x1FF) << 18) | ((Math::fast_ftoi(exps) & 0x1F) << 27); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		float rb = rgbe & 0x1ff; | 
					
						
							|  |  |  | 		float gb = (rgbe >> 9) & 0x1ff; | 
					
						
							|  |  |  | 		float bb = (rgbe >> 18) & 0x1ff; | 
					
						
							|  |  |  | 		float eb = (rgbe >> 27); | 
					
						
							|  |  |  | 		float mb = Math::pow(2, eb - 15.0 - 9.0); | 
					
						
							|  |  |  | 		; | 
					
						
							|  |  |  | 		float rd = rb * mb; | 
					
						
							|  |  |  | 		float gd = gb * mb; | 
					
						
							|  |  |  | 		float bd = bb * mb; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		print_line("RGBE: " + Color(rd, gd, bd)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	print_line("Dvectors: " + itos(MemoryPool::allocs_used)); | 
					
						
							|  |  |  | 	print_line("Mem used: " + itos(MemoryPool::total_memory)); | 
					
						
							|  |  |  | 	print_line("MAx mem used: " + itos(MemoryPool::max_memory)); | 
					
						
							| 
									
										
										
										
											2017-01-05 19:41:36 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-07 18:25:37 -03:00
										 |  |  | 	PoolVector<int> ints; | 
					
						
							|  |  |  | 	ints.resize(20); | 
					
						
							| 
									
										
										
										
											2017-01-05 19:41:36 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-07 18:25:37 -03:00
										 |  |  | 	{ | 
					
						
							|  |  |  | 		PoolVector<int>::Write w; | 
					
						
							|  |  |  | 		w = ints.write(); | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 		for (int i = 0; i < ints.size(); i++) { | 
					
						
							|  |  |  | 			w[i] = i; | 
					
						
							| 
									
										
										
										
											2017-01-07 18:25:37 -03:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	PoolVector<int> posho = ints; | 
					
						
							| 
									
										
										
										
											2017-01-05 19:41:36 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-07 18:25:37 -03:00
										 |  |  | 	{ | 
					
						
							|  |  |  | 		PoolVector<int>::Read r = posho.read(); | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 		for (int i = 0; i < posho.size(); i++) { | 
					
						
							|  |  |  | 			print_line(itos(i) + " : " + itos(r[i])); | 
					
						
							| 
									
										
										
										
											2017-01-07 18:25:37 -03:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-01-05 19:41:36 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	print_line("later Dvectors: " + itos(MemoryPool::allocs_used)); | 
					
						
							|  |  |  | 	print_line("later Mem used: " + itos(MemoryPool::total_memory)); | 
					
						
							|  |  |  | 	print_line("Mlater Ax mem used: " + itos(MemoryPool::max_memory)); | 
					
						
							| 
									
										
										
										
											2017-01-05 19:41:36 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	return NULL; | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	List<String> cmdlargs = OS::get_singleton()->get_cmdline_args(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (cmdlargs.empty()) { | 
					
						
							|  |  |  | 		//try editor!
 | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	String test = cmdlargs.back()->get(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	FileAccess *fa = FileAccess::open(test, FileAccess::READ); | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	if (!fa) { | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 		ERR_EXPLAIN("Could not open file: " + test); | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 		ERR_FAIL_V(NULL); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	Vector<uint8_t> buf; | 
					
						
							|  |  |  | 	int flen = fa->get_len(); | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	buf.resize(fa->get_len() + 1); | 
					
						
							|  |  |  | 	fa->get_buffer(&buf[0], flen); | 
					
						
							|  |  |  | 	buf[flen] = 0; | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	String code; | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	code.parse_utf8((const char *)&buf[0]); | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	GetClassAndNamespace getclass; | 
					
						
							|  |  |  | 	if (getclass.parse(code)) { | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 		print_line("Parse error: " + getclass.get_error()); | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 	} else { | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 		print_line("Found class: " + getclass.get_class()); | 
					
						
							| 
									
										
										
										
											2016-09-15 10:13:28 -03:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-22 23:12:20 -03:00
										 |  |  | 	return NULL; | 
					
						
							| 
									
										
										
										
											2016-02-11 00:00:11 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-06 16:36:05 -04:00
										 |  |  | 		Vector<int> hashes; | 
					
						
							| 
									
										
										
										
											2016-02-11 00:00:11 -03:00
										 |  |  | 		List<StringName> tl; | 
					
						
							| 
									
										
										
										
											2017-01-02 23:03:46 -03:00
										 |  |  | 		ClassDB::get_class_list(&tl); | 
					
						
							| 
									
										
										
										
											2016-02-11 00:00:11 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 		for (List<StringName>::Element *E = tl.front(); E; E = E->next()) { | 
					
						
							| 
									
										
										
										
											2016-02-11 00:00:11 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			Vector<uint8_t> m5b = E->get().operator String().md5_buffer(); | 
					
						
							|  |  |  | 			hashes.push_back(hashes.size()); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 		for (int i = nearest_shift(hashes.size()); i < 20; i++) { | 
					
						
							| 
									
										
										
										
											2016-02-11 00:00:11 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 			bool success = true; | 
					
						
							|  |  |  | 			for (int s = 0; s < 10000; s++) { | 
					
						
							| 
									
										
										
										
											2016-02-11 00:00:11 -03:00
										 |  |  | 				Set<uint32_t> existing; | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 				success = true; | 
					
						
							| 
									
										
										
										
											2016-02-11 00:00:11 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 				for (int j = 0; j < hashes.size(); j++) { | 
					
						
							| 
									
										
										
										
											2016-02-11 00:00:11 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 					uint32_t eh = ihash2(ihash3(hashes[j] + ihash(s) + s)) & ((1 << i) - 1); | 
					
						
							| 
									
										
										
										
											2016-02-11 00:00:11 -03:00
										 |  |  | 					if (existing.has(eh)) { | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 						success = false; | 
					
						
							| 
									
										
										
										
											2016-02-11 00:00:11 -03:00
										 |  |  | 						break; | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 					existing.insert(eh); | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				if (success) { | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 					print_line("success at " + itos(i) + "/" + itos(nearest_shift(hashes.size())) + " shift " + itos(s)); | 
					
						
							| 
									
										
										
										
											2016-02-11 00:00:11 -03:00
										 |  |  | 					break; | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			if (success) | 
					
						
							|  |  |  | 				break; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		print_line("DONE"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	{ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 		print_line("NUM: " + itos(-128)); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 		Vector3 v(1, 2, 3); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 		v.normalize(); | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 		float a = 0.3; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 		Basis m(v, a); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 		Vector3 v2(7, 3, 1); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 		v2.normalize(); | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 		float a2 = 0.8; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 		Basis m2(v2, a2); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 		Quat q = m; | 
					
						
							|  |  |  | 		Quat q2 = m2; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-11 00:52:51 -03:00
										 |  |  | 		Basis m3 = m.inverse() * m2; | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 		Quat q3 = (q.inverse() * q2); //.normalized();
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		print_line(Quat(m3)); | 
					
						
							|  |  |  | 		print_line(q3); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 		print_line("before v: " + v + " a: " + rtos(a)); | 
					
						
							| 
									
										
										
										
											2017-04-05 17:47:13 -05:00
										 |  |  | 		q.get_axis_angle(v, a); | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 		print_line("after v: " + v + " a: " + rtos(a)); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return NULL; | 
					
						
							|  |  |  | 	String ret; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	List<String> args; | 
					
						
							|  |  |  | 	args.push_back("-l"); | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	Error err = OS::get_singleton()->execute("/bin/ls", args, true, NULL, &ret); | 
					
						
							|  |  |  | 	print_line("error: " + itos(err)); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	print_line(ret); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return NULL; | 
					
						
							| 
									
										
										
										
											2017-01-11 00:52:51 -03:00
										 |  |  | 	Basis m3; | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	m3.rotate(Vector3(1, 0, 0), 0.2); | 
					
						
							|  |  |  | 	m3.rotate(Vector3(0, 1, 0), 1.77); | 
					
						
							|  |  |  | 	m3.rotate(Vector3(0, 0, 1), 212); | 
					
						
							| 
									
										
										
										
											2017-01-11 00:52:51 -03:00
										 |  |  | 	Basis m32; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	m32.set_euler(m3.get_euler()); | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	print_line("ELEULEEEEEEEEEEEEEEEEEER: " + m3.get_euler() + " vs " + m32.get_euler()); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	return NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		Dictionary d; | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 		d["momo"] = 1; | 
					
						
							|  |  |  | 		Dictionary b = d; | 
					
						
							|  |  |  | 		b["44"] = 4; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return NULL; | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	print_line("inters: " + rtos(Geometry::segment_intersects_circle(Vector2(-5, 0), Vector2(-2, 0), Vector2(), 1.0))); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	print_line("cross: " + Vector3(1, 2, 3).cross(Vector3(4, 5, 7))); | 
					
						
							|  |  |  | 	print_line("dot: " + rtos(Vector3(1, 2, 3).dot(Vector3(4, 5, 7)))); | 
					
						
							|  |  |  | 	print_line("abs: " + Vector3(-1, 2, -3).abs()); | 
					
						
							|  |  |  | 	print_line("distance_to: " + rtos(Vector3(1, 2, 3).distance_to(Vector3(4, 5, 7)))); | 
					
						
							|  |  |  | 	print_line("distance_squared_to: " + rtos(Vector3(1, 2, 3).distance_squared_to(Vector3(4, 5, 7)))); | 
					
						
							|  |  |  | 	print_line("plus: " + (Vector3(1, 2, 3) + Vector3(Vector3(4, 5, 7)))); | 
					
						
							|  |  |  | 	print_line("minus: " + (Vector3(1, 2, 3) - Vector3(Vector3(4, 5, 7)))); | 
					
						
							|  |  |  | 	print_line("mul: " + (Vector3(1, 2, 3) * Vector3(Vector3(4, 5, 7)))); | 
					
						
							|  |  |  | 	print_line("div: " + (Vector3(1, 2, 3) / Vector3(Vector3(4, 5, 7)))); | 
					
						
							|  |  |  | 	print_line("mul scalar: " + (Vector3(1, 2, 3) * 2)); | 
					
						
							|  |  |  | 	print_line("premul scalar: " + (2 * Vector3(1, 2, 3))); | 
					
						
							|  |  |  | 	print_line("div scalar: " + (Vector3(1, 2, 3) / 3.0)); | 
					
						
							|  |  |  | 	print_line("length: " + rtos(Vector3(1, 2, 3).length())); | 
					
						
							|  |  |  | 	print_line("length squared: " + rtos(Vector3(1, 2, 3).length_squared())); | 
					
						
							|  |  |  | 	print_line("normalized: " + Vector3(1, 2, 3).normalized()); | 
					
						
							|  |  |  | 	print_line("inverse: " + Vector3(1, 2, 3).inverse()); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 		Vector3 v(4, 5, 7); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 		v.normalize(); | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 		print_line("normalize: " + v); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 		Vector3 v(4, 5, 7); | 
					
						
							|  |  |  | 		v += Vector3(1, 2, 3); | 
					
						
							|  |  |  | 		print_line("+=: " + v); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 		Vector3 v(4, 5, 7); | 
					
						
							|  |  |  | 		v -= Vector3(1, 2, 3); | 
					
						
							|  |  |  | 		print_line("-=: " + v); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 		Vector3 v(4, 5, 7); | 
					
						
							|  |  |  | 		v *= Vector3(1, 2, 3); | 
					
						
							|  |  |  | 		print_line("*=: " + v); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 		Vector3 v(4, 5, 7); | 
					
						
							|  |  |  | 		v /= Vector3(1, 2, 3); | 
					
						
							|  |  |  | 		print_line("/=: " + v); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 		Vector3 v(4, 5, 7); | 
					
						
							|  |  |  | 		v *= 2.0; | 
					
						
							|  |  |  | 		print_line("scalar *=: " + v); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 		Vector3 v(4, 5, 7); | 
					
						
							|  |  |  | 		v /= 2.0; | 
					
						
							|  |  |  | 		print_line("scalar /=: " + v); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return NULL; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2017-12-06 21:36:34 +01:00
										 |  |  | } // namespace TestMath
 |