Giter Club home page Giter Club logo

voxelengine-cpp's Introduction

// fixme

voxelengine-cpp's People

Contributors

a-lex-ra avatar alexei-zebra avatar c4e10vek avatar callfishxt avatar clasher113 avatar danielprol1xy avatar doubledatastack avatar drdub avatar dsdemen avatar er2off avatar etocasper avatar igorkorobeynikov avatar infinitecoder01 avatar istudyatuni avatar koval01 avatar mihailris avatar mks14stdio avatar nigthlier avatar onran0 avatar quflax avatar rekvizitt avatar sergwest585 avatar v-gulevitc avatar winetgh avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

voxelengine-cpp's Issues

Segfault на FreeBSD

Пытался запустить на FreeBSD 13.2-RELEASE
Билдится, но при запуске выдает segfault и все.

Не собирается на Arch Linux («luaL_openlib» was not declared in this scope;)

При попытке запустить ./run.sh начинается сборка, которая обрывается на этом моменте:

In file included from /home/kort/VoxelEngine-Cpp/src/logic/scripting/api_lua.cpp:1:
/home/kort/VoxelEngine-Cpp/src/logic/scripting/api_lua.h:7:57: замечание: «#pragma message: better use LuaJIT instead of plain Lua»
    7 | #pragma message("better use LuaJIT instead of plain Lua")
      |                                                         ^
/home/kort/VoxelEngine-Cpp/src/logic/scripting/api_lua.cpp: In function «int luaopen_world(lua_State*)»:
/home/kort/VoxelEngine-Cpp/src/logic/scripting/api_lua.cpp:50:5: ошибка: «luaL_openlib» was not declared in this scope; did you mean «luaL_openlibs»?
   50 |     luaL_openlib(L, "world", worldlib, 0);
      |     ^~~~~~~~~~~~
      |     luaL_openlibs
/home/kort/VoxelEngine-Cpp/src/logic/scripting/api_lua.cpp: In function «int luaopen_player(lua_State*)»:
/home/kort/VoxelEngine-Cpp/src/logic/scripting/api_lua.cpp:108:5: ошибка: «luaL_openlib» was not declared in this scope; did you mean «luaL_openlibs»?
  108 |     luaL_openlib(L, "player", playerlib, 0);
      |     ^~~~~~~~~~~~
      |     luaL_openlibs
make[2]: *** [CMakeFiles/VoxelEngine.dir/build.make:944: CMakeFiles/VoxelEngine.dir/src/logic/scripting/api_lua.cpp.o] Ошибка 1
make[1]: *** [CMakeFiles/Makefile2:83: CMakeFiles/VoxelEngine.dir/all] Ошибка 2
make: *** [Makefile:91: all] Ошибка 2

Попытка заменить luaL_openlib на luaL_openlibs, понятное дело, не помогла.
Upd: установка luajit из репозитория extra, luajit-git из AUR или через команды из README также не помогли.
Немного о себе:

  • Arch Linux с ядром 6.6.8
  • cmake версии 3.28.1
  • Версия проекта: последняя, 0.17
  • Что делал: просто запустил ./run.sh

Не нашёл такой issue ранее, поэтому создаю новую. Если такая уже решена, пожалуйста, укажите.

Добавить консоль (чат)

Предлагаю сделать что-то типо чата из майна, но пока мультиплеера нет, чат будет использоваться для выполнения "консольных команд", которые можно будет биндить (назначать) через скрипты Lua.

Инвентари блоков не загружаются

Опишите ошибку
После перезахода в мир (не перезапуска игры, это важно!) инвентари блоков получают состояние, которое было до запуска игры

Для воспроизведения
Шаги для воспроизведения поведения:

  1. Откройте инвентарь блока, например с помощью мода на сундуки
  2. Добавьте пару блоков в инвентарь
  3. Закройте инвентарь
  4. Выйдите в главное меню
  5. Зайдите в мир
  6. Откройте инвентарь блока
  7. См. ошибку

