while (SDL_PollEvent(&event) > 0) { | |
if (event.type == SDL_EVENT_MOUSE_MOTION) { | |
static float dx_frac, dy_frac; | |
float dx, dy; | |
/* Accumulate new motion with previous sub-pixel motion */ | |
dx = event.motion.xrel + dx_frac; | |
dy = event.motion.yrel + dy_frac; | |
/* Split the integral and fractional motion, dx and dy will contain whole pixel deltas */ |
def nine_slice sprite | |
x = sprite.x | |
y = sprite.y | |
w = sprite.w | |
h = sprite.h | |
path = sprite.path | |
t_x = sprite.tile_x | |
t_y = sprite.tile_y | |
o_w = sprite.tile_w | |
o_h = sprite.tile_h |
The Gilbert–Johnson–Keerthi (GJK) distance algorithm is a method of determining the minimum distance between two convex sets. The algorithm's stability, speed which operates in near-constant time, and small storage footprint make it popular for realtime collision detection.
Unlike many other distance algorithms, it has no requirments on geometry data to be stored in any specific format, but instead relies solely on a support function to iteratively generate closer simplices to the correct answer using the Minkowski sum (CSO) of two convex shapes.
A week ago I was CC'd in on a thread about Linux packaging, and how to avoid doing it the wrong way (i.e. RPM, Deb, etc.). I've always used MojoSetup and I've never forced distributions to do any additional work, but this is still a new concept to a lot of people. Additionally, Amos suggested that I expand on Itch's FNA appendix, so here's a guide on how I package my games.
This is a bit of an expansion on my MAGFest 2016 presentation, which you can find here:
http://www.flibitijibibo.com/magfest2016/
https://www.youtube.com/watch?v=B83CWUh0Log
I would recommend looking at that first! After that, read on...
#define BINKGL_LIST \ | |
/* ret, name, params */ \ | |
GLE(void, LinkProgram, GLuint program) \ | |
GLE(void, GetProgramiv, GLuint program, GLenum pname, GLint *params) \ | |
GLE(GLuint, CreateShader, GLenum type) \ | |
GLE(void, ShaderSource, GLuint shader, GLsizei count, const GLchar* const *string, const GLint *length) \ | |
GLE(void, CompileShader, GLuint shader) \ | |
GLE(void, GetShaderiv, GLuint shader, GLenum pname, GLint *params) \ | |
GLE(void, GetShaderInfoLog, GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog) \ | |
GLE(void, DeleteShader, GLuint shader) \ |
// Copyright (c) 2021 Stoiko Todorov | |
// This work is licensed under the terms of the MIT license. | |
// For a copy, see https://opensource.org/licenses/MIT. | |
// What this function does: | |
// Rasterizes a single Field Of View octant on a grid, similar to the way | |
// field of view / line of sight / shadowcasting is implemented in some | |
// roguelikes. | |
// Uses rays to define visible volumes instead of tracing lines from origin | |
// to pixels. |