This commit is contained in:
Tobias Berger 2021-11-18 13:25:50 +01:00
parent 18f2b62f37
commit c6308cc532
3 changed files with 78 additions and 45 deletions

5
.vscode/settings.json vendored Normal file
View file

@ -0,0 +1,5 @@
{
"C_Cpp.default.defines": [
"__DEBUG"
]
}

4
.vscode/tasks.json vendored
View file

@ -12,7 +12,7 @@
{ "value": "-ooutput.exe", "quoting": "strong" }, { "value": "-ooutput.exe", "quoting": "strong" },
{ "value": "-bench", "quoting": "strong" }, { "value": "-bench", "quoting": "strong" },
{ "value": "-v", "quoting": "strong" }, { "value": "-v", "quoting": "strong" },
{ "value": "-g", "quoting": "strong" }, { "value": "-b", "quoting": "strong" },
{ "value": "-Iinclude", "quoting": "strong" }, { "value": "-Iinclude", "quoting": "strong" },
{ "value": "-Llib", "quoting": "strong" }, { "value": "-Llib", "quoting": "strong" },
{ "value": "-stdc99", "quoting": "strong" }, { "value": "-stdc99", "quoting": "strong" },
@ -25,6 +25,7 @@
{ "value": "-luser32", "quoting": "strong" }, { "value": "-luser32", "quoting": "strong" },
{ "value": "-lshell32", "quoting": "strong" }, { "value": "-lshell32", "quoting": "strong" },
{ "value": "-lwinmm", "quoting": "strong" }, { "value": "-lwinmm", "quoting": "strong" },
{ "value": "-D__DEBUG", "quoting": "strong" },
], ],
"group": { "group": {
"kind": "build", "kind": "build",
@ -52,6 +53,7 @@
{ "value": "-luser32", "quoting": "strong" }, { "value": "-luser32", "quoting": "strong" },
{ "value": "-lshell32", "quoting": "strong" }, { "value": "-lshell32", "quoting": "strong" },
{ "value": "-lwinmm", "quoting": "strong" }, { "value": "-lwinmm", "quoting": "strong" },
{ "value": "-Wl,--subsystem,windows", "quoting": "strong" },
], ],
"group": "build", "group": "build",
} }

View file

