diff --git a/nob.c b/nob.c index 70fc102..5df918b 100644 --- a/nob.c +++ b/nob.c @@ -8,7 +8,7 @@ int main(int argc, char **argv) // COMPILE WITH RAYLIB Nob_Cmd cmd = {0}; // SRC FILE - nob_cmd_append(&cmd, "gcc", "src/main.c", "-ggdb"); + nob_cmd_append(&cmd, "gcc", "src/main.c", "src/Items.c", "-ggdb"); nob_cmd_append(&cmd, "-I", "./raylib-src/raylib-5.0_linux_amd64/include/"); nob_cmd_append(&cmd, "-L", "./raylib-src/raylib-5.0_linux_amd64/lib/", "-L", "./raylib-src/old-raygui-src/", "-l:libraylib.a", "-l:raygui.so", "-lm"); diff --git a/src/Items.c b/src/Items.c new file mode 100644 index 0000000..1e29444 --- /dev/null +++ b/src/Items.c @@ -0,0 +1,86 @@ +#include +#include + +#include "raylib.h" +#include "raymath.h" +#include "config.h" + +static float clampf(float value, float min, float max) { + return (value < min) ? min : (value > max) ? max : value; +} + +static float ilerpf(float min, float max, float value) { + return (value - min) / (max - min); +} + +static float lerpf(float min, float max, float value) { + return min + value * (max - min); +} + +static void slider(int id, Rectangle bounds, float *value, float min, float max, const char *label, bool show, float change_value) { + bounds.x += MARGIN; + //bounds.y += MARGIN; + bounds.width -= 2 * MARGIN; + + DrawRectangle( + bounds.x, + bounds.y + bounds.height * 0.5f - SLIDER_THICKNESS * 0.5f, + bounds.width, + SLIDER_THICKNESS, + SLIDER_COLOR + ); + + assert(min <= max); + float grip_value = ilerpf(min, max, *value) * bounds.width; + + float grip_pos_x = bounds.x + grip_value - SLIDER_GRIP_SIZE; + DrawRectangle( + grip_pos_x, + bounds.y + bounds.height * 0.5f - SLIDER_GRIP_SIZE, + SLIDER_GRIP_SIZE * 2.0f, + SLIDER_GRIP_SIZE * 2.0f, + SLIDER_GRIP_COLOR + ); + + DrawText( + label, + bounds.x - MARGIN - MeasureText(label, FONT_SIZE), + bounds.y + bounds.height * 0.5f - FONT_SIZE * 0.5f, + FONT_SIZE, + DARKGRAY + ); + + if (show) { + DrawText( + TextFormat("%.2f", *value - change_value), + bounds.x + bounds.width + MARGIN, + bounds.y + bounds.height * 0.5f - FONT_SIZE * 0.5f, + FONT_SIZE, + DARKGRAY + ); + } + + if (IsMouseButtonDown(MOUSE_BUTTON_LEFT)) { + Vector2 mouse_position = GetMousePosition(); + if (active_id < 0) { + Rectangle grip_rect = { + grip_pos_x, + bounds.y + bounds.height * 0.5f - SLIDER_GRIP_SIZE, + SLIDER_GRIP_SIZE * 2.0f, + SLIDER_GRIP_SIZE * 2.0f + }; + if (CheckCollisionPointRec(mouse_position, grip_rect)) { + active_id = id; + } + } else if (active_id == id) { + float grip_min = bounds.x; + float grip_max = bounds.x + bounds.width; + float xf = clampf(mouse_position.x, grip_min, grip_max); + xf = ilerpf(grip_min, grip_max, xf); + xf = lerpf(min, max, xf); + *value = xf; + } + } else if (active_id == id) { + active_id = -1; + } +} diff --git a/src/config.h b/src/config.h new file mode 100644 index 0000000..c497873 --- /dev/null +++ b/src/config.h @@ -0,0 +1,17 @@ +#ifndef CONFIG_H_ +#define CONFIG_H_ + +#define FONT_SIZE 30 +#define SLIDER_COLOR DARKGRAY +#define SLIDER_GRIP_COLOR LIGHTGRAY +#define SLIDER_THICKNESS 20.0f +#define SLIDER_GRIP_SIZE 10.0f + +#define MARGIN (FONT_SIZE * 1.0f) + +static int active_id = -1; + + + + +#endif // CONFIG_H_ diff --git a/src/main.c b/src/main.c index e7cb30e..c381342 100644 --- a/src/main.c +++ b/src/main.c @@ -1,6 +1,9 @@ // DoppelspaltApp.c #include "raylib.h" #include "raymath.h" +#include "config.h" + +#include "Items.c" #include #include @@ -15,98 +18,6 @@ typedef struct { AppState state = {50, 75, 90, 1.5, 40}; -static int active_id = -1; - - -#define FONT_SIZE 30 -#define SLIDER_COLOR DARKGRAY -#define SLIDER_GRIP_COLOR LIGHTGRAY -#define SLIDER_THICKNESS 20.0f -#define SLIDER_GRIP_SIZE 10.0f - -#define MARGIN (FONT_SIZE * 1.0f) - -static float clampf(float value, float min, float max) { - return (value < min) ? min : (value > max) ? max : value; -} - -static float ilerpf(float min, float max, float value) { - return (value - min) / (max - min); -} - -static float lerpf(float min, float max, float value) { - return min + value * (max - min); -} - -static void slider(int id, Rectangle bounds, float *value, float min, float max, const char *label, bool show, float change_value) { - bounds.x += MARGIN; - //bounds.y += MARGIN; - bounds.width -= 2 * MARGIN; - - DrawRectangle( - bounds.x, - bounds.y + bounds.height * 0.5f - SLIDER_THICKNESS * 0.5f, - bounds.width, - SLIDER_THICKNESS, - SLIDER_COLOR - ); - - assert(min <= max); - float grip_value = ilerpf(min, max, *value) * bounds.width; - - float grip_pos_x = bounds.x + grip_value - SLIDER_GRIP_SIZE; - DrawRectangle( - grip_pos_x, - bounds.y + bounds.height * 0.5f - SLIDER_GRIP_SIZE, - SLIDER_GRIP_SIZE * 2.0f, - SLIDER_GRIP_SIZE * 2.0f, - SLIDER_GRIP_COLOR - ); - - DrawText( - label, - bounds.x - MARGIN - MeasureText(label, FONT_SIZE), - bounds.y + bounds.height * 0.5f - FONT_SIZE * 0.5f, - FONT_SIZE, - DARKGRAY - ); - - if (show) { - DrawText( - TextFormat("%.2f", *value - change_value), - bounds.x + bounds.width + MARGIN, - bounds.y + bounds.height * 0.5f - FONT_SIZE * 0.5f, - FONT_SIZE, - DARKGRAY - ); - } - - if (IsMouseButtonDown(MOUSE_BUTTON_LEFT)) { - Vector2 mouse_position = GetMousePosition(); - if (active_id < 0) { - Rectangle grip_rect = { - grip_pos_x, - bounds.y + bounds.height * 0.5f - SLIDER_GRIP_SIZE, - SLIDER_GRIP_SIZE * 2.0f, - SLIDER_GRIP_SIZE * 2.0f - }; - if (CheckCollisionPointRec(mouse_position, grip_rect)) { - active_id = id; - } - } else if (active_id == id) { - float grip_min = bounds.x; - float grip_max = bounds.x + bounds.width; - float xf = clampf(mouse_position.x, grip_min, grip_max); - xf = ilerpf(grip_min, grip_max, xf); - xf = lerpf(min, max, xf); - *value = xf; - } - } else if (active_id == id) { - active_id = -1; - } -} - - void DrawKugelwelle(int x, int y, int breite, int hoehe, AppState* state, Color color) { int s0; double phi = (state->winkel - 90) * PI / 180.0; @@ -140,7 +51,6 @@ void DrawWavesFromSlits(int screenWidth, int screenHeight, AppState* state) { DrawKugelwelle(xSpalt, ySpalt2, sizeFeld, screenHeight, state, BLACK); } - void DrawInterferencePoints(int breite, int hoehe, Color color) {