From 35004c2075f0df39431c45b5fc87d5b79e3330c7 Mon Sep 17 00:00:00 2001 From: Xertis <118364459+Xertis@users.noreply.github.com> Date: Sun, 26 Jan 2025 14:02:38 +0300 Subject: [PATCH 01/19] Added new extensions for tables and math --- res/scripts/stdmin.lua | 76 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/res/scripts/stdmin.lua b/res/scripts/stdmin.lua index 5da1b347..abdfb905 100644 --- a/res/scripts/stdmin.lua +++ b/res/scripts/stdmin.lua @@ -64,6 +64,16 @@ function math.round(num, places) return math.floor(num * mult + 0.5) / mult end +function math.sum(...) + local sum = 0 + + for _, v in ipairs({...}) do + sum = sum + v + end + + return sum +end + ---------------------------------------------- function table.copy(t) @@ -113,6 +123,72 @@ function table.shuffle(t) return t end +function table.merge(t1, t2) + for i, v in pairs(t2) do + if type(i) == "number" then + t1[#t1 + 1] = v + elseif t1[i] == nil then + t1[i] = v + end + end + + return t1 +end + +function table.map(t, func) + for i, v in pairs(t) do + t[i] = func(i, v) + end + + return t +end + +function table.filter(t, func) + for i, v in pairs(t) do + if not func(i, v) then + t[i] = nil + end + end + + return t +end + +function table.set_default(t, indx, default) + if t[indx] == nil then + t[indx] = default + return + end + + return t[indx] +end + +function table.flat(t) + local flat = {} + + for _, v in pairs(t) do + if type(v) == "table" then + table.merge(flat, v) + else + table.insert(flat, v) + end + end + + return flat +end + +function table.deep_flat(t) + local flat = {} + + for _, v in pairs(t) do + if type(v) == "table" then + table.merge(flat, table.deep_flat(v)) + else + table.insert(flat, v) + end + end + + return flat +end ---------------------------------------------- local pattern_escape_replacements = { From 266ddd400ffea9990520880e30efc04876a130f4 Mon Sep 17 00:00:00 2001 From: Xertis <118364459+Xertis@users.noreply.github.com> Date: Sun, 26 Jan 2025 14:20:20 +0300 Subject: [PATCH 02/19] Update extensions.md --- doc/ru/scripting/extensions.md | 41 ++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/doc/ru/scripting/extensions.md b/doc/ru/scripting/extensions.md index ca165b0c..be697463 100644 --- a/doc/ru/scripting/extensions.md +++ b/doc/ru/scripting/extensions.md @@ -52,6 +52,41 @@ table.shuffle(t: table) -> table Перемешивает значения в таблице. +```lua +table.merge(t1: table, t2: table) -> table +``` + +Объединяет таблицу t1 с t2. + +```lua +table.map(t: table, func: function(indx, value) ) -> table +``` + +Проходится по таблице и применяет ко всем её элементам **func**, которая возвращает новое значение элемента. + +```lua +table.filter(t: table, func: function(indx, value) ) -> table +``` + +Проходится по таблице с помощью **func**, которая возвращает **true** если элемент надо сохранить и **false**, если его надо удалить. + +```lua +table.set_default(t: table, key: number | string, default: any) -> any | nil +``` + +Позволяет получить значение по ключу, если он существует, или установить и вернуть **nil**, если ключ отсутствует. + +```lua +table.flat(t: table) -> table +``` + +Возвращает "плоскую" версию исходной таблицы. + +```lua +table.deep_flat(t: table) -> table +``` + +Возвращает глубокую "плоскую" версию исходной таблицы. ```lua table.tostring(t: table) -> string @@ -165,6 +200,12 @@ math.round(num: number, [опционально] places: num) -> number Возвращает округлённое значение num до указанного количества знаков после запятой places. +```lua +math.sum(x: number, ...) -> number +``` + +Возвращает сумму всех принимаемых аргументов. + ## Дополнительные глобальные функции В этом же скрипте также определены и другие глобальные функции которые доступны для использования. Ниже их список From 5187ee76e913fc35d8eef6705cbe99122667cf2b Mon Sep 17 00:00:00 2001 From: Xertis <118364459+Xertis@users.noreply.github.com> Date: Sun, 26 Jan 2025 14:21:44 +0300 Subject: [PATCH 03/19] Changes to comply with the documentation --- res/scripts/stdmin.lua | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/res/scripts/stdmin.lua b/res/scripts/stdmin.lua index abdfb905..cd57df8e 100644 --- a/res/scripts/stdmin.lua +++ b/res/scripts/stdmin.lua @@ -153,13 +153,13 @@ function table.filter(t, func) return t end -function table.set_default(t, indx, default) - if t[indx] == nil then - t[indx] = default +function table.set_default(t, key, default) + if t[key] == nil then + t[key] = default return end - return t[indx] + return t[key] end function table.flat(t) From 089d86d0a1029c33cd5c7a31a084d1a6eb45bfd7 Mon Sep 17 00:00:00 2001 From: Xertis Date: Sun, 26 Jan 2025 20:28:58 +0300 Subject: [PATCH 04/19] documentation and stdmin corrections --- doc/ru/scripting/extensions.md | 18 +++++++++--------- res/scripts/stdmin.lua | 23 ++++++++++++----------- 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/doc/ru/scripting/extensions.md b/doc/ru/scripting/extensions.md index be697463..32afc52d 100644 --- a/doc/ru/scripting/extensions.md +++ b/doc/ru/scripting/extensions.md @@ -56,7 +56,7 @@ table.shuffle(t: table) -> table table.merge(t1: table, t2: table) -> table ``` -Объединяет таблицу t1 с t2. +Добавляет в таблицу **t1** значения из таблицы **t2**. Если в таблице **t2** присутствует ключ из **t1**, то значение ключа не будет изменено. ```lua table.map(t: table, func: function(indx, value) ) -> table @@ -71,10 +71,10 @@ table.filter(t: table, func: function(indx, value) ) -> table Проходится по таблице с помощью **func**, которая возвращает **true** если элемент надо сохранить и **false**, если его надо удалить. ```lua -table.set_default(t: table, key: number | string, default: any) -> any | nil +table.set_default(t: table, key: number | string, default: any) -> any | default ``` -Позволяет получить значение по ключу, если он существует, или установить и вернуть **nil**, если ключ отсутствует. +Позволяет безопасно получать значение по указанному ключу. Если ключ существует в таблице, метод вернет его значение. Если ключ отсутствует, метод установит его со значением **default** и вернет его. ```lua table.flat(t: table) -> table @@ -88,6 +88,12 @@ table.deep_flat(t: table) -> table Возвращает глубокую "плоскую" версию исходной таблицы. +```lua +table.sum(t) -> number +``` + +Возвращает сумму всех элементов, игнорируя пары ключ-значение. + ```lua table.tostring(t: table) -> string ``` @@ -200,12 +206,6 @@ math.round(num: number, [опционально] places: num) -> number Возвращает округлённое значение num до указанного количества знаков после запятой places. -```lua -math.sum(x: number, ...) -> number -``` - -Возвращает сумму всех принимаемых аргументов. - ## Дополнительные глобальные функции В этом же скрипте также определены и другие глобальные функции которые доступны для использования. Ниже их список diff --git a/res/scripts/stdmin.lua b/res/scripts/stdmin.lua index cd57df8e..7a264540 100644 --- a/res/scripts/stdmin.lua +++ b/res/scripts/stdmin.lua @@ -64,16 +64,6 @@ function math.round(num, places) return math.floor(num * mult + 0.5) / mult end -function math.sum(...) - local sum = 0 - - for _, v in ipairs({...}) do - sum = sum + v - end - - return sum -end - ---------------------------------------------- function table.copy(t) @@ -156,7 +146,7 @@ end function table.set_default(t, key, default) if t[key] == nil then t[key] = default - return + return default end return t[key] @@ -189,6 +179,17 @@ function table.deep_flat(t) return flat end + +function table.sum(t) + local sum = 0 + + for _, v in ipairs(t) do + sum = sum + v + end + + return sum +end + ---------------------------------------------- local pattern_escape_replacements = { From 6592684db100f9539e859ed971ee3c85c8526649 Mon Sep 17 00:00:00 2001 From: Xertis Date: Sun, 26 Jan 2025 20:47:45 +0300 Subject: [PATCH 05/19] math.sum return --- doc/ru/scripting/extensions.md | 12 ++++++------ res/scripts/stdmin.lua | 28 +++++++++++++++++----------- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/doc/ru/scripting/extensions.md b/doc/ru/scripting/extensions.md index 32afc52d..82235b96 100644 --- a/doc/ru/scripting/extensions.md +++ b/doc/ru/scripting/extensions.md @@ -88,12 +88,6 @@ table.deep_flat(t: table) -> table Возвращает глубокую "плоскую" версию исходной таблицы. -```lua -table.sum(t) -> number -``` - -Возвращает сумму всех элементов, игнорируя пары ключ-значение. - ```lua table.tostring(t: table) -> string ``` @@ -206,6 +200,12 @@ math.round(num: number, [опционально] places: num) -> number Возвращает округлённое значение num до указанного количества знаков после запятой places. +```lua +math.sum(x: number, ... | t: table) -> number +``` + +Возвращает сумму всех принимаемых аргументов. Если в качестве аргумента была передана таблица, метод вернёт сумму всех её элементов. + ## Дополнительные глобальные функции В этом же скрипте также определены и другие глобальные функции которые доступны для использования. Ниже их список diff --git a/res/scripts/stdmin.lua b/res/scripts/stdmin.lua index 7a264540..07c42e35 100644 --- a/res/scripts/stdmin.lua +++ b/res/scripts/stdmin.lua @@ -64,6 +64,23 @@ function math.round(num, places) return math.floor(num * mult + 0.5) / mult end +function math.sum(...) + local numbers = nil + local sum = 0 + + if type(...) == "table" then + numbers = ... + else + numbers = {...} + end + + for _, v in ipairs(numbers) do + sum = sum + v + end + + return sum +end + ---------------------------------------------- function table.copy(t) @@ -179,17 +196,6 @@ function table.deep_flat(t) return flat end - -function table.sum(t) - local sum = 0 - - for _, v in ipairs(t) do - sum = sum + v - end - - return sum -end - ---------------------------------------------- local pattern_escape_replacements = { From 17ce49bdf1b9334d34744ef054d59c36e7ad6773 Mon Sep 17 00:00:00 2001 From: Xertis Date: Sat, 1 Feb 2025 01:34:11 +0300 Subject: [PATCH 06/19] add table.slice --- doc/ru/scripting/extensions.md | 6 ++++++ res/scripts/stdmin.lua | 12 ++++++++++++ 2 files changed, 18 insertions(+) diff --git a/doc/ru/scripting/extensions.md b/doc/ru/scripting/extensions.md index 82235b96..cce639ec 100644 --- a/doc/ru/scripting/extensions.md +++ b/doc/ru/scripting/extensions.md @@ -88,6 +88,12 @@ table.deep_flat(t: table) -> table Возвращает глубокую "плоскую" версию исходной таблицы. +```lua +table.slice(arr: table, start: number | nil, stop: number | nil) -> table +``` + +Возвращает обрезанную версию таблицы с индекса **start** до индекса **stop** включительно, при этом пары ключ-значение не сохраняются в новой таблице. При значениях **nil** начинает с **1** и заканчивает **#arr** соответственно. + ```lua table.tostring(t: table) -> string ``` diff --git a/res/scripts/stdmin.lua b/res/scripts/stdmin.lua index 07c42e35..fba17a53 100644 --- a/res/scripts/stdmin.lua +++ b/res/scripts/stdmin.lua @@ -196,6 +196,18 @@ function table.deep_flat(t) return flat end + +function table.slice(arr, start, stop) + local sliced = {} + start = start or 1 + stop = stop or #arr + + for i = start, stop do + table.insert(sliced, arr[i]) + end + + return sliced +end ---------------------------------------------- local pattern_escape_replacements = { From e106a31d82d31f20323c2661191b2601f08bd917 Mon Sep 17 00:00:00 2001 From: Xertis Date: Tue, 4 Feb 2025 19:54:01 +0300 Subject: [PATCH 07/19] correction table.slice & adding get_default --- doc/ru/scripting/extensions.md | 8 +++++++- res/scripts/stdmin.lua | 17 +++++++++++++---- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/doc/ru/scripting/extensions.md b/doc/ru/scripting/extensions.md index cce639ec..c81510a2 100644 --- a/doc/ru/scripting/extensions.md +++ b/doc/ru/scripting/extensions.md @@ -76,6 +76,12 @@ table.set_default(t: table, key: number | string, default: any) -> any | default Позволяет безопасно получать значение по указанному ключу. Если ключ существует в таблице, метод вернет его значение. Если ключ отсутствует, метод установит его со значением **default** и вернет его. +```lua +table.get_default(t: table, key: number | string, default: any) -> any | default +``` + +Как и set аналог, позволяет безопасно получать значение по указанному ключу. Если ключ существует в таблице, метод вернет его значение. Если ключ отсутствует, метод вернёт значение **default** **без** установки нового значения в таблицу. + ```lua table.flat(t: table) -> table ``` @@ -89,7 +95,7 @@ table.deep_flat(t: table) -> table Возвращает глубокую "плоскую" версию исходной таблицы. ```lua -table.slice(arr: table, start: number | nil, stop: number | nil) -> table +table.sub(arr: table, start: number | nil, stop: number | nil) -> table ``` Возвращает обрезанную версию таблицы с индекса **start** до индекса **stop** включительно, при этом пары ключ-значение не сохраняются в новой таблице. При значениях **nil** начинает с **1** и заканчивает **#arr** соответственно. diff --git a/res/scripts/stdmin.lua b/res/scripts/stdmin.lua index fba17a53..107518ec 100644 --- a/res/scripts/stdmin.lua +++ b/res/scripts/stdmin.lua @@ -169,6 +169,14 @@ function table.set_default(t, key, default) return t[key] end +function table.get_default(t, key, default) + if t[key] == nil then + return default + end + + return t[key] +end + function table.flat(t) local flat = {} @@ -197,17 +205,18 @@ function table.deep_flat(t) return flat end -function table.slice(arr, start, stop) - local sliced = {} +function table.sub(arr, start, stop) + local res = {} start = start or 1 stop = stop or #arr for i = start, stop do - table.insert(sliced, arr[i]) + table.insert(res, arr[i]) end - return sliced + return res end + ---------------------------------------------- local pattern_escape_replacements = { From 0d32b1987cfb5b4b420bccbb9f1ef1fa010180c1 Mon Sep 17 00:00:00 2001 From: Xertis Date: Tue, 4 Feb 2025 20:09:36 +0300 Subject: [PATCH 08/19] I forgot about "t[x] or default" --- doc/ru/scripting/extensions.md | 6 ------ res/scripts/stdmin.lua | 8 -------- 2 files changed, 14 deletions(-) diff --git a/doc/ru/scripting/extensions.md b/doc/ru/scripting/extensions.md index c81510a2..c8b029ee 100644 --- a/doc/ru/scripting/extensions.md +++ b/doc/ru/scripting/extensions.md @@ -76,12 +76,6 @@ table.set_default(t: table, key: number | string, default: any) -> any | default Позволяет безопасно получать значение по указанному ключу. Если ключ существует в таблице, метод вернет его значение. Если ключ отсутствует, метод установит его со значением **default** и вернет его. -```lua -table.get_default(t: table, key: number | string, default: any) -> any | default -``` - -Как и set аналог, позволяет безопасно получать значение по указанному ключу. Если ключ существует в таблице, метод вернет его значение. Если ключ отсутствует, метод вернёт значение **default** **без** установки нового значения в таблицу. - ```lua table.flat(t: table) -> table ``` diff --git a/res/scripts/stdmin.lua b/res/scripts/stdmin.lua index 107518ec..b92708e5 100644 --- a/res/scripts/stdmin.lua +++ b/res/scripts/stdmin.lua @@ -169,14 +169,6 @@ function table.set_default(t, key, default) return t[key] end -function table.get_default(t, key, default) - if t[key] == nil then - return default - end - - return t[key] -end - function table.flat(t) local flat = {} From c22f7e0eb5a8b39289518c63f63a85ab00e4ca7f Mon Sep 17 00:00:00 2001 From: Xertis Date: Sun, 9 Feb 2025 14:06:23 +0300 Subject: [PATCH 09/19] add string.padding --- doc/ru/scripting/extensions.md | 18 ++++++++++++++++++ res/scripts/stdmin.lua | 21 +++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/doc/ru/scripting/extensions.md b/doc/ru/scripting/extensions.md index c8b029ee..8c22c3c9 100644 --- a/doc/ru/scripting/extensions.md +++ b/doc/ru/scripting/extensions.md @@ -180,6 +180,24 @@ string.escape(str: string) -> string Экранирует строку. Является псевдонимом `utf8.escape`. +```lua +string.padding(str: string, size: number, [опционально] char: string) -> string +``` + +Добавляет **char** слева и справа от строки, пока её размер не будет равен **size**. По стандарту **char** равен символу пробела + +```lua +string.left_padding(str: string, size: number, [опционально] char: string) -> string +``` + +Добавляет **char** слева от строки, пока её размер не будет равен **size**. По стандарту **char** равен символу пробела + +```lua +string.right_padding(str: string, size: number, [опционально] char: string) -> string +``` + +Добавляет **char** справа от строки, пока её размер не будет равен **size**. По стандарту **char** равен символу пробела + ## Расширения для math ```lua diff --git a/res/scripts/stdmin.lua b/res/scripts/stdmin.lua index b92708e5..d8ee2bb3 100644 --- a/res/scripts/stdmin.lua +++ b/res/scripts/stdmin.lua @@ -292,6 +292,27 @@ function string.trim_left(s, char) return string.match(s, "^" .. char .. "*(.+)$") or s end +function string.padding(str, size, char) + char = char == nil and " " or char + + local padding = math.floor((size - #str) / 2) + return string.rep(char, padding) .. str .. string.rep(char, padding) +end + +function string.left_padding(str, size, char) + char = char == nil and " " or char + + local left_padding = size - #str + return string.rep(char, left_padding) .. str +end + +function string.right_padding(str, size, char) + char = char == nil and " " or char + + local right_padding = size - #str + return str .. string.rep(char, right_padding) +end + string.lower = utf8.lower string.upper = utf8.upper string.escape = utf8.escape From 185b0e5cbd3265b5aaee49864f1fd480310c1f92 Mon Sep 17 00:00:00 2001 From: Xertis Date: Mon, 10 Feb 2025 16:24:28 +0300 Subject: [PATCH 10/19] upd string.left/right _padding --- doc/ru/scripting/extensions.md | 4 ++-- res/scripts/stdmin.lua | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/ru/scripting/extensions.md b/doc/ru/scripting/extensions.md index 8c22c3c9..3c7ced51 100644 --- a/doc/ru/scripting/extensions.md +++ b/doc/ru/scripting/extensions.md @@ -187,13 +187,13 @@ string.padding(str: string, size: number, [опционально] char: string) Добавляет **char** слева и справа от строки, пока её размер не будет равен **size**. По стандарту **char** равен символу пробела ```lua -string.left_padding(str: string, size: number, [опционально] char: string) -> string +string.left_pad(str: string, size: number, [опционально] char: string) -> string ``` Добавляет **char** слева от строки, пока её размер не будет равен **size**. По стандарту **char** равен символу пробела ```lua -string.right_padding(str: string, size: number, [опционально] char: string) -> string +string.right_pad(str: string, size: number, [опционально] char: string) -> string ``` Добавляет **char** справа от строки, пока её размер не будет равен **size**. По стандарту **char** равен символу пробела diff --git a/res/scripts/stdmin.lua b/res/scripts/stdmin.lua index d8ee2bb3..bbc1e08d 100644 --- a/res/scripts/stdmin.lua +++ b/res/scripts/stdmin.lua @@ -299,14 +299,14 @@ function string.padding(str, size, char) return string.rep(char, padding) .. str .. string.rep(char, padding) end -function string.left_padding(str, size, char) +function string.left_pad(str, size, char) char = char == nil and " " or char local left_padding = size - #str return string.rep(char, left_padding) .. str end -function string.right_padding(str, size, char) +function string.right_pad(str, size, char) char = char == nil and " " or char local right_padding = size - #str From 78ceff54e7807920066435a91ca066c12750e8cc Mon Sep 17 00:00:00 2001 From: Xertis Date: Mon, 10 Feb 2025 16:39:05 +0300 Subject: [PATCH 11/19] upd --- doc/ru/scripting/extensions.md | 2 +- res/scripts/stdmin.lua | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/ru/scripting/extensions.md b/doc/ru/scripting/extensions.md index 3c7ced51..32798e43 100644 --- a/doc/ru/scripting/extensions.md +++ b/doc/ru/scripting/extensions.md @@ -181,7 +181,7 @@ string.escape(str: string) -> string Экранирует строку. Является псевдонимом `utf8.escape`. ```lua -string.padding(str: string, size: number, [опционально] char: string) -> string +string.pad(str: string, size: number, [опционально] char: string) -> string ``` Добавляет **char** слева и справа от строки, пока её размер не будет равен **size**. По стандарту **char** равен символу пробела diff --git a/res/scripts/stdmin.lua b/res/scripts/stdmin.lua index bbc1e08d..9a438ba2 100644 --- a/res/scripts/stdmin.lua +++ b/res/scripts/stdmin.lua @@ -292,7 +292,7 @@ function string.trim_left(s, char) return string.match(s, "^" .. char .. "*(.+)$") or s end -function string.padding(str, size, char) +function string.pad(str, size, char) char = char == nil and " " or char local padding = math.floor((size - #str) / 2) From 39f3f123826893866d33822fd4d5e830c44796f4 Mon Sep 17 00:00:00 2001 From: Xertis <118364459+Xertis@users.noreply.github.com> Date: Mon, 10 Feb 2025 17:39:20 +0300 Subject: [PATCH 12/19] fix pad --- res/scripts/stdmin.lua | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/res/scripts/stdmin.lua b/res/scripts/stdmin.lua index 9a438ba2..5ebf0176 100644 --- a/res/scripts/stdmin.lua +++ b/res/scripts/stdmin.lua @@ -296,7 +296,9 @@ function string.pad(str, size, char) char = char == nil and " " or char local padding = math.floor((size - #str) / 2) - return string.rep(char, padding) .. str .. string.rep(char, padding) + local extra_padding = (size - #str) % 2 + + return string.rep(char, padding) .. str .. string.rep(char, padding + extra_padding) end function string.left_pad(str, size, char) From 06f3aee731bd45f262ce168804bb8a58c090ab79 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Wed, 12 Feb 2025 00:57:16 +0300 Subject: [PATCH 13/19] update Dockerfile --- Dockerfile | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index 83a4a05c..f52496de 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,9 +1,9 @@ -# Build docker container: docker build -t voxel-engine . -# Build project: docker run --rm -it -v$(pwd):/project voxel-engine bash -c "cmake -DCMAKE_BUILD_TYPE=Release -Bbuild && cmake --build build" -# Run project in docker: docker run --rm -it -v$(pwd):/project -v/tmp/.X11-unix:/tmp/.X11-unix -v${XAUTHORITY}:/home/user/.Xauthority:ro -eDISPLAY --network=host voxel-engine ./build/VoxelEngine +# Build docker container: docker build -t voxelcore . +# Build project: docker run --rm -it -v$(pwd):/project voxelcore bash -c "cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_RPATH_USE_LINK_PATH=TRUE -Bbuild && cmake --build build" +# Run project in docker: docker run --rm -it -v$(pwd):/project -v/tmp/.X11-unix:/tmp/.X11-unix -v${XAUTHORITY}:/home/user/.Xauthority:ro -eDISPLAY --network=host voxelcore ./build/VoxelEngine -FROM debian:bullseye-slim -LABEL Description="Docker container for building VoxelEngine for Linux" +FROM debian:bookworm-slim +LABEL Description="Docker container for building VoxelCore for Linux" # Install dependencies RUN apt-get update && apt-get install --no-install-recommends -y \ @@ -17,6 +17,7 @@ RUN apt-get update && apt-get install --no-install-recommends -y \ libglfw3-dev \ libglfw3 \ libglew-dev \ + libglew2.2 \ libglm-dev \ libpng-dev \ libopenal-dev \ From 71b313dee0d097e9559af89024220716ddcd4ad5 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Wed, 12 Feb 2025 01:02:09 +0300 Subject: [PATCH 14/19] update appimage.yml --- .github/workflows/appimage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/appimage.yml b/.github/workflows/appimage.yml index 14805655..e787016b 100644 --- a/.github/workflows/appimage.yml +++ b/.github/workflows/appimage.yml @@ -23,7 +23,7 @@ jobs: - name: Install dependencies run: | sudo apt-get update - sudo apt-get install -y build-essential libglfw3-dev libglfw3 libglew-dev \ + sudo apt-get install -y build-essential libglfw3-dev libglfw3 libglew-dev libglew2.2 \ libglm-dev libpng-dev libopenal-dev libluajit-5.1-dev libvorbis-dev \ libcurl4-openssl-dev libgtest-dev cmake squashfs-tools valgrind # fix luajit paths From f21fdbe9682b6ad84d3f029e65088971660cbdcf Mon Sep 17 00:00:00 2001 From: MihailRis Date: Wed, 12 Feb 2025 01:04:09 +0300 Subject: [PATCH 15/19] update libglew version in AppImageBuilder.yml --- dev/AppImageBuilder.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/AppImageBuilder.yml b/dev/AppImageBuilder.yml index 69e687e4..9f0ee3b1 100644 --- a/dev/AppImageBuilder.yml +++ b/dev/AppImageBuilder.yml @@ -23,7 +23,7 @@ AppDir: - libfam0 - libgcrypt20 - libglfw3 - - libglew2.1 + - libglew2.2 - libpng16-16 - libopenal1 - libasound2 From 84ff983fd693ab39d45febd82b1f4dcc42d3d901 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Wed, 12 Feb 2025 01:23:40 +0300 Subject: [PATCH 16/19] update AppImageBuilder.yml --- dev/AppImageBuilder.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dev/AppImageBuilder.yml b/dev/AppImageBuilder.yml index 9f0ee3b1..f4ffe233 100644 --- a/dev/AppImageBuilder.yml +++ b/dev/AppImageBuilder.yml @@ -11,12 +11,12 @@ AppDir: apt: arch: amd64 sources: - - sourceline: deb http://archive.ubuntu.com/ubuntu/ focal main restricted universe multiverse + - sourceline: deb http://archive.ubuntu.com/ubuntu/ jammy main restricted universe multiverse key_url: 'http://keyserver.ubuntu.com/pks/lookup?op=get&search=0x3b4fe6acc0b21f32' key_url: 'http://keyserver.ubuntu.com/pks/lookup?op=get&search=0x871920D1991BC93C' - - sourceline: deb http://archive.ubuntu.com/ubuntu/ focal-updates main restricted universe multiverse - - sourceline: deb http://archive.ubuntu.com/ubuntu/ focal-backports main restricted universe multiverse - - sourceline: deb http://archive.ubuntu.com/ubuntu/ focal-security main restricted universe multiverse + - sourceline: deb http://archive.ubuntu.com/ubuntu/ jammy-updates main restricted universe multiverse + - sourceline: deb http://archive.ubuntu.com/ubuntu/ jammy-backports main restricted universe multiverse + - sourceline: deb http://archive.ubuntu.com/ubuntu/ jammy-security main restricted universe multiverse include: - libbz2-1.0 - libexpat1 From 865073d5cd675fb7c551a9c7493b4bb4c2d33c89 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Wed, 12 Feb 2025 02:10:41 +0300 Subject: [PATCH 17/19] downgrade appimage action ubuntu version --- .github/workflows/appimage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/appimage.yml b/.github/workflows/appimage.yml index e787016b..ed214cd0 100644 --- a/.github/workflows/appimage.yml +++ b/.github/workflows/appimage.yml @@ -12,7 +12,7 @@ jobs: strategy: matrix: include: - - os: ubuntu-latest + - os: ubuntu-22.04 runs-on: ${{ matrix.os }} From 3430e5cd6ff772bc4653f3d437e45102f1acb587 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Wed, 12 Feb 2025 16:32:21 +0300 Subject: [PATCH 18/19] add 'player-entity' to defaults.toml --- res/config/defaults.toml | 1 + res/content/base/config/defaults.toml | 1 + src/content/Content.cpp | 4 +++- src/content/Content.hpp | 8 +++++++- src/content/ContentBuilder.cpp | 3 ++- src/content/ContentBuilder.hpp | 1 + src/content/ContentLoader.cpp | 5 +++++ src/io/engine_paths.hpp | 3 +-- src/logic/scripting/lua/libs/libgeneration.cpp | 7 +++++-- src/objects/Player.cpp | 12 ++++++++---- 10 files changed, 34 insertions(+), 11 deletions(-) diff --git a/res/config/defaults.toml b/res/config/defaults.toml index 53de523f..dd2bd314 100644 --- a/res/config/defaults.toml +++ b/res/config/defaults.toml @@ -1 +1,2 @@ generator = "core:default" +player-entity = "" diff --git a/res/content/base/config/defaults.toml b/res/content/base/config/defaults.toml index d292d2ce..a099c198 100644 --- a/res/content/base/config/defaults.toml +++ b/res/content/base/config/defaults.toml @@ -1 +1,2 @@ generator = "base:demo" +player-entity = "base:player" diff --git a/src/content/Content.cpp b/src/content/Content.cpp index 68e9cec3..1cc2fdd7 100644 --- a/src/content/Content.cpp +++ b/src/content/Content.cpp @@ -34,12 +34,14 @@ Content::Content( UptrsMap packs, UptrsMap blockMaterials, UptrsMap skeletons, - ResourceIndicesSet resourceIndices + ResourceIndicesSet resourceIndices, + dv::value defaults ) : indices(std::move(indices)), packs(std::move(packs)), blockMaterials(std::move(blockMaterials)), skeletons(std::move(skeletons)), + defaults(std::move(defaults)), blocks(std::move(blocks)), items(std::move(items)), entities(std::move(entities)), diff --git a/src/content/Content.hpp b/src/content/Content.hpp index 3a836c4e..b95ef247 100644 --- a/src/content/Content.hpp +++ b/src/content/Content.hpp @@ -201,6 +201,7 @@ class Content { UptrsMap packs; UptrsMap blockMaterials; UptrsMap skeletons; + dv::value defaults = nullptr; public: ContentUnitDefs blocks; ContentUnitDefs items; @@ -219,7 +220,8 @@ public: UptrsMap packs, UptrsMap blockMaterials, UptrsMap skeletons, - ResourceIndicesSet resourceIndices + ResourceIndicesSet resourceIndices, + dv::value defaults ); ~Content(); @@ -231,6 +233,10 @@ public: return resourceIndices[static_cast(type)]; } + inline const dv::value& getDefaults() const { + return defaults; + } + const rigging::SkeletonConfig* getSkeleton(const std::string& id) const; const BlockMaterial* findBlockMaterial(const std::string& id) const; const ContentPackRuntime* getPackRuntime(const std::string& id) const; diff --git a/src/content/ContentBuilder.cpp b/src/content/ContentBuilder.cpp index 49433dfd..c57a7ad8 100644 --- a/src/content/ContentBuilder.cpp +++ b/src/content/ContentBuilder.cpp @@ -84,7 +84,8 @@ std::unique_ptr ContentBuilder::build() { std::move(packs), std::move(blockMaterials), std::move(skeletons), - std::move(resourceIndices) + std::move(resourceIndices), + std::move(defaults) ); // Now, it's time to resolve foreign keys diff --git a/src/content/ContentBuilder.hpp b/src/content/ContentBuilder.hpp index cc35838c..7d3df1f6 100644 --- a/src/content/ContentBuilder.hpp +++ b/src/content/ContentBuilder.hpp @@ -73,6 +73,7 @@ public: ContentUnitBuilder entities {allNames, ContentType::ENTITY}; ContentUnitBuilder generators {allNames, ContentType::GENERATOR}; ResourceIndicesSet resourceIndices {}; + dv::value defaults = nullptr; ~ContentBuilder(); diff --git a/src/content/ContentLoader.cpp b/src/content/ContentLoader.cpp index d3df18f1..52f4ffa0 100644 --- a/src/content/ContentLoader.cpp +++ b/src/content/ContentLoader.cpp @@ -23,6 +23,7 @@ #include "data/dv_util.hpp" #include "data/StructLayout.hpp" #include "presets/ParticlesPreset.hpp" +#include "io/engine_paths.hpp" namespace fs = std::filesystem; using namespace data; @@ -760,6 +761,10 @@ void ContentLoader::load() { auto folder = pack->folder; + builder.defaults = paths.readCombinedObject( + EnginePaths::CONFIG_DEFAULTS.string() + ); + // Load world generators io::path generatorsDir = folder / "generators"; foreach_file(generatorsDir, [this](const io::path& file) { diff --git a/src/io/engine_paths.hpp b/src/io/engine_paths.hpp index 65e5e067..6bf62010 100644 --- a/src/io/engine_paths.hpp +++ b/src/io/engine_paths.hpp @@ -39,8 +39,7 @@ public: static std::tuple parsePath(std::string_view view); - static inline auto CONFIG_DEFAULTS = - std::filesystem::u8path("config/defaults.toml"); + static inline io::path CONFIG_DEFAULTS = "config/defaults.toml"; private: std::filesystem::path userFilesFolder {"."}; std::filesystem::path resourcesFolder {"res"}; diff --git a/src/logic/scripting/lua/libs/libgeneration.cpp b/src/logic/scripting/lua/libs/libgeneration.cpp index 855700a9..721803f3 100644 --- a/src/logic/scripting/lua/libs/libgeneration.cpp +++ b/src/logic/scripting/lua/libs/libgeneration.cpp @@ -6,6 +6,7 @@ #include "world/Level.hpp" #include "world/generator/VoxelFragment.hpp" #include "content/ContentLoader.hpp" +#include "content/Content.hpp" #include "engine/Engine.hpp" #include "../lua_custom_types.hpp" @@ -69,8 +70,9 @@ static int l_get_generators(lua::State* L) { /// @brief Get the default world generator /// @return The ID of the default world generator static int l_get_default_generator(lua::State* L) { + // content is not initialized yet auto combined = engine->getResPaths()->readCombinedObject( - EnginePaths::CONFIG_DEFAULTS.u8string() + EnginePaths::CONFIG_DEFAULTS.string() ); return lua::pushstring(L, combined["generator"].asString()); } @@ -81,4 +83,5 @@ const luaL_Reg generationlib[] = { {"load_fragment", lua::wrap}, {"get_generators", lua::wrap}, {"get_default_generator", lua::wrap}, - {NULL, NULL}}; + {NULL, NULL} +}; diff --git a/src/objects/Player.cpp b/src/objects/Player.cpp index 9058717c..cbedd676 100644 --- a/src/objects/Player.cpp +++ b/src/objects/Player.cpp @@ -63,10 +63,14 @@ Player::~Player() = default; void Player::updateEntity() { if (eid == ENTITY_AUTO) { - auto& def = level.content.entities.require("base:player"); - eid = level.entities->spawn(def, getPosition()); - if (auto entity = level.entities->get(eid)) { - entity->setPlayer(id); + const auto& defaults = level.content.getDefaults(); + const auto& defName = defaults["player-entity"].asString(); + if (!defName.empty()) { + auto& def = level.content.entities.require(defName); + eid = level.entities->spawn(def, getPosition()); + if (auto entity = level.entities->get(eid)) { + entity->setPlayer(id); + } } } else if (auto entity = level.entities->get(eid)) { position = entity->getTransform().pos; From b832b9850f709053b43714bb0e3481560711e872 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Wed, 12 Feb 2025 21:16:05 +0300 Subject: [PATCH 19/19] fix incorrect entity transform scale & rotation combination --- src/objects/Entities.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/objects/Entities.cpp b/src/objects/Entities.cpp index 32200cf8..c3357c24 100644 --- a/src/objects/Entities.cpp +++ b/src/objects/Entities.cpp @@ -31,8 +31,8 @@ static inline std::string SAVED_DATA_VARNAME = "SAVED_DATA"; void Transform::refresh() { combined = glm::mat4(1.0f); combined = glm::translate(combined, pos); - combined = glm::scale(combined, size); combined = combined * glm::mat4(rot); + combined = glm::scale(combined, size); displayPos = pos; displaySize = size; dirty = false;