vector2 vector2_next_step(vector2 origin, vector2 target) { if(vector2_equals(origin, target)) return origin; vector2 delta = vector2_subtract(target, origin); int abs_x = abs(delta.x); int abs_y = abs(delta.y); vector2 movement; if(abs_x > abs_y) //hay mas distancia en x, nos movemos en x movement = vector2_new(delta.x / abs_x, 0); else //hay mas distancia en y, nos movemos en y movement = vector2_new(0, delta.y / abs_y); return vector2_add(origin, movement); }
int vector2_within_map(vector2 v, vector2 map_limits) { return vector2_between(v, vector2_new(0,0), map_limits); }
vector2 vector2_new() { return vector2_new(0, 0); }
static int vector2_ctor(lua_State* L) { LuaStack stack(L); stack.remove(1); // Remove table return vector2_new(L); }