@ -7,7 +7,15 @@
#define INITIAL_SCREEN_HEIGHT 900 #define INITIAL_SCREEN_HEIGHT 900
#define SCREEN_SCALE 8 #define SCREEN_SCALE 8
// #define NOISE_PERIOD 4 #define CAMERA_SPEED (SCREEN_SCALE * 3.0f)
/* Controls
UP/DOWN - Change octaves (Min 1)
LEFT/RIGHT - Change period (Min 1)
SPACE - Change noise type
R - Reset
WASD - Move camera
*/
int main(void) int main(void)
{ {
@ -15,18 +23,21 @@ int main(void)
//-------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------
int noisePeriod = 4; int noisePeriod = 4;
#if defined(__DEBUG)
SetTraceLogLevel(LOG_ALL); SetTraceLogLevel(LOG_ALL);
#else
SetTraceLogLevel(LOG_NONE);
#endif
SetConfigFlags(FLAG_WINDOW_RESIZABLE); SetConfigFlags(FLAG_WINDOW_RESIZABLE);
InitWindow(INITIAL_SCREEN_WIDTH, INITIAL_SCREEN_HEIGHT, "raylib [core] example - basic window"); InitWindow(INITIAL_SCREEN_WIDTH, INITIAL_SCREEN_HEIGHT, "raylib [core] example - basic window");
// SetTargetFPS(5); fnl_state fnlState = fnlCreateState();
fnlState.seed = 0;
fnl_state state = fnlCreateState(); fnlState.frequency = 1.0f / (float)noisePeriod;
state.seed = 0; fnlState.fractal_type = FNL_FRACTAL_FBM;
state.frequency = 1.0f / (float)noisePeriod; fnlState.octaves = 1;
state.fractal_type = FNL_FRACTAL_FBM; fnlState.noise_type = 0;
state.octaves = 1;
state.noise_type = 0;
int virtualScreenWidth = GetScreenWidth() / SCREEN_SCALE; int virtualScreenWidth = GetScreenWidth() / SCREEN_SCALE;
int virtualScreenHeight = GetScreenHeight() / SCREEN_SCALE; int virtualScreenHeight = GetScreenHeight() / SCREEN_SCALE;
@ -35,8 +46,7 @@ int main(void)
*target = LoadRenderTexture(virtualScreenWidth, virtualScreenHeight); *target = LoadRenderTexture(virtualScreenWidth, virtualScreenHeight);
Camera2D camera = {0}; Vector2 offset = {0.0f, 0.0f};
camera.zoom = 1.0f;
Rectangle sourceRec = {0.0f, Rectangle sourceRec = {0.0f,
0.0f, 0.0f,
@ -49,8 +59,6 @@ int main(void)
//-------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------
double offset = 0.0;
// Main game loop // Main game loop
while (!WindowShouldClose()) // Detect window close button or ESC key while (!WindowShouldClose()) // Detect window close button or ESC key
{ {
@ -58,9 +66,9 @@ int main(void)
//---------------------------------------------------------------------------------- //----------------------------------------------------------------------------------
if (IsKeyPressed(KEY_SPACE)) if (IsKeyPressed(KEY_SPACE))
{ {
state.noise_type++; fnlState.noise_type++;
state.noise_type %= (FNL_NOISE_VALUE + 1); fnlState.noise_type %= (FNL_NOISE_VALUE + 1);
TraceLog(LOG_INFO, TextFormat("Noisetype: %i", state.noise_type)); TraceLog(LOG_INFO, TextFormat("Noisetype: %i", fnlState.noise_type));
} }
if (IsWindowResized()) if (IsWindowResized())
@ -85,17 +93,17 @@ int main(void)
if (IsKeyPressed(KEY_UP)) if (IsKeyPressed(KEY_UP))
{ {
state.octaves++; fnlState.octaves++;
} }
if (IsKeyPressed(KEY_DOWN)) if (IsKeyPressed(KEY_DOWN))
{ {
state.octaves--; fnlState.octaves--;
} }
if (IsKeyPressed(KEY_UP) || IsKeyPressed(KEY_DOWN)) if (IsKeyPressed(KEY_UP) || IsKeyPressed(KEY_DOWN))
{ {
state.octaves = state.octaves <= 0 ? 1 : state.octaves; fnlState.octaves = fnlState.octaves <= 0 ? 1 : fnlState.octaves;
TraceLog(LOG_INFO, TextFormat("Octaves: %i", state.octaves)); TraceLog(LOG_INFO, TextFormat("Octaves: %i", fnlState.octaves));
} }
if (IsKeyPressed(KEY_LEFT)) if (IsKeyPressed(KEY_LEFT))
@ -109,7 +117,7 @@ int main(void)
if (IsKeyPressed(KEY_LEFT) || IsKeyPressed(KEY_RIGHT)) if (IsKeyPressed(KEY_LEFT) || IsKeyPressed(KEY_RIGHT))
{ {
noisePeriod = noisePeriod <= 0 ? 1 : noisePeriod; noisePeriod = noisePeriod <= 0 ? 1 : noisePeriod;
state.frequency = 1.0f / (float)noisePeriod; fnlState.frequency = 1.0f / (float)noisePeriod;
TraceLog(LOG_INFO, TextFormat("Noise period: %i", noisePeriod)); TraceLog(LOG_INFO, TextFormat("Noise period: %i", noisePeriod));
} }
@ -117,13 +125,27 @@ int main(void)
if (IsKeyPressed(KEY_R)) if (IsKeyPressed(KEY_R))
{ {
noisePeriod = 4; noisePeriod = 4;
state.frequency = 1.0f / (float)noisePeriod; fnlState.frequency = 1.0f / (float)noisePeriod;
state.octaves = 1; fnlState.octaves = 1;
} }
float frameTime = GetFrameTime(); if (IsKeyDown(KEY_W))
offset += (double)frameTime * 10.0 * 0; {
offset.y -= GetFrameTime() * CAMERA_SPEED;
}
if (IsKeyDown(KEY_S))
{
offset.y += GetFrameTime() * CAMERA_SPEED;
}
if (IsKeyDown(KEY_A))
{
offset.x -= GetFrameTime() * CAMERA_SPEED;
}
if (IsKeyDown(KEY_D))
{
offset.x += GetFrameTime() * CAMERA_SPEED;
}
//---------------------------------------------------------------------------------- //----------------------------------------------------------------------------------
@ -138,9 +160,13 @@ int main(void)
{ {
for (int y = 0; y < virtualScreenHeight; y++) for (int y = 0; y < virtualScreenHeight; y++)
{ {
int noise = (fnlGetNoise2D(&state, ((double)x) + (int)offset, ((double)y) + (int)offset / 2.0) + 1.0) / 2.0 * 255.0; float raw_noise = fnlGetNoise2D(&fnlState, (float)x + floorf(offset.x), (float)y + floorf(offset.y));
float noise = (raw_noise + 1.0f) / 2.0f * 255.0f;
DrawPixel(x, y, (Color){255 - noise, noise, noise, 255}); const unsigned char r = noise >= 170 ? 255 : (unsigned char)(noise * 1.5f);
const unsigned char g = 255;
const unsigned char b = 255;
DrawPixel(x, y, (Color){r, g, b, 255});
} }
} }
@ -150,7 +176,7 @@ int main(void)
{ {
ClearBackground(RAYWHITE); ClearBackground(RAYWHITE);
DrawTexturePro(target->texture, sourceRec, destRec, (Vector2){0.0f, 0.0f}, 0.0f, WHITE); DrawTexturePro(target->texture, sourceRec, destRec, (Vector2){0.0f, 0.0f}, 0.0f, WHITE);
char const *drawText = TextFormat("Press [SPACEBAR] to cycle through different noise algorithms, arrow keys to control variables\n%i FPS\nNoise Period (Frequency): %i (%f)\nNoise Octaves: %i", GetFPS(), noisePeriod, state.frequency, state.octaves); char const *drawText = TextFormat("Press [SPACEBAR] to cycle through different noise algorithms, arrow keys to control variables\n%i FPS\nNoise Period (Frequency): %i (%f)\nNoise Octaves: %i", GetFPS(), noisePeriod, fnlState.frequency, fnlState.octaves);
DrawRectangle(0, 0, MeasureText(drawText, 20), (int)(20 * 5.5), WHITE); DrawRectangle(0, 0, MeasureText(drawText, 20), (int)(20 * 5.5), WHITE);
DrawText(drawText, 0, 0, 20, BLACK); DrawText(drawText, 0, 0, 20, BLACK);
} }