Батч 2. Мир не переезжает в Rapier целиком: геометрия карты остаётся брашевой, Rapier обслуживает только динамические тела. Четыре дефекта найдены измерением на gm_construct, а не догадкой — каждый следующий был невидим, пока не закрыт предыдущий: 1. Рельеф раздувался в 15 277 коллайдеров (сетка LAND_CELL дублировала каждый треугольник в каждую ячейку). Заменено одним объединённым trimesh с дедупликацией вершин: 11 776 треугольников -> 6 148 вершин, 1 коллайдер. Точнее и на порядки дешевле. 2. Уровень gm_construct построен брашами, а не displacement'ами: без них все пропы падали насквозь. add_brushes восстанавливает вершины перебором троек плоскостей (Крамер). Замер: 2121 построен, 5 пропущено. 3. Broad-phase Rapier наполняется только на step(): после вставки статики луч её не видел. Лечится явным broad_phase.set_aabb(). 4. setup_physics начинался с PhysicsWorld::new() и стирал построенные браши. Тест поймал баг, который замер бы не увидел: add_brushes создавал коллайдеры, но не увеличивал счётчик, и лог врал (static = 1 при 2121 браше). Проверка двумя независимыми системами коллизий: и Rapier, и брашевая Collision находят пол под пропами на z = -96. После 400 кадров все 4 prop_physics осели: speed = 0.0, sleeping = true. Ограничения зафиксированы в docs/PARITY.md: коллайдер пропа — AABB модели, а не vcollide; физика только у prop_physics*; FPS просел до 10-21 и требует отдельного замера. Тестов 55 в engine (было 42), 23 набора по воркспейсу, clippy чист.
54 lines
1.2 KiB
TOML
54 lines
1.2 KiB
TOML
[workspace]
|
|
resolver = "2"
|
|
members = [
|
|
"crates/tier",
|
|
"crates/math",
|
|
"crates/fs",
|
|
"crates/formats",
|
|
"crates/engine",
|
|
"crates/render",
|
|
"crates/net",
|
|
"crates/client", "crates/lua",
|
|
]
|
|
|
|
[workspace.package]
|
|
version = "0.1.0"
|
|
edition = "2024"
|
|
rust-version = "1.85"
|
|
|
|
[workspace.dependencies]
|
|
# внутренние крейты
|
|
tier = { path = "crates/tier" }
|
|
math = { path = "crates/math" }
|
|
fs = { path = "crates/fs" }
|
|
formats = { path = "crates/formats" }
|
|
engine = { path = "crates/engine" }
|
|
render = { path = "crates/render" }
|
|
net = { path = "crates/net" }
|
|
|
|
# Физика
|
|
rapier3d = "0.36"
|
|
|
|
# внешние
|
|
anyhow = "1"
|
|
bytemuck = { version = "1", features = ["derive"] }
|
|
clap = { version = "4.5", features = ["derive"] }
|
|
crc32fast = "1"
|
|
flate2 = "1"
|
|
lzma-rs = "0.3"
|
|
parking_lot = "0.12"
|
|
pollster = "0.4"
|
|
rustc-hash = "2"
|
|
serde = { version = "1", features = ["derive"] }
|
|
sdl3 = { version = "0.20", features = ["raw-window-handle", "build-from-source"] }
|
|
thiserror = "2"
|
|
toml = "0.9"
|
|
tracing = "0.1"
|
|
tracing-subscriber = { version = "0.3", features = ["env-filter", "fmt"] }
|
|
wgpu = "30"
|
|
|
|
[profile.dev]
|
|
opt-level = 1
|
|
|
|
[profile.dev.package."*"]
|
|
opt-level = 2
|