Files
cpp-masssprings/src/main.cpp

79 lines
2.4 KiB
C++

#include "mass_springs.hpp"
#define VERLET_UPDATE
#include <iostream>
#include <raylib.h>
#include <raymath.h>
#include "config.hpp"
#include "renderer.hpp"
auto main(int argc, char *argv[]) -> int {
// if (argc < 2) {
// std::cout << "Missing .klotski file." << std::endl;
// return 1;
// }
SetTraceLogLevel(LOG_ERROR);
// SetTargetFPS(60);
SetConfigFlags(FLAG_VSYNC_HINT);
SetConfigFlags(FLAG_MSAA_4X_HINT);
InitWindow(WIDTH, HEIGHT, "MassSprings");
Edge3Set edges;
Edge2Set viewport;
viewport.reserve(edges.size());
MassSpringSystem mass_springs;
mass_springs.AddMass(1.0, Vector3(-0.5, 0.5, 0.0), true);
mass_springs.AddMass(1.0, Vector3(0.5, 0.5, 0.0), false);
mass_springs.AddMass(1.0, Vector3(0.5, 0.0, 0.0), false);
mass_springs.AddSpring(0, 1, DEFAULT_SPRING_CONSTANT,
DEFAULT_DAMPENING_CONSTANT, DEFAULT_REST_LENGTH);
mass_springs.AddSpring(1, 2, DEFAULT_SPRING_CONSTANT,
DEFAULT_DAMPENING_CONSTANT, DEFAULT_REST_LENGTH);
Renderer renderer(WIDTH, HEIGHT);
float frametime;
float abstime = 0.0;
while (!WindowShouldClose()) {
frametime = GetFrameTime();
mass_springs.ClearForces();
mass_springs.CalculateSpringForces();
#ifdef VERLET_UPDATE
mass_springs.VerletUpdate(frametime * SIM_SPEED);
#else
mass_springs.IntegrateVelocities(frametime * SIM_SPEED);
mass_springs.IntegratePositions(frametime * SIM_SPEED);
#endif
// std::cout << "Calculating Spring Forces: A: (" << massA.force.x << ", "
// << massA.force.y << ", " << massA.force.z << ") B: ("
// << massB.force.x << ", " << massB.force.y << ", " <<
// massB.force.z
// << ")" << std::endl;
// std::cout << "Calculating Velocities: A: (" << massA.velocity.x << ", "
// << massA.velocity.y << ", " << massA.velocity.z << ") B: ("
// << massB.velocity.x << ", " << massB.velocity.y << ", "
// << massB.velocity.z << ")" << std::endl;
// std::cout << "Calculating Positions: A: (" << massA.position.x << ", "
// << massA.position.y << ", " << massA.position.z << ") B: ("
// << massB.position.x << ", " << massB.position.y << ", "
// << massB.position.z << ")" << std::endl;
renderer.Transform(viewport, mass_springs, 0.0, CAMERA_DISTANCE);
renderer.Draw(viewport);
abstime += frametime * SIM_SPEED;
}
CloseWindow();
return 0;
}