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},