Boids simulation to test things out
This commit is contained in:
parent
05c86f8284
commit
50deef7c3d
1
.gitignore
vendored
1
.gitignore
vendored
@ -4,3 +4,4 @@
|
||||
/.idea/
|
||||
/sprites.o
|
||||
/dod
|
||||
/boids
|
||||
|
3
Makefile
3
Makefile
@ -14,6 +14,9 @@ sprites.o: sprites.c sprites.h lib.h
|
||||
dod: dod.c ./lib/libraylib.a
|
||||
$(CC) $(CFLAGS) -Iinclude/ -lm dod.c -o dod ./lib/libraylib.a
|
||||
|
||||
boids: boids.c lib.h ./lib/libraylib.a
|
||||
$(CC) $(CFLAGS) -Iinclude/ -lm boids.c -o boids ./lib/libraylib.a
|
||||
|
||||
run: all
|
||||
./main
|
||||
|
||||
|
29
base.c
Normal file
29
base.c
Normal file
@ -0,0 +1,29 @@
|
||||
#include "include/raylib.h"
|
||||
#include "include/raymath.h"
|
||||
#include <stdio.h>
|
||||
#include "lib.h"
|
||||
|
||||
#define SCREEN_WIDTH 1300
|
||||
#define SCREEN_HEIGHT 1000
|
||||
#define TARGET_FPS 60
|
||||
|
||||
|
||||
int main(void) {
|
||||
InitWindow(SCREEN_WIDTH, SCREEN_HEIGHT, "Boids");
|
||||
|
||||
SetTargetFPS(TARGET_FPS);
|
||||
|
||||
while (!WindowShouldClose()) {
|
||||
float dt = GetFrameTime();
|
||||
|
||||
// Update
|
||||
|
||||
BeginDrawing();
|
||||
{
|
||||
ClearBackground(RAYWHITE);
|
||||
}
|
||||
EndDrawing();
|
||||
}
|
||||
|
||||
CloseWindow();
|
||||
}
|
78
boids.c
Normal file
78
boids.c
Normal file
@ -0,0 +1,78 @@
|
||||
#include "include/raylib.h"
|
||||
#include "include/raymath.h"
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include "lib.h"
|
||||
|
||||
#define SCREEN_WIDTH 1300
|
||||
#define SCREEN_HEIGHT 1000
|
||||
#define TARGET_FPS 60
|
||||
#define NUM_BOIDS 16
|
||||
|
||||
const float max_speed = 200.0f;
|
||||
const float max_force = 0.1;
|
||||
|
||||
typedef struct Boid {
|
||||
Point position;
|
||||
Vector2 acceleration;
|
||||
Vector2 velocity;
|
||||
} Boid;
|
||||
|
||||
int main(void) {
|
||||
InitWindow(SCREEN_WIDTH, SCREEN_HEIGHT, "Boids");
|
||||
|
||||
SetTargetFPS(TARGET_FPS);
|
||||
|
||||
Boid *boids = calloc(NUM_BOIDS, sizeof(Boid));
|
||||
for (int i = 0; i < NUM_BOIDS; i++) {
|
||||
Boid *boid = &boids[i];
|
||||
int rand_x = GetRandomValue(0, SCREEN_WIDTH);
|
||||
int rand_y = GetRandomValue(0, SCREEN_HEIGHT);
|
||||
boid->position = (Vector2){rand_x, rand_y};
|
||||
int rand_vx = GetRandomValue(0, 100);
|
||||
int rand_vy = GetRandomValue(0, 100);
|
||||
boid->velocity = (Vector2){rand_vx * 0.01f, rand_vy * 0.01f};
|
||||
int rand_ax = GetRandomValue(0, 100);
|
||||
int rand_ay = GetRandomValue(0, 100);
|
||||
boid->velocity = (Vector2){rand_ax * 0.01f - 0.5f, rand_ay * 0.01f - 0.5f};
|
||||
}
|
||||
|
||||
PointOption target_pos = {0};
|
||||
|
||||
while (!WindowShouldClose()) {
|
||||
float dt = GetFrameTime();
|
||||
|
||||
// Update
|
||||
if (IsMouseButtonPressed(0)) {
|
||||
Vector2 mouse_pos = GetMousePosition();
|
||||
target_pos = (PointOption){.tag = SOME, .some.point = mouse_pos};
|
||||
}
|
||||
|
||||
|
||||
for (int i = 0; i < NUM_BOIDS; i++) {
|
||||
Boid *boid = &boids[i];
|
||||
boid->velocity = Vector2Add(boid->velocity, boid->acceleration);
|
||||
boid->velocity = Vector2ClampValue(boid->velocity, 0.0f, max_speed);
|
||||
boid->position = Vector2Add(boid->position, boid->velocity);
|
||||
}
|
||||
|
||||
|
||||
BeginDrawing();
|
||||
{
|
||||
ClearBackground(RAYWHITE);
|
||||
// You can draw a triangle but you'd need to rotate all 3 vectors, and I don't
|
||||
// want to get distracted with that
|
||||
// DrawTriangle(Vector2 v1, Vector2 v2, Vector2 v3, GREEN);
|
||||
// DrawTriangleLines(Vector2 v1, Vector2 v2, Vector2 v3, GREEN);
|
||||
for (int i = 0; i < NUM_BOIDS; i++) {
|
||||
Boid *boid = &boids[i];
|
||||
DrawCircle(boid->position.x, boid->position.y, 35, BLACK);
|
||||
DrawCircle(boid->position.x, boid->position.y, 25, GREEN);
|
||||
}
|
||||
}
|
||||
EndDrawing();
|
||||
}
|
||||
|
||||
free(boids);
|
||||
CloseWindow();
|
||||
}
|
12
hours.org
Normal file
12
hours.org
Normal file
@ -0,0 +1,12 @@
|
||||
* Bexorg Hours
|
||||
#+BEGIN: clocktable :scope subtree :maxlevel 2
|
||||
#+CAPTION: Clock summary at [2024-01-06 Sat 12:28]
|
||||
| Headline | Time |
|
||||
|------------+------|
|
||||
| *Total time* | *0:00* |
|
||||
#+END:
|
||||
|
||||
** <2024-01-06 Sat>
|
||||
:LOGBOOK:
|
||||
CLOCK: [2024-01-06 Sat 11:00]
|
||||
:END:
|
4
main.c
4
main.c
@ -12,7 +12,7 @@
|
||||
|
||||
#define DEBUG_MODE_ENABLED
|
||||
|
||||
bool global_debug_mode;
|
||||
bool global_debug_mode = false;
|
||||
|
||||
#define ENNIX_LIB_IMPLEMENTATION
|
||||
#include "lib.h"
|
||||
@ -349,7 +349,7 @@ int main(void) {
|
||||
printf("Direction Size: %ld \n", sizeof(Direction));
|
||||
printf("KnightState Size: %ld \n", sizeof(KnightState));
|
||||
|
||||
InitWindow(SCREEN_WIDTH, SCREEN_HEIGHT, "raylib [core] example - basic window");
|
||||
InitWindow(SCREEN_WIDTH, SCREEN_HEIGHT, "Tiny Knights");
|
||||
|
||||
int monitor = GetCurrentMonitor();
|
||||
int monitor_width = GetMonitorWidth(monitor);
|
||||
|
Loading…
x
Reference in New Issue
Block a user