Merge branch 'MihailRis:main' into main

This commit is contained in:
Astazium 2026-09-03 19:58:23 +03:00 • committed by GitHub
commit acb1f084f7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
24 changed files with 69 additions and 47 deletions

View file

@ -4,7 +4,7 @@ network.get("https://api.github.com/repos/MihailRis/VoxelEngine-Cpp/releases/lat
print(json.parse(s).name)
response_received = true
end, function (code)
print("repond with code", code)
print("respond with code", code)
response_received = true
end)

View file

@ -1,23 +1,23 @@
# Block Models (depricated)
> ![WARNING]
> The `model-primitives` property is deprecated. Use the [VCM format](vcm.md) for a textual description of the model's primitives.
Block model may be created with following properties:
```js
"model": "custom",
"model-primitives": {
"aabbs": [
// list of AABB primitives
],
// ... other primitives
}
```
**AABB** primitive is an array of values:
```
[x, y, z, width, height, depth, texture names for all 6 sides]
```
**tetragon** primitive (more like parallelogram) an array of three vectors, describing primitive position, X vector \* width, Y vector \* height.
# Block Models (deprecated)
> ![WARNING]
> The `model-primitives` property is deprecated. Use the [VCM format](vcm.md) for a textual description of the model's primitives.
Block model may be created with following properties:
```js
"model": "custom",
"model-primitives": {
"aabbs": [
// list of AABB primitives
],
// ... other primitives
}
```
**AABB** primitive is an array of values:
```
[x, y, z, width, height, depth, texture names for all 6 sides]
```
**tetragon** primitive (more like parallelogram) an array of three vectors, describing primitive position, X vector \* width, Y vector \* height.

View file

