Skip to content

Commit

Permalink
Minor refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
xorz57 committed Jan 29, 2024
1 parent d410e92 commit c574ace
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 56 deletions.
3 changes: 2 additions & 1 deletion include/Application.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,16 @@
class Application {
public:
Application();
void FixedUpdate(const sf::Time &fixedDeltaTime);
void Run();

private:
void ProcessEvents();
void HandleEventClosed(const sf::Event &event);
void HandleEventResized(const sf::Event &event);
void HandleEventMouseWheelScrolled(const sf::Event &event);
void HandleEventMouseButtonPressed(const sf::Event &event);
void HandleEventMouseButtonReleased(const sf::Event &event);
void FixedUpdate(const sf::Time &fixedDeltaTime);

sf::VideoMode mMode{800u, 600u};
sf::String mTitle{"ParticlePhysics"};
Expand Down
114 changes: 59 additions & 55 deletions src/Application.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,33 +23,6 @@ Application::Application() {
mSoftBodies.emplace_back(Cloth(position, rows, cols, padding));
}

void Application::FixedUpdate(const sf::Time &fixedDeltaTime) {
const float dt = fixedDeltaTime.asSeconds();
for (SoftBody &softBody: mSoftBodies) {
for (Spring &spring: softBody.springs) {
const glm::vec2 dPosition = spring.mParticle2.position - spring.mParticle1.position;
const glm::vec2 dVelocity = spring.mParticle2.velocity - spring.mParticle1.velocity;
if (glm::length(dPosition) != 0) {
const glm::vec2 springForce = spring.mSpringConstant * (glm::length(dPosition) - spring.mRestLength) * glm::normalize(dPosition);
const glm::vec2 dampingForce = spring.mDampingConstant * dVelocity;
const glm::vec2 force = springForce + dampingForce;
spring.mParticle1.force += force;
spring.mParticle2.force -= force;
}
}
for (Particle &particle: softBody.particles) {
const glm::vec2 gravitationalForce = particle.mass * mGravitationalAcceleration;
particle.force += gravitationalForce;
if (!particle.pinned) {
const glm::vec2 acceleration = particle.force * (1.0f / particle.mass);
particle.velocity += acceleration * dt;
particle.position += particle.velocity * dt;
}
particle.force = glm::vec2(0.0f, 0.0f);
}
}
}

void Application::Run() {
(void) ImGui::SFML::Init(mWindow);

Expand All @@ -58,34 +31,7 @@ void Application::Run() {
sf::Time accumulator = sf::Time::Zero;
sf::Clock deltaClock;
while (mWindow.isOpen()) {
sf::Event event{};
while (mWindow.pollEvent(event)) {
ImGui::SFML::ProcessEvent(mWindow, event);
switch (event.type) {
case sf::Event::Closed:
HandleEventClosed(event);
break;

case sf::Event::Resized:
HandleEventResized(event);
break;

case sf::Event::MouseWheelScrolled:
HandleEventMouseWheelScrolled(event);
break;

case sf::Event::MouseButtonPressed:
HandleEventMouseButtonPressed(event);
break;

case sf::Event::MouseButtonReleased:
HandleEventMouseButtonReleased(event);
break;

default:
break;
}
}
ProcessEvents();

const sf::Time deltaTime = deltaClock.restart();
const sf::Time scaledDeltaTime = timeScale * deltaTime;
Expand Down Expand Up @@ -154,6 +100,37 @@ void Application::Run() {
ImGui::SFML::Shutdown();
}

void Application::ProcessEvents() {
sf::Event event{};
while (mWindow.pollEvent(event)) {
ImGui::SFML::ProcessEvent(mWindow, event);
switch (event.type) {
case sf::Event::Closed:
HandleEventClosed(event);
break;

case sf::Event::Resized:
HandleEventResized(event);
break;

case sf::Event::MouseWheelScrolled:
HandleEventMouseWheelScrolled(event);
break;

case sf::Event::MouseButtonPressed:
HandleEventMouseButtonPressed(event);
break;

case sf::Event::MouseButtonReleased:
HandleEventMouseButtonReleased(event);
break;

default:
break;
}
}
}

void Application::HandleEventClosed(const sf::Event &event) {
mWindow.close();
}
Expand Down Expand Up @@ -199,3 +176,30 @@ void Application::HandleEventMouseButtonReleased(const sf::Event &event) {
mIsParticleSelected = false;
}
}

void Application::FixedUpdate(const sf::Time &fixedDeltaTime) {
const float dt = fixedDeltaTime.asSeconds();
for (SoftBody &softBody: mSoftBodies) {
for (Spring &spring: softBody.springs) {
const glm::vec2 dPosition = spring.mParticle2.position - spring.mParticle1.position;
const glm::vec2 dVelocity = spring.mParticle2.velocity - spring.mParticle1.velocity;
if (glm::length(dPosition) != 0) {
const glm::vec2 springForce = spring.mSpringConstant * (glm::length(dPosition) - spring.mRestLength) * glm::normalize(dPosition);
const glm::vec2 dampingForce = spring.mDampingConstant * dVelocity;
const glm::vec2 force = springForce + dampingForce;
spring.mParticle1.force += force;
spring.mParticle2.force -= force;
}
}
for (Particle &particle: softBody.particles) {
const glm::vec2 gravitationalForce = particle.mass * mGravitationalAcceleration;
particle.force += gravitationalForce;
if (!particle.pinned) {
const glm::vec2 acceleration = particle.force * (1.0f / particle.mass);
particle.velocity += acceleration * dt;
particle.position += particle.velocity * dt;
}
particle.force = glm::vec2(0.0f, 0.0f);
}
}
}

0 comments on commit c574ace

Please sign in to comment.