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}