From bf682daffe742af1846055ac4ea80356b0d7f367 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Sat, 13 Sep 2025 23:24:57 +0300 Subject: [PATCH] update on_physics_update & update standard components --- res/modules/internal/stdcomp.lua | 8 ++------ res/scripts/components/mob.lua | 4 +--- res/scripts/components/player.lua | 3 +-- src/logic/LevelController.cpp | 1 - src/logic/scripting/scripting.hpp | 2 +- src/logic/scripting/scripting_entities.cpp | 8 +++----- src/objects/Entities.cpp | 12 +++--------- src/objects/Entities.hpp | 1 - src/util/Clock.cpp | 2 +- 9 files changed, 12 insertions(+), 29 deletions(-) diff --git a/res/modules/internal/stdcomp.lua b/res/modules/internal/stdcomp.lua index 69b89197..7cedd188 100644 --- a/res/modules/internal/stdcomp.lua +++ b/res/modules/internal/stdcomp.lua @@ -133,21 +133,17 @@ return { ::continue:: end end, - physics_update = function(tps, parts, part) + physics_update = function(delta) for uid, entity in pairs(entities) do - if uid % parts ~= part then - goto continue - end for _, component in pairs(entity.components) do local callback = component.on_physics_update if not component.__disabled and callback then - local result, err = pcall(callback, tps) + local result, err = pcall(callback, delta) if err then debug.error(err) end end end - ::continue:: end end, render = function(delta) diff --git a/res/scripts/components/mob.lua b/res/scripts/components/mob.lua index 422a8d33..8a9ef8ae 100644 --- a/res/scripts/components/mob.lua +++ b/res/scripts/components/mob.lua @@ -151,9 +151,7 @@ function set_flight(flag) flight = flag end local prev_angle = (vec2.angle({dir[3], dir[1]})) % 360 -function on_physics_update(tps) - local delta = (1.0 / tps) - +function on_physics_update(delta) local grounded = body:is_grounded() body:set_vdamping(flight) body:set_gravity_scale({0, flight and 0.0 or props.gravity_scale, 0}) diff --git a/res/scripts/components/player.lua b/res/scripts/components/player.lua index 585c2b81..ea2e7d3c 100644 --- a/res/scripts/components/player.lua +++ b/res/scripts/components/player.lua @@ -51,8 +51,7 @@ local function process_player_inputs(pid, delta) end end -function on_physics_update(tps) - local delta = (1.0 / tps) +function on_physics_update(delta) local pid = entity:get_player() if pid ~= -1 then local pos = tsf:get_pos() diff --git a/src/logic/LevelController.cpp b/src/logic/LevelController.cpp index 18225ea0..95d91014 100644 --- a/src/logic/LevelController.cpp +++ b/src/logic/LevelController.cpp @@ -95,7 +95,6 @@ void LevelController::update(float delta, bool pause) { if (!pause) { // update all objects that needed blocks->update(delta, settings.chunks.padding.get()); - level->entities->updatePhysics(delta); level->entities->update(delta); for (const auto& [_, player] : *level->players) { if (player->isSuspended()) { diff --git a/src/logic/scripting/scripting.hpp b/src/logic/scripting/scripting.hpp index 7379f2c8..5a86b81d 100644 --- a/src/logic/scripting/scripting.hpp +++ b/src/logic/scripting/scripting.hpp @@ -139,7 +139,7 @@ namespace scripting { void on_entity_fall(const Entity& entity); void on_entity_save(const Entity& entity); void on_entities_update(int tps, int parts, int part); - void on_entities_physics_update(int tps, int parts, int part); + void on_entities_physics_update(float delta); void on_entities_render(float delta); void on_sensor_enter(const Entity& entity, size_t index, entityid_t oid); void on_sensor_exit(const Entity& entity, size_t index, entityid_t oid); diff --git a/src/logic/scripting/scripting_entities.cpp b/src/logic/scripting/scripting_entities.cpp index 2ab63ae3..c068d700 100644 --- a/src/logic/scripting/scripting_entities.cpp +++ b/src/logic/scripting/scripting_entities.cpp @@ -279,13 +279,11 @@ void scripting::on_entities_update(int tps, int parts, int part) { lua::pop(L); } -void scripting::on_entities_physics_update(int tps, int parts, int part) { +void scripting::on_entities_physics_update(float delta) { auto L = lua::get_main_state(); lua::get_from(L, STDCOMP, "physics_update", true); - lua::pushinteger(L, tps); - lua::pushinteger(L, parts); - lua::pushinteger(L, part); - lua::call_nothrow(L, 3, 0); + lua::pushnumber(L, delta); + lua::call_nothrow(L, 1, 0); lua::pop(L); } diff --git a/src/objects/Entities.cpp b/src/objects/Entities.cpp index 4982c636..a95f2ad1 100644 --- a/src/objects/Entities.cpp +++ b/src/objects/Entities.cpp @@ -27,8 +27,7 @@ static debug::Logger logger("entities"); Entities::Entities(Level& level) : level(level), sensorsTickClock(20, 3), - updateTickClock(20, 3), - physicsTickClock(60, 1) { + updateTickClock(20, 3) { } std::optional Entities::get(entityid_t id) { @@ -323,13 +322,8 @@ void Entities::update(float delta) { updateTickClock.getPart() ); } - if (physicsTickClock.update(delta)) { - scripting::on_entities_physics_update( - physicsTickClock.getTickRate(), - physicsTickClock.getParts(), - physicsTickClock.getPart() - ); - } + updatePhysics(delta); + scripting::on_entities_physics_update(delta); } static void debug_render_skeleton( diff --git a/src/objects/Entities.hpp b/src/objects/Entities.hpp index 95e3be68..03fcec8c 100644 --- a/src/objects/Entities.hpp +++ b/src/objects/Entities.hpp @@ -39,7 +39,6 @@ class Entities { entityid_t nextID = 1; util::Clock sensorsTickClock; util::Clock updateTickClock; - util::Clock physicsTickClock; void updateSensors( Rigidbody& body, const Transform& tsf, std::vector& sensors diff --git a/src/util/Clock.cpp b/src/util/Clock.cpp index 4434e800..58aea31a 100644 --- a/src/util/Clock.cpp +++ b/src/util/Clock.cpp @@ -10,7 +10,7 @@ Clock::Clock(int tickRate, int tickParts) bool Clock::update(float delta) { tickTimer += delta; - float delay = 1.0f / float(tickRate); + float delay = 1.0f / static_cast(tickRate); if (tickTimer > delay || tickPartsUndone) { if (tickPartsUndone) { tickPartsUndone--;