You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

111 lines
2.8 KiB
Plaintext

GRAVITY :: Vector2.{0, 3000};
RECT_SIZE :: 10;
SPAWN_UPS :: 1.0 / 60;
particle :: struct {
pos : Vector2;
vel : Vector2;
}
main :: () {
InitWindow(800, 600, "Droplets");
defer CloseWindow();
SetTargetFPS(240);
high_fps := true;
particles: [..]particle;
mouse_drag := new_ring();
defer array_free(mouse_drag.data);
spawn_d := SPAWN_UPS;
while !WindowShouldClose() {
dt := GetFrameTime();
width := GetScreenWidth();
height := GetScreenHeight();
if IsMouseButtonPressed(.MOUSE_BUTTON_MIDDLE) {
if !high_fps SetTargetFPS(240);
if high_fps SetTargetFPS(60);
high_fps = !high_fps;
}
if IsMouseButtonDown(.MOUSE_BUTTON_RIGHT) {
spawn_d -= dt;
if spawn_d < 0 {
pos := GetMousePosition();
array_add(*particles, .{pos, .{0, 0}});
spawn_d = SPAWN_UPS;
}
}
if IsMouseButtonReleased(.MOUSE_BUTTON_RIGHT) {
spawn_d = SPAWN_UPS;
}
if IsMouseButtonDown(.MOUSE_BUTTON_LEFT) {
del := GetMouseDelta() / dt;
ring_add(*mouse_drag, del);
}
if IsMouseButtonReleased(.MOUSE_BUTTON_LEFT) {
pos := GetMousePosition();
{
max_x := cast(float) GetScreenWidth();
max_y := cast(float) GetScreenHeight();
using pos;
if x > max_x x = max_x;
if x < 0 x = 0;
if y > max_y y = max_y;
if y < 0 y = 0;
}
vel := ring_avg(*mouse_drag);
ring_reset(*mouse_drag);
array_add(*particles, .{pos, vel});
}
for *p : particles {
using p;
if pos.y + RECT_SIZE < xx height
vel += GRAVITY * dt;
pos += vel * dt;
if pos.x <= 0 {
vel.x = -(vel.x * 0.5);
pos.x = 0;
}
if pos.x + RECT_SIZE >= xx width {
vel.x = -(vel.x * 0.5);
pos.x = xx (width - RECT_SIZE);
}
if pos.y <= 0 {
vel.y = -(vel.y * 0.5);
vel.x *= 0.75;
pos.y = 0;
}
if pos.y + RECT_SIZE > xx height {
vel.y = -(vel.y * 0.5);
vel.x *= 0.75;
if abs(vel.y) < abs((GRAVITY * dt).y)
vel = .{0, 0};
pos.y = xx (height - RECT_SIZE);
}
}
BeginDrawing();
ClearBackground(RAYWHITE);
for p : particles {
DrawRectangleV(p.pos, .{RECT_SIZE, RECT_SIZE}, SKYBLUE);
}
EndDrawing();
}
}
#import "raylib";
#import "Basic";