From 20e56d07ee9412a3f330c9985642a36ca49fb07b Mon Sep 17 00:00:00 2001 From: wuyize Date: Thu, 20 Apr 2023 12:21:27 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=86=E6=89=94=E6=89=8B=E9=9B=B7=E4=B8=8E?= =?UTF-8?q?=E4=BA=BA=E7=BB=91=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ToyEngine/src/DemoWorld.cpp | 17 +++++++++-------- ToyEngine/src/Particle.cpp | 18 ++++++++++++++++-- ToyEngine/src/Particle.h | 3 ++- 3 files changed, 27 insertions(+), 11 deletions(-) diff --git a/ToyEngine/src/DemoWorld.cpp b/ToyEngine/src/DemoWorld.cpp index d42017c..86d9d31 100644 --- a/ToyEngine/src/DemoWorld.cpp +++ b/ToyEngine/src/DemoWorld.cpp @@ -25,11 +25,13 @@ DemoWorld::DemoWorld() shoot->setScale(glm::vec3(45)); throwPerson = std::make_shared("Models\\grenade_throw\\scene.gltf"); - throwPerson->setPosition({ -5,0,-1 }); + throwPerson->setPosition({ -7,0,-1 }); + throwPerson->setRotaion(glm::angleAxis(glm::radians(90.f), glm::vec3(0, 1, 0))); throwPerson->setScale(glm::vec3{ 45 }); mk2 = std::make_shared(10, "Models\\mk2-frag-grenade\\mk2-frag-grenade.gltf"); - mk2->enableGravity(); + mk2->setScale(glm::vec3(0.1)); + mk2->setPosition({ 0,-100,0 }); addActor(actor); addActor(actor2); @@ -56,7 +58,7 @@ DemoWorld::DemoWorld() } else { - particle->enableGravity(); + particle->setEnableGravity(true); } particles.push_back(particle); addActor(particle); @@ -88,12 +90,11 @@ void DemoWorld::logicalTick(float deltaTime) particles[i]->setRotaion(glm::rotation(glm::vec3(0, 0, 1), d)); } - if (throwPerson->getAnimatorCurrentTime() - 3.f < 1e-3f) + if (abs(throwPerson->getAnimatorCurrentTime() - 3.41f) < 1e-2f) { - mk2->setPosition({ -5.5,2,-1 }); - mk2->setScale(glm::vec3(0.1)); - mk2->setSpeed({ 0,0,2 }); - + mk2->setPosition(throwPerson->getPosition() + glm::vec3(-0.5, 2.2, 0)); + mk2->setSpeed(glm::mat3_cast(throwPerson->getRotation() * glm::rotation(glm::vec3(1, 0, 0), glm::normalize(glm::vec3(0, 1, 1)/*方向*/))) * glm::vec3(15/*速度*/, 0, 0)); + mk2->setEnableGravity(true); } } diff --git a/ToyEngine/src/Particle.cpp b/ToyEngine/src/Particle.cpp index b852d9f..e2e4032 100644 --- a/ToyEngine/src/Particle.cpp +++ b/ToyEngine/src/Particle.cpp @@ -113,7 +113,21 @@ void Particle::setFixed(bool fixed) this->fixed = fixed; } -void Particle::enableGravity() +void Particle::setEnableGravity(bool enable) { - addForce(std::make_shared(glm::vec3(0.f, -getMass() * 9.80665f, 0.f))); + if (enable) + { + if (!gravity) + { + gravity = std::make_shared(glm::vec3(0.f, -getMass() * 9.80665f, 0.f)); + addForce(gravity); + } + } + else + { + if (gravity) + { + removeForce(gravity); + } + } } diff --git a/ToyEngine/src/Particle.h b/ToyEngine/src/Particle.h index 9889eea..a0a2e73 100644 --- a/ToyEngine/src/Particle.h +++ b/ToyEngine/src/Particle.h @@ -22,7 +22,7 @@ public: glm::vec3 getSpeed(); void setSpeed(const glm::vec3& speed); void setFixed(bool fixed); - void enableGravity(); + void setEnableGravity(bool enable); private: bool fixed = false; float mass; @@ -31,5 +31,6 @@ private: std::set> forces; glm::vec3 resultantForce = glm::vec3(0); Shader debugShader; + std::shared_ptr gravity; };