Ожидаемое поведение
Изменения сохранятся, как происходит, если после шага №5 перезапустить игру

Техническая информация (заполните следующую информацию):

  • ОС: Cachy OS with KDE Plasma 6.0 RC2
  • Версия последний коммит (0.19)

Позиционирование камеры

При полёте вверх-вниз в чит-моде, камера сильно качается после остановки, а затем может и упасть куда-то "в ноги" (а может не упасть, раньше только раскачивалась).

P.S. tested in VirtualBox Ubuntu 22.04.03LTS со слабыми характеристиками
image

Не запускается

OS: Void linux
Linux: 6.6.2
Собрал через llvm/clang 17.0.3

pre_configure() {
  export CC=clang
  export CXX=clang++

  export AR=llvm-ar
  export NM=llvm-nm
  export RANLIB=llvm-ranlib

  export CFLAGS="${CFLAGS} -O3 -mtune=native -march=native"
  export CXXFLAGS="${CXXFLAGS} -O3 -mtune=native -march=native"
}

При сборке каждого объекта возникает предупреждение:
clang++: warning: -lstdc++fs: 'linker' input unused [-Wunused-command-line-argument]

При запуске:

Failed to initialize GLEW
-- loading assets
    loading res/shaders/main as main
    loading res/shaders/lines as lines
    loading res/shaders/ui as ui
    loading res/textures/blocks as blocks
    loading res/textures/menubg.png as menubg
    loading res/fonts/font as normal
max mono sources: 255
-- initializing finished
-- preparing systems
zsh: segmentation fault  ./VoxelEngine

RotationProfiles & AABB

Как-то я поставил пластину, что её хитбокс стоит в одном положении, а текстура рендерится в другом. Непорядок.
(у соседней пластины всё в порядке)

screenshot-2023-12-10_20-23-01
screenshot-2023-12-10_20-23-08
screenshot-2023-12-10_20-23-29

Круглый свет?

screenshot-2024-01-09_17-09-00
Блин, понимаю конечно: паритет с майном, может оптимизация проще, но куда приятнее и реалестичнее выглядил бы круглый свет

Баг с выталкиванием из хитбокса

По стандарту размеры блока ограничены 1х1х1, если выставить размер хитбокса блока например 2х2х2 то он будет выталкивать только до края хитбокса, при этом если выставить монструозные значения, как показано на видео, откинет настолько далеко, что мира там даже не существует.

output.mp4

Компилирование на Linux.

Переходим в bash

Убедитесь что вы находитесь в директории движка

$ sudo apt install libglfw3-dev libglfw3 libglew-dev libglm-dev # установка зависимостей

$ vi ./src/voxels/../files/WorldFiles.h # я как тру хацкер редактрую в vi

image

$ cd Debug

$ make # компилим

$ cd ..

$ ./Debug/voxel_engine # запускаем!

P.S: у меня дистр kali linux ARM64

некоторые недочеты в языковых пакетах

Похоже, я заметил некоторые недочеты в языковых пакетах, которые могут возникнуть из-за использования символов из различных стран. Вероятно, проблема кроется в папке с шрифтами, и, возможно, стоит создать шрифт для соответствующего языка. Было бы замечательно, если бы шрифт проверялся, и в случае отсутствия шрифта для конкретной страны использовался стандартный шрифт.

Ещё проблемы со светом

screenshot-2024-01-09_17-30-27
Тут сразу 2 проблемы:

  1. у светящихся блоков лучше убрать магкое освещение, а то странно - поставил свет, а вокруг него стало темнее
  2. проблема которая стара как мир - направление мягкого освещения
    image
    Решение проблемы можно поискать здесь https://0fps.net/2013/07/03/ambient-occlusion-for-minecraft-like-worlds/

Стандартные библиотеки

