RUNNER

Source

C / raylib · shader by xordev

Runner's C source open in Kate on a desktop.
main.cdownload ↓
#include <raylib.h>
#include <rcamera.h>
#define K(a,b) ((IsKeyDown(KEY_##a)-IsKeyDown(KEY_##b))*GetFrameTime())
int main() {
    SetConfigFlags(FLAG_WINDOW_RESIZABLE | FLAG_VSYNC_HINT); InitWindow(1280, 720, "Runner");
    if (!IsWindowReady()) return 1;
    Shader s = LoadShaderFromMemory(0,
        "#version 330\n"
        "uniform mat4 V,mvp;out vec4 o;"
        "void main(){vec2 r=2/vec2(mvp[0][0],-mvp[1][1]);vec3 q,p,v=normalize(gl_FragCoord.xyz*2-r.xyy);o=vec4(0);"
        "for(float z=0,d,i,l=0;l++<30;z+=d,o+=.1*(vec4(4,2,1,0)-tanh(p.y+4))*d/(1+z)){"
        "p=(z*v-V[3].xyz)*mat3(V);for(q=p,d=p.y,i=40;i>.01;i*=.2){q=i*.9-abs(mod(q,i+i)-i);"
        "d=max(d,min(min(q.x,q.y),q.z));q.xz*=mat2(cos(9),-sin(9),sin(9),cos(9));}}o=tanh(o*o);o.a=1;}");
    int v = GetShaderLocation(s, "V");
    if (v < 0) return 1;
    Camera c = {{-5,-2,-5}, {-5,-2,-6}, {0,1,0}, 0, 0};
    SetTargetFPS(60);
    while (!WindowShouldClose()) {
        if (IsWindowFocused()) {
            CameraPitch(&c, K(I,K)*PI/2, 0, 0, 1);
            CameraYaw(&c, K(J,L)*PI/2, 0); CameraRoll(&c, K(E,Q)*PI/2);
            CameraMoveForward(&c, K(W,S)*5.4f, 0);
            CameraMoveRight(&c, K(D,A)*5.4f, 0);
            CameraMoveUp(&c, K(SPACE,LEFT_SHIFT)*5.4f);
        }
        SetShaderValueMatrix(s, v, GetCameraMatrix(c));
        BeginDrawing(); BeginShaderMode(s);
        DrawRectangle(0, 0, GetScreenWidth(), GetScreenHeight(), WHITE);
        EndShaderMode(); EndDrawing();
    }
}