@ -151,7 +151,7 @@ block.raycast(start: vec3, dir: vec3, max_distance: number, [optional] dest: tab
Casts a ray from the start point in the direction of *dir*. Max_distance specifies the maximum ray length.
Argument `filter` can be used to tell ray what blocks can be skipped(passed through) during ray-casting.
To use filter `dest` argument must be filled with some value(can be nil), it's done for backwards compatability
To use filter `dest` argument must be filled with some value(can be nil), it's done for backwards compatibility
The `include_non_selectable` argument determines whether blocks that cannot be selected by the cursor will be included.
Example - `base:water`

View file

@ -63,6 +63,13 @@ input.get_mouse_delta() --> {int, int}
Returns cursor movement delta.
```lua
input.get_mouse_scroll() --> int
```
Returns the vertical mouse wheel offset accumulated during the current frame.
A positive value indicates scrolling up; a negative value indicates scrolling down.
```lua
input.get_bindings() --> strings array
```

View file

@ -186,7 +186,7 @@ inventory.clone(invid: int) -> int
-- Move an item from slotA of invA to slotB of invB.
-- invA may be the same as invB.
-- If slotB will be chosen automaticly if argument is not specified.
-- If slotB will be chosen automatically if argument is not specified.
-- The move may be incomplete if the available slot has no enough stack space.
inventory.move(invA: int, slotA: int, invB: int, slotB: int)

View file

@ -154,7 +154,7 @@ Returns position of the selected block or nil
player.get_selected_entity(playerid: int) -> int
```
Returns unique indentifier of the entity selected by player
Returns unique identifier of the entity selected by player
```lua
player.get_entity(playerid: int) -> int

View file

@ -8,7 +8,7 @@ The entity object is available in components as a global variable **entity**.
-- Deletes an entity (the entity may continue to exist until the frame ends, but will not be displayed in that frame)
entity:despawn()
-- Returns entity defintion index (integer ID)
-- Returns entity definition index (integer ID)
entity:def_index() -> int
-- Returns entity definition name (string ID)

View file

@ -34,6 +34,10 @@ input.get_mouse_pos() -> {number, number}
-- Возращает дельту позиции курсора.
input.get_mouse_delta() -> {number, number}
-- Возвращает вертикальное смещение колеса мыши, накопленное за текущий кадр.
-- Положительное значение соответствует прокрутке вверх, отрицательное - вниз.
input.get_mouse_scroll() -> number
```
## Создание обработчиков

View file

@ -79,7 +79,7 @@ Configuring connection. Disconnect-action is action that debugged instance must
- `frame` - Call stack frame index (indexing from most recent call)
- `local` - Local variable index (based on `paused` event stack trace)
- `path` - Requsted value path segments. Example: `['a', 'b', 5]` is `local_variable.a.b[5]`
- `path` - Requested value path segments. Example: `['a', 'b', 5]` is `local_variable.a.b[5]`
Responds with:

View file

@ -16,7 +16,7 @@ enum AttributeType:uint8 {
sizeof(AttributeType) == 1;
struct VertexAttribute {
AttributeType type; // data type is infered from attribute type
AttributeType type; // data type is inferred from attribute type
uint8 flags;
uint32 size;
float data[]; // if compressed, first 4 bytes of compressed data is decompressed size

View file

@ -67,16 +67,16 @@ function refresh_search()
local new_included = table.copy(packs_included)
local new_excluded = table.copy(packs_excluded)
local function score(pack_name)
if pack_name:lower():find(search_text) then
local function score(pack_id, pack_name)
if pack_name:lower():find(search_text) or pack_id:lower():find(search_text) then
return 1
end
return 0
end
local function sorting(a, b)
local score_a = score(packs_info[a][2])
local score_b = score(packs_info[b][2])
local score_a = score(a, packs_info[a][2])
local score_b = score(b, packs_info[b][2])
if score_a ~= score_b then
return score_a > score_b

View file

@ -11,6 +11,7 @@ local CONFIG_NAMES = {
function on_open()
refresh()
document.search_textbox.focused = true
end
function place_pack(panel, packinfo, callback)
@ -39,7 +40,7 @@ function refresh_search()
local pos = content.pos
local size = content.size
if title:lower():find(search_text) or search_text == '' then
if title:lower():find(search_text) or id:lower():find(search_text) or search_text == '' then
content.enabled = true
content.pos = {pos[1], visible * (size[2] + interval) - step}
visible = visible + 1

View file

@ -413,7 +413,7 @@ namespace audio {
/// @brief Load audio file info and PCM data
/// @param file audio file
/// @param headerOnly read header only
/// @throws std::runtime_error if I/O error ocurred or format is unknown
/// @throws std::runtime_error if I/O error occurred or format is unknown
/// @return PCM audio data
std::unique_ptr<PCM> load_PCM(const io::path& file, bool headerOnly);
@ -421,7 +421,7 @@ namespace audio {
/// @param file audio file path
/// @param keepPCM store PCM data in sound to make it accessible with
/// Sound::getPCM
/// @throws std::runtime_error if I/O error ocurred or format is unknown
/// @throws std::runtime_error if I/O error occurred or format is unknown
/// @return new Sound instance
std::unique_ptr<Sound> load_sound(const io::path& file, bool keepPCM);
@ -434,7 +434,7 @@ namespace audio {
/// @brief Open new PCM stream from file
/// @param file audio file path
/// @throws std::runtime_error if I/O error ocurred or format is unknown
/// @throws std::runtime_error if I/O error occurred or format is unknown
/// @return new PCMStream instance
std::unique_ptr<PCMStream> open_PCM_stream(const io::path& file);

View file

@ -69,7 +69,7 @@ public:
return 0;
}
if (in.fail()) {
logger.error() << "Wav::load_pcm: I/O error ocurred";
logger.error() << "Wav::load_pcm: I/O error occurred";
return -1;
}
return in.gcount();

View file

@ -119,7 +119,7 @@ class Hud : public util::ObjectsKeeper {
/// @brief Allow actual pause
bool allowPause = true;
bool debug = false;
/// @brief UI element will be dynamicly positioned near to inventory or in screen center
/// @brief UI element will be dynamically positioned near to inventory or in screen center
std::shared_ptr<gui::UINode> secondUI;
std::shared_ptr<gui::UINode> debugMinimap;

View file

@ -8,6 +8,7 @@ namespace gui {
virtual ~BasePanel() = default;
virtual void setOrientation(Orientation orientation) {
this->mainScrollDir = orientation;
this->orientation = orientation;
refresh();
}

View file

@ -114,7 +114,7 @@ void Container::act(float delta) {
void Container::scrolled(int value) {
auto size = getSize();
bool isVertical = actualLengthY > size.y;
bool isVertical = mainScrollDir == Orientation::VERTICAL;
int diff = (isVertical ? actualLengthY - size.y : actualLengthX - size.x);
int& scroll = (isVertical ? scrollY : scrollX);
@ -245,6 +245,7 @@ void Container::setSize(const glm::vec2& size) {
for (auto& node : nodes) {
node->reposition();
}
scrolled(0);
}
int Container::getScrollStep() const {

View file

@ -20,6 +20,7 @@ namespace gui {
int actualLengthY = 0;
int actualLengthX = 0;
bool scrollable = true;
Orientation mainScrollDir = Orientation::VERTICAL;
bool isScrolling() const {
return scrollbarTriggered;

View file

@ -91,6 +91,12 @@ static int l_get_mouse_delta(lua::State* L) {
return lua::pushvec2(L, engine->getInput().getCursor().delta);
}
static int l_get_mouse_scroll(lua::State* L) {
if (engine->isHeadless())
return 0;
return lua::pushinteger(L, engine->getInput().getScroll());
}
static int l_get_bindings(lua::State* L) {
if (engine->isHeadless())
return 0;
@ -181,6 +187,7 @@ const luaL_Reg inputlib[] = {
{"add_callback", lua::wrap<l_add_callback>},
{"get_mouse_pos", lua::wrap<l_get_mouse_pos>},
{"get_mouse_delta", lua::wrap<l_get_mouse_delta>},
{"get_mouse_scroll", lua::wrap<l_get_mouse_scroll>},
{"get_bindings", lua::wrap<l_get_bindings>},
{"get_binding_text", lua::wrap<l_get_binding_text>},
{"is_active", lua::wrap<l_is_active>},

View file

@ -323,7 +323,7 @@ namespace lua {
if (found == usertypeNames.end()) {
log_error(
"usertype is not registred: " + std::string(typeid(T).name())
"usertype is not registered: " + std::string(typeid(T).name())
);
} else if (getglobal(L, found->second)) {
setmetatable(L);

View file

@ -161,7 +161,7 @@ public:
state = ConnectionState::CLOSED;
break;
} else if (size < 0) {
logger.warning() << "an error ocurred while receiving from "
logger.warning() << "an error occurred while receiving from "
<< to_string(addr);
auto error = handle_socket_error("recv(...) error");
closesocket(descriptor);

View file

@ -8,10 +8,10 @@
#include "util/EnumMetadata.hpp"
enum class ParticleSpawnShape {
/// @brief Coordinates are regulary distributed within
/// @brief Coordinates are regularly distributed within
/// the volume of a ball.
BALL = 0,
/// @brief Coordinates are regulary distributed on
/// @brief Coordinates are regularly distributed on
/// a sphere.
SPHERE,
/// @brief Coordinates are uniform distributed within

View file

@ -19,7 +19,7 @@ namespace util {
/// @brief Simple heap implementation for memory-optimal sparse array of
/// small different structures
/// @note alignment is not impemented
/// @note alignment is not implemented
/// (impractical in the context of scripting and memory consumption)
/// @tparam Tindex entry index type
/// @tparam Tsize entry size type

View file

@ -323,7 +323,7 @@ void WorldRegions::processBlocksData(int x, int z, const BlockDataProc& func) {
try {
func(&blocksData, std::move(voxData));
} catch (const std::exception& err) {
logger.error() << "an error ocurred while processing blocks "
logger.error() << "an error occurred while processing blocks "
"data in chunk (" << gx << ", " << gz << "): " << err.what();
blocksData = {};
}