На данный момент в движке включен не весь набор стандартных библиотек, что мешает разработчикам модов.
Предлагаю добавить оставшиеся библиотеки, отключив в них небезопасные функции, которые позволяют вызывать сторонний c-код.
Данная мера направлена не на замену кастомных библиотек. Например, подключение библиотеки io не призвано заменить file, так как её api более удобно для использования в движке.
Добавление оставшихся библиотек нацелено на предоставление возможности использования уже существующих инструментов, которые опираются на стандарт языка. Это даст мододелам возможность улучшить процесс написания кода и создавать контент, вместо изобретения многочисленных "велосипедов".

Ошибка компиляции xml.cpp

Опишите ошибку
Ошибка компиляции xml.cpp:

/project/src/coders/xml.cpp:30:75: error: no matching function for call to 'from_chars(const char*, const char*, double&)'
   30 |     auto res = std::from_chars(text.data(), text.data()+text.size(), value);
      |                                                                           ^
In file included from /project/src/coders/xml.cpp:3:
/usr/include/c++/10/charconv:595:5: note: candidate: 'template<class _Tp> std::__detail::__integer_from_chars_result_type<_Tp> std::from_chars(const char*, const char*, _Tp&, int)'
  595 |     from_chars(const char* __first, const char* __last, _Tp& __value,
      |     ^~~~~~~~~~
/usr/include/c++/10/charconv:595:5: note:   template argument deduction/substitution failed:
In file included from /usr/include/c++/10/bits/move.h:57,
                 from /usr/include/c++/10/bits/stl_pair.h:59,
                 from /usr/include/c++/10/bits/stl_algobase.h:64,
                 from /usr/include/c++/10/bits/char_traits.h:39,
                 from /usr/include/c++/10/string:40,
                 from /project/src/coders/xml.h:4,
                 from /project/src/coders/xml.cpp:1:
/usr/include/c++/10/type_traits: In substitution of 'template<bool _Cond, class _Tp> using enable_if_t = typename std::enable_if::type [with bool _Cond = false; _Tp = std::from_chars_result]':
/usr/include/c++/10/charconv:584:11:   required by substitution of 'template<class _Tp> using __integer_from_chars_result_type = std::enable_if_t<std::__or_<std::__or_<std::is_same<typename std::remove_cv< <template-parameter-1-1> >::type, signed char>, std::is_same<typename std::remove_cv< <template-parameter-1-1> >::type, short int>, std::is_same<typename std::remove_cv< <template-parameter-1-1> >::type, int>, std::is_same<typename std::remove_cv< <template-parameter-1-1> >::type, long int>, std::is_same<typename std::remove_cv< <template-parameter-1-1> >::type, long long int>, std::is_same<typename std::remove_cv< <template-parameter-1-1> >::type, __int128> >, std::__or_<std::is_same<typename std::remove_cv< <template-parameter-1-1> >::type, unsigned char>, std::is_same<typename std::remove_cv< <template-parameter-1-1> >::type, short unsigned int>, std::is_same<typename std::remove_cv< <template-parameter-1-1> >::type, unsigned int>, std::is_same<typename std::remove_cv< <template-parameter-1-1> >::type, long unsigned int>, std::is_same<typename std::remove_cv< <template-parameter-1-1> >::type, long long unsigned int>, std::is_same<typename std::remove_cv< <template-parameter-1-1> >::type, __int128 unsigned> >, std::is_same<char, typename std::remove_cv< <template-parameter-1-1> >::type> >::value, std::from_chars_result> [with _Tp = double]'
/usr/include/c++/10/charconv:595:5:   required by substitution of 'template<class _Tp> std::__detail::__integer_from_chars_result_type<_Tp> std::from_chars(const char*, const char*, _Tp&, int) [with _Tp = double]'
/project/src/coders/xml.cpp:30:75:   required from here
/usr/include/c++/10/type_traits:2554:11: error: no type named 'type' in 'struct std::enable_if<false, std::from_chars_result>'
 2554 |     using enable_if_t = typename enable_if<_Cond, _Tp>::type;
      |           ^~~~~~~~~~~
gmake[2]: *** [CMakeFiles/VoxelEngine.dir/build.make:254: CMakeFiles/VoxelEngine.dir/src/coders/xml.cpp.o] Error 1

Для воспроизведения
Шаги для воспроизведения поведения:
docker run --rm -it -v$(pwd):/project voxel-engine /bin/bash -c "cmake -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON -DCMAKE_BUILD_TYPE=Release -Bbuild && cmake --build build"

Ожидаемое поведение
Компиляция без ошибок

Техническая информация (заполните следующую информацию):

  • ОС: linux
  • Версия 0.18, коммит: 84e8fd1

Дополнительный контекст
Мне кажется, что проблема в использовании auto в следующей функции:

double Attribute::asFloat() const {
    double value;
    auto res = std::from_chars(text.data(), text.data()+text.size(), value);
    if (res.ptr != text.data()+text.size()) {
        throw std::runtime_error("invalid number format "+escape_string(text));
    }
    return value;
}

Предлагаемое решение:
Заменить использование std::from_chars на std::stod, которая автоматически выбрасывает исключение с описанием ошибки:

 double Attribute::asFloat() const {
-   double value;
-    auto res = std::from_chars(text.data(), text.data()+text.size(), value);
-    if (res.ptr != text.data()+text.size()) {
-        throw std::runtime_error("invalid number format "+escape_string(text));
-    }
-    return value;
+    return std::stod(text);
 }

OsX

Планируется версия под макос?

Помогите со сборкой, пожалуйста!!!

Собираю проект, Windows MSYS2 MinGW:

User@pe4Ka-PC MINGW64 /c/Users/User/Desktop/VoxelEngine-Cpp
$ rm -r build
mkdir build
cd build
cmake -G "Unix Makefiles" -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ ..
make
rm: cannot remove 'build': No such file or directory
-- The C compiler identification is GNU 13.2.0
-- The CXX compiler identification is GNU 13.2.0
System is unknown to cmake, create:
Platform/MINGW64_NT-10.0-22621 to use this system, please post your config file on discourse.cmake.org so it can be added to cmake
-- Detecting C compiler ABI info
System is unknown to cmake, create:
Platform/MINGW64_NT-10.0-22621 to use this system, please post your config file on discourse.cmake.org so it can be added to cmake
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /mingw64/bin/gcc.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
System is unknown to cmake, create:
Platform/MINGW64_NT-10.0-22621 to use this system, please post your config file on discourse.cmake.org so it can be added to cmake
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /mingw64/bin/g++.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
CMake Error at /usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
  Could NOT find OpenGL (missing: OPENGL_opengl_LIBRARY OPENGL_glx_LIBRARY)
Call Stack (most recent call first):
  /usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:600 (_FPHSA_FAILURE_MESSAGE)
  /usr/share/cmake/Modules/FindOpenGL.cmake:545 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
  CMakeLists.txt:48 (find_package)


-- Configuring incomplete, errors occurred!
make: *** No targets specified and no makefile found.  Stop.

Не находит опен жи эль, помогите добрые люди!!!

Вода?

Связан ли ваш запрос на добавление функции с проблемой? Пожалуйста, опишите.
Сейчас, если в озере поставить любой блок, а затем убрать его - останется дыра

Опишите желаемое решение
Заполнение этой дыры.
Можно ещё текущую воду добавить

Дополнительный контекст
screenshot-2024-02-18_17-07-22

BUG

Опишите ошибку
Тут сразу две проблемы:
Не правильное отображение верхней грани блока на 256 высоте: она полностью прозрачна.

Для воспроизведения
Шаги для воспроизведения поведения:

  1. Постройте столб высотой 255 блоков (256 блоков игра не позволяет построить столб просто так, возможно это другой баг)
  2. Перейдите в режим полёта
  3. Выровняйтесь со столбом находясь чуть выше его верхней повернхности (чтобы персонаж был примерно на 255 высоте)
  4. Поставьте блок поверх 255 блока
  5. Посмотрите на верхнюю грань этого блока

Ожидаемое поведение
Блок должен отрисовываться корректно.

Скриншоты
image

Техническая информация (заполните следующую информацию):

  • ОС: linux
  • Версия 0.18

Дополнительный контекст
(отсутствует)

[CRITICAL] Русские названия миров в винде

Если создать мир с русским названием, а затем попытаться "Save and quit", то либо падение, либо выход в меню, но в любом случае название кодируется-декодируется некорректно, так что затем зайти в мир невозможно и есть большая вероятность упасть при инициализации main_menu (если в названии есть буква ц, например)
image

Speed up loading visible chunks

Проблема

В данный момент реализация выглядит так:

  1. Сначала грузим все ближайшие чанки
  2. Потом грузим дальние чанки

Таким образом подгрузка чанков происходит не самым оптимальным образом.

Ожидаемое решиние

Я считаю, что подгрузка чанков должна быть приоритезована по следующей схеме:

  1. Грузим самые ближайшие видимые чанки
  2. Грузим дальние видимые чанки
  3. Грузим ближайшие не видимые чанки (опционально)
  4. Грузим дальние не видимые чанки (опционально)

Кроме того, функция, которая определяет подгрузку чанков так и названа ChunkController::loadVisible(), что расходится с реализацией.

Черновой набросок

Я попробовал сделать черновой набросок того, как я думаю должно выглядеть исправление, правда пришлось добавить супер костыль, для доступа к классу WorldRenderer из метода ChunkController::loadVisible(). Вот что у меня примерно получилось:

------------------------ src/frontend/WorldRenderer.cpp ------------------------
index 8ae83df..c5d7d37 100644
@@ -39,6 +39,23 @@ using glm::mat4;
 using std::string;
 using std::shared_ptr;
 
+static WorldRenderer* renderer_;
+bool WorldRenderer::isChunkVisible(int cx, int cz)
+{
+	return renderer_->isChunkVisible_(cx, cz);
+}
+bool WorldRenderer::isChunkVisible_(int cx, int cz)
+{
+	vec3 min(cx * CHUNK_W,
+			 0,
+			 cz * CHUNK_D);
+	vec3 max(cx * CHUNK_W + CHUNK_W,
+			 CHUNK_H,
+			 cz * CHUNK_D + CHUNK_D);
+
+	return frustumCulling->IsBoxVisible(min, max);
+}
+
 WorldRenderer::WorldRenderer(Engine* engine, LevelFrontend* frontend)
 	: engine(engine),
 	  level(frontend->getLevel()),
@@ -57,6 +74,7 @@ WorldRenderer::WorldRenderer(Engine* engine, LevelFrontend* frontend)
 	auto assets = engine->getAssets();
 	skybox = new Skybox(settings.graphics.skyboxResolution,
 						assets->getShader("skybox_gen"));
+	renderer_ = this;
 }
 
 WorldRenderer::~WorldRenderer() {

------------------------- src/frontend/WorldRenderer.h -------------------------
index bb500c3..3f06ef8 100644
@@ -41,6 +41,9 @@ public:
 	void drawDebug(const GfxContext& context, Camera* camera);
 	void drawBorders(int sx, int sy, int sz, int ex, int ey, int ez);
 
+	static bool isChunkVisible(int cx, int cz);
+	bool isChunkVisible_(int cx, int cz);
+
 	static float fog;
 };
 

