From dfcc3e913df86c0f859cf7c5e5fb2fddf42091ee Mon Sep 17 00:00:00 2001 From: neveix Date: Tue, 18 Aug 2026 21:57:51 +0500 Subject: [PATCH 1/3] add precise_utc_time function --- doc/en/scripting/builtins/libtime.md | 3 +++ doc/ru/scripting/builtins/libtime.md | 9 ++++++--- src/logic/scripting/lua/libs/libtime.cpp | 23 ++++++++++++++++------- 3 files changed, 25 insertions(+), 10 deletions(-) diff --git a/doc/en/scripting/builtins/libtime.md b/doc/en/scripting/builtins/libtime.md index 51e125e9c..320e330d1 100644 --- a/doc/en/scripting/builtins/libtime.md +++ b/doc/en/scripting/builtins/libtime.md @@ -10,6 +10,9 @@ time.delta() -> number -- Returns UTC time in seconds time.utc_time() -> int +-- Returns UTC time in seconds with millisecond precision +time.precise_utc_time() -> number + -- Returns local (system) time in seconds time.local_time() -> int diff --git a/doc/ru/scripting/builtins/libtime.md b/doc/ru/scripting/builtins/libtime.md index 62e95892a..86d02488f 100644 --- a/doc/ru/scripting/builtins/libtime.md +++ b/doc/ru/scripting/builtins/libtime.md @@ -1,15 +1,18 @@ # Библиотека *time* ```lua --- Возвращает время с момента запуска движка в секундах и милисекундах. +-- Возвращает время с момента запуска движка в секундах и миллисекундах. time.uptime() -> number --- Возвращает дельту времени в секундах и милисекундах (время прошедшее с предыдущего кадра) +-- Возвращает дельту времени в секундах и миллисекундах (время прошедшее с предыдущего кадра) time.delta() -> number --- Возвращает время UTC в секундах +-- Возвращает время UTC (секунды с 1970-01-01 UTC) time.utc_time() -> int +-- Возвращает время UTC (секунды с 1970-01-01 UTC) с точностью до миллисекунд +time.precise_utc_time() -> number + -- Возвращает локальное (системное) время в секундах time.local_time() -> int diff --git a/src/logic/scripting/lua/libs/libtime.cpp b/src/logic/scripting/lua/libs/libtime.cpp index 342226035..aefcbdec4 100644 --- a/src/logic/scripting/lua/libs/libtime.cpp +++ b/src/logic/scripting/lua/libs/libtime.cpp @@ -1,11 +1,12 @@ -#include "engine/Engine.hpp" -#include "api_lua.hpp" #include +#include "api_lua.hpp" +#include "engine/Engine.hpp" + using namespace scripting; #if defined(_WIN32) || defined(_WIN64) - #define USE_MSVC_TIME_SAFE +#define USE_MSVC_TIME_SAFE #endif static int l_uptime(lua::State* L) { @@ -20,11 +21,18 @@ static int l_utc_time(lua::State* L) { return lua::pushnumber(L, std::time(nullptr)); } +static int l_precise_utc_time(lua::State* L) { + auto now = std::chrono::system_clock::now(); + return lua::pushnumber( + L, std::chrono::duration(now.time_since_epoch()).count() + ); +} + static int l_local_time(lua::State* L) { std::time_t t = std::time(nullptr); - std::tm gmt_tm{}; - std::tm local_tm{}; + std::tm gmt_tm {}; + std::tm local_tm {}; #if defined(USE_MSVC_TIME_SAFE) gmtime_s(&gmt_tm, &t); @@ -44,8 +52,8 @@ static int l_local_time(lua::State* L) { static int l_utc_offset(lua::State* L) { std::time_t t = std::time(nullptr); - std::tm gmt_tm{}; - std::tm local_tm{}; + std::tm gmt_tm {}; + std::tm local_tm {}; #if defined(USE_MSVC_TIME_SAFE) gmtime_s(&gmt_tm, &t); @@ -74,6 +82,7 @@ const luaL_Reg timelib[] = { {"uptime", lua::wrap}, {"delta", lua::wrap}, {"utc_time", lua::wrap}, + {"precise_utc_time", lua::wrap}, {"utc_offset", lua::wrap}, {"local_time", lua::wrap}, {"precise_time", lua::wrap}, From 4e149e2b28cca353aa8bbe140126a8a801242774 Mon Sep 17 00:00:00 2001 From: neveix Date: Wed, 19 Aug 2026 02:07:22 +0500 Subject: [PATCH 2/3] revert includes order & padding --- src/logic/scripting/lua/libs/libtime.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/logic/scripting/lua/libs/libtime.cpp b/src/logic/scripting/lua/libs/libtime.cpp index aefcbdec4..88f49a6c0 100644 --- a/src/logic/scripting/lua/libs/libtime.cpp +++ b/src/logic/scripting/lua/libs/libtime.cpp @@ -1,12 +1,12 @@ -#include - #include "api_lua.hpp" #include "engine/Engine.hpp" +#include + using namespace scripting; #if defined(_WIN32) || defined(_WIN64) -#define USE_MSVC_TIME_SAFE + #define USE_MSVC_TIME_SAFE #endif static int l_uptime(lua::State* L) { From b70dce5da2955c4868db8395dc59436fa7bad26f Mon Sep 17 00:00:00 2001 From: neveix Date: Wed, 19 Aug 2026 02:08:50 +0500 Subject: [PATCH 3/3] change system clock to steady clock (like in l_precise_time) --- src/logic/scripting/lua/libs/libtime.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/logic/scripting/lua/libs/libtime.cpp b/src/logic/scripting/lua/libs/libtime.cpp index 88f49a6c0..ae6fc6fed 100644 --- a/src/logic/scripting/lua/libs/libtime.cpp +++ b/src/logic/scripting/lua/libs/libtime.cpp @@ -22,7 +22,7 @@ static int l_utc_time(lua::State* L) { } static int l_precise_utc_time(lua::State* L) { - auto now = std::chrono::system_clock::now(); + auto now = std::chrono::steady_clock::now(); return lua::pushnumber( L, std::chrono::duration(now.time_since_epoch()).count() );