From b4cf00a8f1e99ffcf7d4c0e5a6479a930b3cab06 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Tue, 9 Jul 2024 02:24:00 +0300 Subject: [PATCH] add rigidbody.set/get_gravity_scale --- src/logic/scripting/lua/libentity.cpp | 16 ++++++++++++++++ src/objects/Player.cpp | 2 +- src/physics/Hitbox.hpp | 2 +- src/physics/PhysicsSolver.cpp | 2 +- 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/logic/scripting/lua/libentity.cpp b/src/logic/scripting/lua/libentity.cpp index 95cf2468..db363463 100644 --- a/src/logic/scripting/lua/libentity.cpp +++ b/src/logic/scripting/lua/libentity.cpp @@ -144,6 +144,20 @@ static int l_rigidbody_set_size(lua::State* L) { return 0; } +static int l_rigidbody_get_gravity_scale(lua::State* L) { + if (auto entity = get_entity(L, 1)) { + return lua::pushnumber(L, entity->getRigidbody().hitbox.gravityScale); + } + return 0; +} + +static int l_rigidbody_set_gravity_scale(lua::State* L) { + if (auto entity = get_entity(L, 1)) { + entity->getRigidbody().hitbox.gravityScale = lua::tonumber(L, 2); + } + return 0; +} + static int index_range_check(const rigging::Rig& rig, lua::Integer index) { if (static_cast(index) >= rig.pose.matrices.size()) { throw std::runtime_error("index out of range [0, " + @@ -222,5 +236,7 @@ const luaL_Reg rigidbodylib [] = { {"set_vel", lua::wrap}, {"get_size", lua::wrap}, {"set_size", lua::wrap}, + {"get_gravity_scale", lua::wrap}, + {"set_gravity_scale", lua::wrap}, {NULL, NULL} }; diff --git a/src/objects/Player.cpp b/src/objects/Player.cpp index eba7f2cf..2d319830 100644 --- a/src/objects/Player.cpp +++ b/src/objects/Player.cpp @@ -97,7 +97,7 @@ void Player::updateInput(PlayerInput& input, float delta) { hitbox->linearDamping = PLAYER_GROUND_DAMPING; hitbox->verticalDamping = flight; - hitbox->gravityMultiplier = flight ? 0.0f : 1.0f; + hitbox->gravityScale = flight ? 0.0f : 1.0f; if (flight){ hitbox->linearDamping = PLAYER_AIR_DAMPING; if (input.jump){ diff --git a/src/physics/Hitbox.hpp b/src/physics/Hitbox.hpp index 117ba20b..56955fa5 100644 --- a/src/physics/Hitbox.hpp +++ b/src/physics/Hitbox.hpp @@ -43,7 +43,7 @@ struct Hitbox { float linearDamping; bool verticalDamping = false; bool grounded = false; - float gravityMultiplier = 1.0f; + float gravityScale = 1.0f; Hitbox(glm::vec3 position, glm::vec3 halfsize); }; diff --git a/src/physics/PhysicsSolver.cpp b/src/physics/PhysicsSolver.cpp index 0f0735d8..17620a9e 100644 --- a/src/physics/PhysicsSolver.cpp +++ b/src/physics/PhysicsSolver.cpp @@ -32,7 +32,7 @@ void PhysicsSolver::step( const glm::vec3& half = hitbox->halfsize; glm::vec3& pos = hitbox->position; glm::vec3& vel = hitbox->velocity; - float gravityScale = hitbox->gravityMultiplier; + float gravityScale = hitbox->gravityScale; bool prevGrounded = hitbox->grounded; hitbox->grounded = false;