------------------------ src/logic/ChunksController.cpp ------------------------
index 3f6f006..4997aa2 100644
@@ -17,6 +17,7 @@
 #include "../world/World.h"
 #include "../maths/voxmaths.h"
 #include "../util/timeutil.h"
+#include "../frontend/WorldRenderer.h"
 
 
 const uint MAX_WORK_PER_FRAME = 64;
@@ -61,6 +62,7 @@ bool ChunksController::loadVisible(){
 	int minDistance = ((w-padding*2)/2)*((w-padding*2)/2);
 	for (uint z = padding; z < d-padding; z++){
 		for (uint x = padding; x < w-padding; x++){
+			if (!WorldRenderer::isChunkVisible(x+ox, z+oz)) continue;
 			int index = z * w + x;
 			auto chunk = chunks->chunks[index];
 			if (chunk != nullptr){

image

дополнительный контекст

Стоит отметить, что моя реализация не подгружает чанки за зоной видмости, хотя возможно стоило бы погрузить хотя бы ближайшие к камере чанки (например в радиусе 2 чанков). Кроме того, текущая версия isChunkVisible не корректно возвращает результат для пограничных чанков (см не прогруженные чанки слева и справа на скриншоте).

Результат тестирования

Как резульатат при черновой реализации я отметил существенное ускорение прогрузки чанков, попадающих в зону видимости камеры, что улучшает комфорт. Кроме того, игра стала потреблять кратно меньше количество памяти, т.к. теперь она не подгружает чанки находящиеся за пределами видимости, таким образом мне удалось поднять дальность прорисовки до максимума на моём ноутбуке со встроенной графикой и не слишком большом количестве ОЗУ.

Можно поставить факел за место травы, но это крайне неправильно

Можно поставить факел боком об траву.

Шаги для воспроизведения поведения:

  1. Создайте мир
  2. Найдите траву
  3. На стороне поставьте факел

По происшествию:
Трава исчезнет, факел появиться боком на месте травы.

image

Техническая информация: я думаю не имеет значения

Неопределённая ссылка на «lua_tointeger»

Я попытался собрать v16, получил следующую ошибку:

/usr/bin/ld: CMakeFiles/VoxelEngine.dir/src/logic/scripting/api_lua.cpp.o: в функции «l_block_name(lua_State*)»:
api_lua.cpp:(.text+0xa): неопределённая ссылка на «lua_tointeger»
/usr/bin/ld: CMakeFiles/VoxelEngine.dir/src/logic/scripting/api_lua.cpp.o: в функции «l_is_solid_at(lua_State*)»:
api_lua.cpp:(.text+0x5d): неопределённая ссылка на «lua_tointeger»
/usr/bin/ld: api_lua.cpp:(.text+0x6d): неопределённая ссылка на «lua_tointeger»
/usr/bin/ld: api_lua.cpp:(.text+0x7d): неопределённая ссылка на «lua_tointeger»
/usr/bin/ld: CMakeFiles/VoxelEngine.dir/src/logic/scripting/api_lua.cpp.o: в функции «l_set_block(lua_State*)»:
api_lua.cpp:(.text+0xf1): неопределённая ссылка на «lua_tointeger»
/usr/bin/ld: CMakeFiles/VoxelEngine.dir/src/logic/scripting/api_lua.cpp.o:api_lua.cpp:(.text+0x100): далее есть ещё неопределённые ссылки на «lua_tointeger»
/usr/bin/ld: CMakeFiles/VoxelEngine.dir/src/logic/scripting/api_lua.cpp.o: в функции «l_set_player_pos(lua_State*)»:
api_lua.cpp:(.text+0x2ee): неопределённая ссылка на «lua_tonumber»
/usr/bin/ld: api_lua.cpp:(.text+0x301): неопределённая ссылка на «lua_tonumber»
/usr/bin/ld: api_lua.cpp:(.text+0x329): неопределённая ссылка на «lua_tonumber»

...

/usr/bin/ld: CMakeFiles/VoxelEngine.dir/src/logic/scripting/scripting.cpp.o: в функции «scripting::on_block_broken(Player*, Block const*, int, int, int)»:
scripting.cpp:(.text+0xd7a): неопределённая ссылка на «lua_pcall»
/usr/bin/ld: CMakeFiles/VoxelEngine.dir/src/logic/scripting/scripting.cpp.o:scripting.cpp:(.text+0xeda): далее есть ещё неопределённые ссылки на «lua_pcall»
/usr/bin/ld: CMakeFiles/VoxelEngine.dir/src/logic/scripting/scripting.cpp.o: в функции «scripting::load_block_script(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::filesystem::__cxx11::path, block_funcs_set*)»:
scripting.cpp:(.text+0x110d): неопределённая ссылка на «luaL_loadbuffer»
/usr/bin/ld: scripting.cpp:(.text+0x116b): неопределённая ссылка на «lua_pcall»
collect2: ошибка: выполнение ld завершилось с кодом возврата 1
gmake[2]: *** [CMakeFiles/VoxelEngine.dir/build.make:1449: VoxelEngine] Ошибка 1
gmake[1]: *** [CMakeFiles/Makefile2:83: CMakeFiles/VoxelEngine.dir/all] Ошибка 2
gmake: *** [Makefile:91: all] Ошибка 2

Сижу на Fedora Linux, версии библиотек (и прочего):

cmake - 3.27.7
g++ - 13.2.1 20231011
gcc - 13.2.1 20231011
glew-devel - 2.2.0
glfw - 3.3.8
glfw-devel - 3.3.8
glm-devel - 0.9.9.8
libpng-devel - 1.6.37
glew-devel - 2.2.0
glfw - 3.3.8
glfw-devel - 3.3.8
libpng-devel - 1.6.37

Как пофиксить ошибку? Возможно, я не установил какие-то либы?

Add docker support as step1 to automation testing

I found it pretty useful to use Docker containers for building/testing/running projects. It allows to build project on any linux sytem without installing any external library to the system and it is guaranteed to be working on it. I will create and commit it in 10 minutes, so I will just create a ticket to document it :)

Легальный X-Ray

Если сделать "непрорачное" стекло, то текстуры за ним не прорисовываются и видно пустые блоки сквозь пустоту
Код блока:
{ "texture": "glass", "draw-group": 2, "light-passing": false }

screenshot-2023-12-30_16-54-36

Звуки?

Связан ли ваш запрос на добавление функции с проблемой? Пожалуйста, опишите.
Звуков не хватает

Опишите желаемое решение
Добавить в контент-паки звуки, так же как и текстуры

Предложение: Улучшить workflow сборки и добавить прочие workflow.

Можно использовать "actions/upload-artifact@v3" для сохранения результата сборки workflow. Что бы можно было скачать билд конкретного коммита и протестировать именно его.

Добавить копию workflow сборки проекта на linux и переделать её под windows.

Так же можно добавить workflow для автоматической сборки проекта и создания релиза (пример)

Не работает на Arch

image
Зависимости установил, LuajIT тоже, запускал 0.16, предпоследние акшины тоже.

WorldGen в контент-паках

Связан ли ваш запрос на добавление функции с проблемой? Пожалуйста, опишите.
Хотелось бы иметь возможность влиять на генерацию мира из контент-паков

Опишите желаемое решение
С помощью шума перлина разбить мир на биомы. Выполнить LUA функцию из файла для этого биома на каждом столбце в области биома. Добавить в стандартную библиотеку функции шума перлина и псевдослучайных чисел

Upgrade Memory Management to Smart Pointers

Objective:

Upgrade the existing memory management in the project by replacing the usage of raw pointers, new, and delete operators with modern C++ smart pointers, specifically std::unique_ptr and std::shared_ptr.

Background:

The current codebase utilizes manual memory management through the use of new and delete operators, which can lead to potential memory leaks, dangling pointers, and increased code complexity. By transitioning to smart pointers, we aim to enhance code safety, readability, and maintainability while reducing the risk of memory-related issues.

Benefits:

  1. Automatic Resource Management: Smart pointers automatically handle memory deallocation when the object is no longer in use, minimizing the risk of memory leaks.
  2. Improved Code Readability: The use of smart pointers makes code more expressive and self-documenting, reducing the likelihood of manual memory management errors.
  3. Easier Maintenance: Smart pointers simplify resource management, making it easier to maintain and update the codebase over time.

Tasks:

  1. Identify areas in the codebase where manual memory management (e.g., new and delete operators) is prevalent.
  2. Replace raw pointers with std::unique_ptr where exclusive ownership is appropriate.
  3. Replace raw pointers with std::shared_ptr where shared ownership is required.
  4. Update existing code to accommodate the changes.
  5. Perform thorough testing to ensure the new smart pointer-based memory management does not introduce any regressions.

Considerations:

  1. Review and handle cases where custom deleters are used with new and delete.
  2. Assess potential performance implications, although modern C++ compilers are optimized for efficient smart pointer usage.
  3. Collaborate with the team to address any concerns or challenges encountered during the transition.

Completion Criteria:

  1. All instances of new and delete are replaced with appropriate smart pointers.
  2. Code compiles successfully after the changes.
  3. No memory leaks or related issues are detected during thorough testing.

Фастревел

Если в ноуклипе залететь в землю и выключил ноуклип пойти в какую то из сторон, начинает относить до 4096 координаты по x.

output.mp4

Мультиплеер?

Хочу спросить, будет ли в этом проекте мультиплеер, как и в майнкрафте собственно

Утечка памяти

LevelController::LevelController(EngineSettings& settings, Level* level) 
    : settings(settings), level(level) {
    blocks = new BlocksController(level, settings.chunks.padding);
    chunks = new ChunksController(level, settings.chunks.padding);
    player = new PlayerController(level, settings, blocks);

    scripting::on_world_load(level);
}

LevelController::~LevelController() {
    scripting::on_world_quit();
    delete player;
    delete chunks;
}

У aabb моделей некорректо отображается текстура

screenshot-2023-12-10_22-48-21
хитбокс и текстура не совпадают, скорее всего отсчёт по x начинается не там. с z всё нормально.
содержимое файла:
{ "texture-faces": [ "pipe_side", "pipe_side", "pipe_hole", "pipe_hole", "pipe_side", "pipe_side" ], "model": "aabb", "hitbox": [0.5, 0.0, 0.0, 0.5, 0.5, 0.5], "light-passing": true, "rotation": "pipe" }

не двигается курсор

скачал готовый exe с гугл драйва, передвигаются все норм. лкм работает, но не двигается камера

Перемещение игрока крайне затрудняется после 65635 координаты.

Шаги для воспроизведения поведения:

  1. Запустить игру.
  2. С помощью DEBUG меню (F3) телепортироваться на координаты X: 65635 Z: -65635
  3. Убедиться, что игрок вне полёта более неспособен перемещаться по X и Z координате.

Ожидаемое поведение
Свободное покорение лимитов long long

Видео с багом:
https://youtu.be/AK0_RpJBDFU

Тех. информация:

  • Версия 0.18 Release
  • ОС: Win 11 Pro License
  • GPU: Radeon RX 580 8gb
  • CPU: Ryzen 5 5600X
  • RAM: 32GB DDR4

Публикация контейнера Docker

В проекте уже есть способ создания Docker образа из которого можно делать контейнеры. Почему бы не добавить автоматическую публикацию образа в GitHub Registry через GitHub Actions? Тогда пользователям, как в #133 не надо будет собирать контейнеры самостоятельно.

Можно добавить дополнительную инструкцию по получению образа и запуска игры из контейнера (инструкция для запуска игры из контейнера уже есть). По сути инструкция будет состоять из двух шагов.

Миграция на Vulkan API?

Вулкан – прямое продолжение OpenGL, но более оптимизирован под многоядерность, быстрее рендерит но, кажется, многословнее в написании. Зато простор для оптимизации и более современные технологии.. worth it? думаю, что да

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.