A game engine for top-down 2D RPG games.
rpg
game-engine
raylib
c99
1#include "keraforge/math.h"
2#include <keraforge.h>
3#include <raylib.h>
4#include <raymath.h>
5
6
7#define x(T) \
8 struct kf_vec2(T) kf_normalize_vec2##T(struct kf_vec2(T) v) \
9 { \
10 Vector2 v2 = Vector2Normalize((Vector2){v.x, v.y}); \
11 return (struct kf_vec2(T)){v2.x, v2.y}; \
12 }
13_kf_mathdef(x)
14#undef x
15
16#define x(T) \
17 struct kf_vec2(T) kf_add_vec2##T(struct kf_vec2(T) a, struct kf_vec2(T) b) { return (struct kf_vec2(T)){a.x+b.x, a.y+b.y}; } \
18 struct kf_vec2(T) kf_sub_vec2##T(struct kf_vec2(T) a, struct kf_vec2(T) b) { return (struct kf_vec2(T)){a.x-b.x, a.y-b.y}; } \
19 struct kf_vec2(T) kf_mul_vec2##T(struct kf_vec2(T) a, struct kf_vec2(T) b) { return (struct kf_vec2(T)){a.x*b.x, a.y*b.y}; } \
20 struct kf_vec2(T) kf_div_vec2##T(struct kf_vec2(T) a, struct kf_vec2(T) b) { return (struct kf_vec2(T)){a.x/b.x, a.y/b.y}; } \
21 struct kf_vec2(T) kf_addval_vec2##T(struct kf_vec2(T) a, T val) { return (struct kf_vec2(T)){a.x+val, a.y+val}; } \
22 struct kf_vec2(T) kf_subval_vec2##T(struct kf_vec2(T) a, T val) { return (struct kf_vec2(T)){a.x-val, a.y-val}; } \
23 struct kf_vec2(T) kf_mulval_vec2##T(struct kf_vec2(T) a, T val) { return (struct kf_vec2(T)){a.x*val, a.y*val}; } \
24 struct kf_vec2(T) kf_divval_vec2##T(struct kf_vec2(T) a, T val) { return (struct kf_vec2(T)){a.x/val, a.y/val}; } \
25 struct kf_vec2(T) kf_vec2##T##_x(struct kf_vec2(T) a) { return (struct kf_vec2(T)){a.x, 0}; } \
26 struct kf_vec2(T) kf_vec2##T##_y(struct kf_vec2(T) a) { return (struct kf_vec2(T)){0, a.y}; }
27_kf_mathdef(x)
28#undef x
29
30
31static
32int _kf_isdir(enum kf_direction dir)
33{
34 return dir >= kf_north && dir <= kf_west;
35}
36
37enum kf_direction kf_rotatecw(enum kf_direction dir)
38{
39 return _kf_isdir(dir+1) ? kf_north : dir+1;
40}
41
42enum kf_direction kf_rotateccw(enum kf_direction dir)
43{
44 return _kf_isdir(dir-1) ? kf_west : dir-1;
45}
46
47struct kf_vec2(f32) kf_dtov2f(enum kf_direction dir)
48{
49 switch (dir) {
50 case kf_north:
51 return (struct kf_vec2(f32)){ -1, 0 };
52 case kf_east:
53 return (struct kf_vec2(f32)){ 0, 1 };
54 case kf_south:
55 return (struct kf_vec2(f32)){ 1, 0 };
56 case kf_west:
57 return (struct kf_vec2(f32)){ 0, -1 };
58 }
59 return (struct kf_vec2(f32)){ 0, 0 };
60}