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