#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();
}
}