| 
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -202,7 +202,7 @@ RMAPI float Remap(float value, float inputStart, float inputEnd, float outputSta | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Check whether two given floats are almost equal | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			RMAPI bool FloatEquals(float x, float y) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    bool result = (fabsf(x - y)) <= (EPSILON * fmaxf(1.0f, fmaxf(fabsf(x), fabsf(y)))); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    bool result = (fabsf(x - y)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(x), fabsf(y)))); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    return result; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -430,7 +430,7 @@ RMAPI Vector2 Vector2MoveTowards(Vector2 v, Vector2 target, float maxDistance) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Invert the given vector | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			RMAPI Vector2 Vector2Invert(Vector2 v) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Vector2 result = { 1.0f / v.x, 1.0f / v.y }; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Vector2 result = { 1.0f/v.x, 1.0f/v.y }; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    return result; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -449,26 +449,26 @@ RMAPI Vector2 Vector2Clamp(Vector2 v, Vector2 min, Vector2 max) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Clamp the magnitude of the vector between two | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// given min and max values | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			RMAPI Vector2 Vector2ClampValue(Vector2 v, float minMag, float maxMag) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			RMAPI Vector2 Vector2ClampValue(Vector2 v, float min, float max) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Vector2 result = { 0 }; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    float length = (v.x * v.x) + (v.y * v.y); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    float length = (v.x*v.x) + (v.y*v.y); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (length > 0.0f) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        length = sqrtf(length); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        if (length < minMag) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        if (length < min) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            float scale = minMag / length; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            result.x = v.x * scale; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            result.y = v.y * scale; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            float scale = min/length; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            result.x = v.x*scale; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            result.y = v.y*scale; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        else if (length > maxMag) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        else if (length > max) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            float scale = maxMag / length; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            result.x = v.x * scale; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            result.y = v.y * scale; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            float scale = max/length; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            result.x = v.x*scale; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            result.y = v.y*scale; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -478,8 +478,8 @@ RMAPI Vector2 Vector2ClampValue(Vector2 v, float minMag, float maxMag) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Check whether two given vectors are almost equal | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			RMAPI bool Vector2Equals(Vector2 p, Vector2 q) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    bool result = ((fabsf(p.x - q.x)) <= (EPSILON * fmaxf(1.0f, fmaxf(fabsf(p.x), fabsf(q.x))))) && | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                  ((fabsf(p.y - q.y)) <= (EPSILON * fmaxf(1.0f, fmaxf(fabsf(p.y), fabsf(q.y))))); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    bool result = ((fabsf(p.x - q.x)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.x), fabsf(q.x))))) && | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                  ((fabsf(p.y - q.y)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.y), fabsf(q.y))))); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    return result; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -924,7 +924,7 @@ RMAPI float3 Vector3ToFloatV(Vector3 v) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Invert the given vector | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			RMAPI Vector3 Vector3Invert(Vector3 v) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Vector3 result = { 1.0f / v.x, 1.0f / v.y, 1.0f / v.z }; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Vector3 result = { 1.0f/v.x, 1.0f/v.y, 1.0f/v.z }; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    return result; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -948,24 +948,24 @@ RMAPI Vector3 Vector3ClampValue(Vector3 v, float minMag, float maxMag) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Vector3 result = { 0 }; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    float length = (v.x * v.x) + (v.y * v.y) + (v.z * v.z); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    float length = (v.x*v.x) + (v.y*v.y) + (v.z*v.z); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (length > 0.0f) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        length = sqrtf(length); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        if (length < minMag) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            float scale = minMag / length; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            result.x = v.x * scale; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            result.y = v.y * scale; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            result.z = v.z * scale; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            float scale = minMag/length; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            result.x = v.x*scale; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            result.y = v.y*scale; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            result.z = v.z*scale; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        else if (length > maxMag) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            float scale = maxMag / length; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            result.x = v.x * scale; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            result.y = v.y * scale; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            result.z = v.z * scale; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            float scale = maxMag/length; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            result.x = v.x*scale; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            result.y = v.y*scale; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            result.z = v.z*scale; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -975,9 +975,9 @@ RMAPI Vector3 Vector3ClampValue(Vector3 v, float minMag, float maxMag) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Check whether two given vectors are almost equal | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			RMAPI bool Vector3Equals(Vector3 p, Vector3 q) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    bool result = ((fabsf(p.x - q.x)) <= (EPSILON * fmaxf(1.0f, fmaxf(fabsf(p.x), fabsf(q.x))))) && | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                  ((fabsf(p.y - q.y)) <= (EPSILON * fmaxf(1.0f, fmaxf(fabsf(p.y), fabsf(q.y))))) && | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                  ((fabsf(p.z - q.z)) <= (EPSILON * fmaxf(1.0f, fmaxf(fabsf(p.z), fabsf(q.z))))); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    bool result = ((fabsf(p.x - q.x)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.x), fabsf(q.x))))) && | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                  ((fabsf(p.y - q.y)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.y), fabsf(q.y))))) && | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                  ((fabsf(p.z - q.z)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.z), fabsf(q.z))))); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    return result; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -992,23 +992,20 @@ RMAPI Vector3 Vector3Refract(Vector3 v, Vector3 n, float r) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Vector3 result = { 0 }; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    float dot = v.x * n.x + v.y * n.y + v.z * n.z; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    float d = 1.0f - r * r * (1.0f - dot * dot); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (d < 0.0f) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        // Total internal reflection | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        return result; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    else | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    float dot = v.x*n.x + v.y*n.y + v.z*n.z; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    float d = 1.0f - r*r*(1.0f - dot*dot); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (d >= 0.0f) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        d = sqrtf(d); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        v.x = r * v.x - (r * dot + d) * n.x; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        v.y = r * v.y - (r * dot + d) * n.y; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        v.z = r * v.z - (r * dot + d) * n.z; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        k">return result; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        v.x = r*v.x - (r*dot + d)*n.x; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        v.y = r*v.y - (r*dot + d)*n.y; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        v.z = r*v.z - (r*dot + d)*n.z; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			         | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        n">result = v; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    return result; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			//---------------------------------------------------------------------------------- | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -2007,10 +2004,10 @@ RMAPI Quaternion QuaternionTransform(Quaternion q, Matrix mat) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Check whether two given quaternions are almost equal | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			RMAPI bool QuaternionEquals(Quaternion p, Quaternion q) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    bool result = ((fabsf(p.x - q.x)) <= (EPSILON * fmaxf(1.0f, fmaxf(fabsf(p.x), fabsf(q.x))))) && | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                  ((fabsf(p.y - q.y)) <= (EPSILON * fmaxf(1.0f, fmaxf(fabsf(p.y), fabsf(q.y))))) && | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                  ((fabsf(p.z - q.z)) <= (EPSILON * fmaxf(1.0f, fmaxf(fabsf(p.z), fabsf(q.z))))) && | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                  ((fabsf(p.w - q.w)) <= (EPSILON * fmaxf(1.0f, fmaxf(fabsf(p.w), fabsf(q.w))))); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    bool result = ((fabsf(p.x - q.x)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.x), fabsf(q.x))))) && | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                  ((fabsf(p.y - q.y)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.y), fabsf(q.y))))) && | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                  ((fabsf(p.z - q.z)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.z), fabsf(q.z))))) && | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                  ((fabsf(p.w - q.w)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.w), fabsf(q.w))))); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    return result; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
				
				 | 
			
			 | 
			
			
 |