50 lines
		
	
	
		
			698 B
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			698 B
		
	
	
	
		
			C++
		
	
	
	
	
	
| export module kym;
 | |
| 
 | |
| import coral;
 | |
| import coral.math;
 | |
| 
 | |
| export namespace kym {
 | |
| 	enum class value_type {
 | |
| 		nil,
 | |
| 		boolean,
 | |
| 		integer,
 | |
| 		scalar,
 | |
| 		vector2,
 | |
| 		vector3,
 | |
| 		object,
 | |
| 	};
 | |
| 
 | |
| 	struct value {
 | |
| 		value_type type;
 | |
| 
 | |
| 		union {
 | |
| 			bool boolean;
 | |
| 
 | |
| 			coral::i64 integer;
 | |
| 
 | |
| 			coral::f64 scalar;
 | |
| 
 | |
| 			coral::vector2 vector2;
 | |
| 
 | |
| 			coral::vector3 vector3;
 | |
| 
 | |
| 			void * object;
 | |
| 		} as;
 | |
| 
 | |
| 		coral::optional<coral::u16> as_u16() const {
 | |
| 			if ((this->type == value_type::integer) &&
 | |
| 				(this->as.integer >= 0) && (this->as.integer <= coral::u16_max)) {
 | |
| 
 | |
| 				return static_cast<coral::u16>(this->as.integer);
 | |
| 			}
 | |
| 
 | |
| 			return {};
 | |
| 		}
 | |
| 	};
 | |
| 
 | |
| 	value nil = {
 | |
| 		.type = value_type::nil,
 | |
| 		.as = {.object = nullptr},
 | |
| 	};
 | |
| };
 |