57 lines
		
	
	
	
		
			756 B
		
	
	
	
		
			C++
		
	
	
	
	
	
		
		
			
		
	
	
			57 lines
		
	
	
	
		
			756 B
		
	
	
	
		
			C++
		
	
	
	
	
	
| 
								 | 
							
								#pragma once
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace lt::math {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								template<typename T = float>
							 | 
						||
| 
								 | 
							
								struct vec2_impl
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									vec2_impl(): x(), y()
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									explicit vec2_impl(T scalar): x(scalar), y(scalar)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									vec2_impl(T x, T y): x(x), y(y)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									[[nodiscard]] auto operator*(const vec2_impl<T> &other) const -> vec2_impl
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return {
							 | 
						||
| 
								 | 
							
											x * other.x,
							 | 
						||
| 
								 | 
							
											y * other.y,
							 | 
						||
| 
								 | 
							
										};
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									[[nodiscard]] auto operator-(const vec2_impl<T> &other) const -> vec2_impl
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return {
							 | 
						||
| 
								 | 
							
											x - other.x,
							 | 
						||
| 
								 | 
							
											y - other.y,
							 | 
						||
| 
								 | 
							
										};
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									[[nodiscard]] auto operator*(float scalar) const -> vec2_impl
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return {
							 | 
						||
| 
								 | 
							
											x * scalar,
							 | 
						||
| 
								 | 
							
											y * scalar,
							 | 
						||
| 
								 | 
							
										};
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									T x; // NOLINT
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									T y; // NOLINT
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								using vec2 = vec2_impl<float>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								using ivec2 = vec2_impl<int32_t>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								using uvec2 = vec2_impl<uint32_t>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								} // namespace lt::math
							 |