squash! First iteration of Type-Generic RayMath
This commit is contained in:
parent
d7c1d9ab37
commit
e84d765684
208
src/tgraymath.h
208
src/tgraymath.h
|
|
@ -1,14 +1,11 @@
|
|||
|
||||
#ifndef RAYMATH_H
|
||||
#include "raymath.h"
|
||||
#endif
|
||||
|
||||
void rl_tgempty(void);
|
||||
|
||||
#if __STDC_VERSION__ < 201112L
|
||||
#warning _Generic is a C11 directive and requires at least C11 compatibility.
|
||||
#endif
|
||||
|
||||
void tgrarted(void);
|
||||
|
||||
//----------------------------------------------------------------------------------
|
||||
// Module Functions Definition - TGVector
|
||||
//----------------------------------------------------------------------------------
|
||||
|
|
@ -16,213 +13,279 @@ void tgrarted(void);
|
|||
#define RLEquals(a, b) _Generic((a), \
|
||||
Vector2: _Generic((b), \
|
||||
Vector2: Vector2Equals, \
|
||||
default: tgrarted), \
|
||||
default: rl_tgempty \
|
||||
), \
|
||||
Vector3: _Generic((b), \
|
||||
Vector3: Vector3Equals, \
|
||||
default: tgrarted), \
|
||||
default: rl_tgempty \
|
||||
), \
|
||||
Vector4: _Generic((b), \
|
||||
Vector4: Vector4Equals, \
|
||||
default: tgrarted), \
|
||||
default: rl_tgempty \
|
||||
), \
|
||||
default: _Generic((b), \
|
||||
default: FloatEquals))(a, b)
|
||||
default: FloatEquals \
|
||||
) \
|
||||
) (a, b)
|
||||
|
||||
#define RLClamp(val, min, max) _Generic((val), \
|
||||
Vector2: _Generic((min), \
|
||||
Vector2: _Generic((max), \
|
||||
Vector2: Vector2Clamp, \
|
||||
default: tgrarted), \
|
||||
default: rl_tgempty \
|
||||
), \
|
||||
default: _Generic((max), \
|
||||
default: Vector2ClampValue)), \
|
||||
default: Vector2ClampValue \
|
||||
) \
|
||||
), \
|
||||
Vector3: _Generic((min), \
|
||||
Vector3: _Generic((max), \
|
||||
Vector3: Vector3Clamp, \
|
||||
default: tgrarted), \
|
||||
default: rl_tgempty \
|
||||
), \
|
||||
default: _Generic((max), \
|
||||
default: Vector3ClampValue)), \
|
||||
default: Vector3ClampValue \
|
||||
) \
|
||||
), \
|
||||
default: _Generic((min), \
|
||||
default: _Generic((max), \
|
||||
default: Clamp)))(val, min, max)
|
||||
default: Clamp \
|
||||
) \
|
||||
) \
|
||||
) (val, min, max)
|
||||
|
||||
#define RLLerp(a, b, amount) _Generic((a), \
|
||||
Vector2: _Generic((b), \
|
||||
Vector2: Vector2Lerp, \
|
||||
default: tgrarted), \
|
||||
default: rl_tgempty \
|
||||
), \
|
||||
Vector3: _Generic((b), \
|
||||
Vector3: Vector3Lerp, \
|
||||
default: tgrarted), \
|
||||
default: rl_tgempty \
|
||||
), \
|
||||
Vector4: _Generic((b), \
|
||||
Vector4: Vector4Lerp, \
|
||||
default: tgrarted), \
|
||||
default: rl_tgempty \
|
||||
), \
|
||||
default: _Generic((b), \
|
||||
default: Lerp))(a, b, amount)
|
||||
default: Lerp \
|
||||
) \
|
||||
) (a, b, amount)
|
||||
|
||||
#define VectorZero(v) _Generic((v), \
|
||||
Vector2: Vector2Zero, \
|
||||
Vector3: Vector3Zero, \
|
||||
Vector4: Vector4Zero)()
|
||||
Vector4: Vector4Zero \
|
||||
) ()
|
||||
|
||||
#define VectorOne(v) _Generic((v), \
|
||||
Vector2: Vector2One, \
|
||||
Vector3: Vector3One, \
|
||||
Vector4: Vector4One)()
|
||||
Vector4: Vector4One \
|
||||
) ()
|
||||
|
||||
#define VectorAdd(v, x) _Generic((v), \
|
||||
Vector2: _Generic((x), \
|
||||
Vector2: Vector2Add, \
|
||||
default: Vector2AddValue), \
|
||||
default: Vector2AddValue \
|
||||
), \
|
||||
Vector3: _Generic((x), \
|
||||
Vector3: Vector3Add, \
|
||||
default: Vector3AddValue), \
|
||||
default: Vector3AddValue \
|
||||
), \
|
||||
Vector4: _Generic((x), \
|
||||
Vector4: Vector4Add, \
|
||||
default: Vector4AddValue))(v, x)
|
||||
default: Vector4AddValue \
|
||||
) \
|
||||
) (v, x)
|
||||
|
||||
#define VectorSubtract(v, x) _Generic((v), \
|
||||
Vector2: _Generic((x), \
|
||||
Vector2: Vector2Subtract, \
|
||||
default: Vector2SubtractValue), \
|
||||
default: Vector2SubtractValue \
|
||||
), \
|
||||
Vector3: _Generic((x), \
|
||||
Vector3: Vector3Subtract, \
|
||||
default: Vector3SubtractValue), \
|
||||
default: Vector3SubtractValue \
|
||||
), \
|
||||
Vector4: _Generic((x), \
|
||||
Vector4: Vector4Subtract, \
|
||||
default: Vector4SubtractValue))(v, x)
|
||||
default: Vector4SubtractValue \
|
||||
) \
|
||||
) (v, x)
|
||||
|
||||
#define VectorLength(v) _Generic((v), \
|
||||
Vector2: Vector2Length, \
|
||||
Vector3: Vector3Length, \
|
||||
Vector4: Vector4Length)(v)
|
||||
Vector4: Vector4Length \
|
||||
) (v)
|
||||
|
||||
#define VectorLengthSqr(v) _Generic((v), \
|
||||
Vector2: Vector2LengthSqr, \
|
||||
Vector3: Vector3LengthSqr, \
|
||||
Vector4: Vector4LengthSqr)(v)
|
||||
Vector4: Vector4LengthSqr \
|
||||
) (v)
|
||||
|
||||
#define VectorDotProduct(v1, v2) _Generic((v1), \
|
||||
Vector2: _Generic((v2), \
|
||||
Vector2: Vector2DotProduct, \
|
||||
default: tgrarted), \
|
||||
default: rl_tgempty \
|
||||
), \
|
||||
Vector3: _Generic((v2), \
|
||||
Vector3: Vector3DotProduct, \
|
||||
default: tgrarted), \
|
||||
default: rl_tgempty \
|
||||
), \
|
||||
Vector4: _Generic((v2), \
|
||||
Vector4: Vector4DotProduct, \
|
||||
default: tgrarted), \
|
||||
default: tgrarted)(v1, v2)
|
||||
default: rl_tgempty \
|
||||
) \
|
||||
) (v1, v2)
|
||||
|
||||
#define VectorDistance(v1, v2) _Generic((v1), \
|
||||
Vector2: _Generic((v2), \
|
||||
Vector2: Vector2Distance, \
|
||||
default: tgrarted), \
|
||||
default: rl_tgempty \
|
||||
), \
|
||||
Vector3: _Generic((v2), \
|
||||
Vector3: Vector3Distance, \
|
||||
default: tgrarted), \
|
||||
default: rl_tgempty \
|
||||
), \
|
||||
Vector4: _Generic((v2), \
|
||||
Vector4: Vector4Distance, \
|
||||
default: tgrarted), \
|
||||
default: tgrarted)(v1, v2)
|
||||
default: rl_tgempty \
|
||||
) \
|
||||
) (v1, v2)
|
||||
|
||||
#define VectorDistanceSqr(v1, v2) _Generic((v1), \
|
||||
Vector2: _Generic((v2), \
|
||||
Vector2: Vector2DistanceSqr, \
|
||||
default: tgrarted), \
|
||||
default: rl_tgempty \
|
||||
), \
|
||||
Vector3: _Generic((v2), \
|
||||
Vector3: Vector3DistanceSqr, \
|
||||
default: tgrarted), \
|
||||
default: rl_tgempty \
|
||||
), \
|
||||
Vector4: _Generic((v2), \
|
||||
Vector4: Vector4DistanceSqr, \
|
||||
default: tgrarted), \
|
||||
default: tgrarted)(v1, v2)
|
||||
default: rl_tgempty \
|
||||
) \
|
||||
) (v1, v2)
|
||||
|
||||
#define VectorAngle(v1, v2) _Generic((v1), \
|
||||
Vector2: _Generic((v2), \
|
||||
Vector2: Vector2Angle, \
|
||||
default: tgrarted), \
|
||||
default: rl_tgempty \
|
||||
), \
|
||||
Vector3: _Generic((v2), \
|
||||
Vector3: Vector3Angle, \
|
||||
default: tgrarted))(v1, v2)
|
||||
default: rl_tgempty \
|
||||
) \
|
||||
) (v1, v2)
|
||||
|
||||
#define VectorScale(v, scalar) _Generic((v), \
|
||||
Vector2: Vector2Scale, \
|
||||
Vector3: Vector3Scale, \
|
||||
Vector4: Vector4Scale)(v, scalar)
|
||||
Vector4: Vector4Scale \
|
||||
) (v, scalar)
|
||||
|
||||
#define VectorMultiply(v1, v2) _Generic((v1), \
|
||||
Vector2: _Generic((v2), \
|
||||
Vector2: Vector2Multiply, \
|
||||
default: tgrarted), \
|
||||
default: rl_tgempty \
|
||||
), \
|
||||
Vector3: _Generic((v2), \
|
||||
Vector3: Vector3Multiply, \
|
||||
default: tgrarted), \
|
||||
default: rl_tgempty \
|
||||
), \
|
||||
Vector4: _Generic((v2), \
|
||||
Vector4: Vector4Multiply, \
|
||||
default: tgrarted))(v1, v2)
|
||||
default: rl_tgempty \
|
||||
) \
|
||||
) (v1, v2)
|
||||
|
||||
#define VectorNegate(v) _Generic((v), \
|
||||
Vector2: Vector2Negate, \
|
||||
Vector3: Vector3Negate, \
|
||||
Vector4: Vector4Negate)(v)
|
||||
Vector4: Vector4Negate \
|
||||
) (v)
|
||||
|
||||
#define VectorDivide(v1, v2) _Generic((v1), \
|
||||
Vector2: _Generic((v2), \
|
||||
Vector2: Vector2Divide, \
|
||||
default: tgrarted), \
|
||||
default: rl_tgempty \
|
||||
), \
|
||||
Vector3: _Generic((v2), \
|
||||
Vector3: Vector3Divide, \
|
||||
default: tgrarted), \
|
||||
default: rl_tgempty \
|
||||
), \
|
||||
Vector4: _Generic((v2), \
|
||||
Vector4: Vector4Divide, \
|
||||
default: tgrarted))(v1, v2)
|
||||
default: rl_tgempty \
|
||||
) \
|
||||
) (v1, v2)
|
||||
|
||||
#define VectorNormalize(v) _Generic((v), \
|
||||
Vector2: Vector2Normalize, \
|
||||
Vector3: Vector3Normalize, \
|
||||
Vector4: Vector4Normalize)(v)
|
||||
Vector4: Vector4Normalize \
|
||||
) (v)
|
||||
|
||||
#define VectorTransform(v, m) _Generic((v), \
|
||||
Vector2: Vector2Transform, \
|
||||
Vector3: Vector3Transform)(v, m)
|
||||
Vector3: Vector3Transform \
|
||||
) (v, m)
|
||||
|
||||
#define VectorReflect(v, normal) _Generic((v), \
|
||||
Vector2: _Generic((normal), \
|
||||
Vector2: Vector2Reflect, \
|
||||
default: tgrarted), \
|
||||
default: rl_tgempty \
|
||||
), \
|
||||
Vector3: _Generic((normal), \
|
||||
Vector3: Vector3Reflect, \
|
||||
default: tgrarted))(v, normal)
|
||||
default: rl_tgempty \
|
||||
) \
|
||||
) (v, normal)
|
||||
|
||||
#define VectorMin(v1, v2) _Generic((v1), \
|
||||
Vector2: _Generic((v2), \
|
||||
Vector2: Vector2Min, \
|
||||
default: tgrarted), \
|
||||
default: rl_tgempty \
|
||||
), \
|
||||
Vector3: _Generic((v2), \
|
||||
Vector3: Vector3Min, \
|
||||
default: tgrarted), \
|
||||
default: rl_tgempty \
|
||||
), \
|
||||
Vector4: _Generic((v2), \
|
||||
Vector4: Vector4Min, \
|
||||
default: tgrarted))(v1, v2)
|
||||
default: rl_tgempty \
|
||||
) \
|
||||
) (v1, v2)
|
||||
|
||||
#define VectorMax(v1, v2) _Generic((v1), \
|
||||
Vector2: _Generic((v2), \
|
||||
Vector2: Vector2Max, \
|
||||
default: tgrarted), \
|
||||
default: rl_tgempty \
|
||||
), \
|
||||
Vector3: _Generic((v2), \
|
||||
Vector3: Vector3Max, \
|
||||
default: tgrarted), \
|
||||
default: rl_tgempty \
|
||||
), \
|
||||
Vector4: _Generic((v2), \
|
||||
Vector4: Vector4Max, \
|
||||
default: tgrarted))(v1, v2)
|
||||
default: rl_tgempty \
|
||||
) \
|
||||
) (v1, v2)
|
||||
|
||||
/*
|
||||
* Macro disabled due to too big a difference in rotation semantics.
|
||||
#define VectorRotate(v, f) _Generic((f), \
|
||||
Quaternion: _Generic((v), \
|
||||
Vector3: Vector3RotateByQuaternion, \
|
||||
default: tgrarted\
|
||||
default: rl_tgempty\
|
||||
), \
|
||||
default: _Generic((v), \
|
||||
Vector2: Vector2Rotate, \
|
||||
default: tgrarted \
|
||||
default: rl_tgempty \
|
||||
)\
|
||||
) (v, f)
|
||||
*/
|
||||
|
|
@ -230,23 +293,32 @@ void tgrarted(void);
|
|||
#define VectorMoveTowards(v, target, d) _Generic((v), \
|
||||
Vector2: _Generic((target), \
|
||||
Vector2: Vector2MoveTowards, \
|
||||
default: tgrarted), \
|
||||
default: rl_tgempty \
|
||||
), \
|
||||
Vector3: _Generic((target), \
|
||||
Vector3: Vector3MoveTowards, \
|
||||
default: tgrarted), \
|
||||
default: rl_tgempty \
|
||||
), \
|
||||
Vector4: _Generic((target), \
|
||||
Vector4: Vector4MoveTowards, \
|
||||
default: tgrarted))(v, target, d)
|
||||
default: rl_tgempty \
|
||||
) \
|
||||
) (v, target, d)
|
||||
|
||||
#define VectorInvert(v) _Generic((v), \
|
||||
Vector2: Vector2Invert, \
|
||||
Vector3: Vector3Invert, \
|
||||
Vector4: Vector4Invert)(v)
|
||||
Vector4: Vector4Invert \
|
||||
) (v)
|
||||
|
||||
#define VectorRefract(v, n, ratio) _Generic((v), \
|
||||
Vector2: _Generic((n), \
|
||||
Vector2: Vector2Refract, \
|
||||
default: tgrarted), \
|
||||
default: rl_tgempty \
|
||||
), \
|
||||
Vector3: _Generic((n), \
|
||||
Vector3: Vector3Refract, \
|
||||
default: tgrarted))(v, n, ratio)
|
||||
default: rl_tgempty \
|
||||
) \
|
||||
) (v, n, ratio)
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user