Commit Graph
43 Commits
Author SHA1 Message Date
西风逍遥游 0a1c8ebad3 feat(action): drive collision ignore windows 2026-09-13 06:06:39 +08:00
西风逍遥游 c0cbd48bf2 fix(cloth): keep softbody demo wind configuration static 2026-09-12 06:54:57 +08:00
西风逍遥游 e3f80680e0 fix(cloth): retain wind bindings across frames 2026-09-12 01:05:41 +08:00
西风逍遥游 b6f1b519da Merge remote-tracking branch 'origin/dev' into codex/cloth-obi80
# Conflicts:
#	src/modules/physics/Cloth3D.h
#	src/modules/physics/Physics.cpp
#	src/modules/physics/Physics.h
2026-09-12 00:18:44 +08:00
西风逍遥游 1df8e3276d fix(cloth): drive 3D demo through wind velocity 2026-09-11 20:40:51 +08:00
西风逍遥游 5deb9cd43d fix(cloth): expose 3D force with core bindings 2026-09-11 19:39:11 +08:00
西风逍遥游 2d54a79649 Merge dev and repair cloth CI 2026-09-11 16:24:36 +08:00
西风逍遥游 569169fc83 feat(physics): add modular volumetric soft bodies 2026-09-11 16:17:20 +08:00
西风逍遥游 268fb0e7fd fix(cloth): avoid GCC structured binding copy 2026-09-11 14:31:41 +08:00
西风逍遥游 3f2f4bab07 feat(physics): add modular rope runtime 2026-09-11 14:20:17 +08:00
西风逍遥游 98d1763cef refactor(physics): extract cloth satellite module 2026-09-11 14:15:29 +08:00
西风逍遥游 30740b69ca feat(physics): bring cloth to Obi core parity 2026-09-11 13:50:40 +08:00
西风逍遥游andCursor 24502babef Nest satellite packages under their host modules.
Keep CMake module names and trim switches, but stop flattening editing/editor and runtime bridges as top-level src/modules directories. Parent scans skip nested facets so runtime-3d can drop authoring by directory leaf.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-06 17:56:12 +08:00
西风逍遥游 1d8f7b5391 feat(graphics): add unified 2D and 3D primitive drawing 2026-09-02 16:08:15 +08:00
西风逍遥游 c85386f83d feat(procgen): complete script-first spatial foundation 2026-08-31 08:49:00 +08:00
西风逍遥游 6cd28ed28a fix(editor): satisfy CI contracts and manifests 2026-08-29 09:34:27 +08:00
西风逍遥游 a894f349cf feat(editor): complete module tooling and profiler 2026-08-29 09:34:27 +08:00
西风逍遥游 9ff0a026eb feat: add climbing and parkour system 2026-08-28 20:21:50 +08:00
西风逍遥游 d9ff179810 refactor(physics): rename particle fluid to Fluid2D 2026-08-28 09:13:28 +08:00
西风逍遥游 63246b8c68 fix: complete architecture consolidation contracts 2026-08-28 00:01:55 +08:00
西风逍遥游 f3fc615443 fix: make physics teardown order independent 2026-08-27 22:22:51 +08:00
西风逍遥游 293be41d66 Merge remote-tracking branch 'origin/dev' into codex/architecture-consolidation
# Conflicts:
#	cmake/module_manifest.cmake
#	docs/usr/modules/procgen.md
#	src/engine/CMakeLists.txt
#	src/engine/cmdline/Run.cpp
#	src/engine/common/ScriptModule.h
#	src/modules/animation/Animation.cpp
#	src/modules/physics/World.cpp
#	src/modules/physics/World3D.cpp
#	src/modules/procgen/Procgen.cpp
#	src/modules/procgen/Procgen.h
#	src/modules/scene/SceneCapabilities.cpp
#	src/modules/schema/Schema.cpp
#	src/modules/schema/Schema.h
2026-08-27 14:52:28 +08:00
西风逍遥游 a8b8e83128 refactor: consolidate engine architecture contracts 2026-08-27 12:54:48 +08:00
西风逍遥游 9a485b045b Merge branch 'dev' into codex/runtime-profiler 2026-08-26 14:30:50 +08:00
西风逍遥游 3ac1411d85 feat(profiler): add built-in engine-wide profiler
Introduce a Tracy/UE-Insights-style scoped-zone profiler that instruments the
engine's core per-frame systems and reports per-module/per-zone self vs total
time plus GPU frame timing.

- common/Profile.* : core zone collector (eve::prof). EV_PROFILE_* RAII macros
  push {name,module,thread,parent,depth,start,end} into per-thread buffers;
  frameMark() aggregates the frame into a call tree with self/total per module
  and zone, sorted by self time. Cheap single-branch no-op when disabled.
  Lives in common/ so any module can instrument without layering violations.
- profiler module (SLOT profiler): script API setEnabled()/beginFrame()/
  endFrame()/begin()/end()/capture()/textReport()/frameMs()/gpuFrameMs().
  Installs itself as the IRenderTracer so render passes become graphics zones.
- Instrument core hot systems: physics (World/World3D), animation, particles,
  audio pump, ui render, scene transforms, map tiles, crowd, event pump.
- GPU timing: Vulkan timestamp queries around the present command buffer
  (whole-frame), exposed via common/GpuTimer.h IGpuTimer capability provided by
  graphics; read after the synchronous submit waits the in-flight fence.
- load.nut drives frameBegin()/endFrame() + section markers, no-op when absent.
- Tests: C++ unit (core aggregation self<total, render-pass zones) + script API.

Verified: all changed TUs compile against real VKBuilder/ECS/zeroerr headers;
module_depgraph.py --check / --check-layers pass. Full-link build blocked in
this env by a prebuilt third-party Squirrel version mismatch (unrelated).
2026-08-26 00:44:26 +08:00
sunxfancy e896a60e2e feat(physics): expand 3D collision and rigid body systems 2026-08-25 22:04:54 +08:00
西风逍遥游 ff7c4fab91 feat(camera): complete rigs obstruction and timeline integration 2026-08-24 21:43:42 +08:00
西风逍遥游 10de850214 Merge origin/dev into codex/vehicle-system 2026-08-24 10:43:06 +08:00
西风逍遥游 ccb40f7b74 feat(vehicle): physics-driven movement (wheel/track/ship + 3D raycast suspension) 2026-08-23 18:51:26 +08:00
西风逍遥游 92cd886bd4 fix: CI failures for cloth PR
- examples/softbody3d: pass explicit Box3D shape arguments (script bindings
  do not apply C++ default args) and use math.polarX/polarY instead of
  math.sin/cos (EVEngine's math module shadows the standard table)
- ClothGPU: drop unused local in reset() (MSVC /W4 /WX C4189)
- docs: add missing Cloth/Cloth3D API entries to the physics quick reference
2026-08-23 15:12:19 +08:00
西风逍遥游 188012ee47 feat(physics): 2D/3D cloth with self-collision, fold limits, body collision, and GPU backend
- Cloth3D: meter-space Verlet cloth with triangle-level self-collision, dihedral fold-angle limit, mass-proportional rigid-body collision, double-sided mesh rendering
- Cloth (2D): self-collision, fold-angle limit, mass-proportional body collision, Fluid-style interactAt
- ClothGPU: compute-shader Verlet + distance constraints (double-buffered Jacobi), overflow-free atomicExchange spatial-hash self-collision, Sequence single-submission per frame
- World/World3D point probes for particle-vs-body queries; Body3D::getMass; Squirrel bindings for all new APIs
- examples/softbody3d demo; softbody/softbody_gpu/physics_cloth tests; user/dev docs
2026-08-23 13:54:20 +08:00
西风逍遥游 34d1fdb63b refactor(modules): clear remaining back-edges and split the largest TUs (#127)
* chore(ci): add clang-format gate, CODEOWNERS and agent collaboration rules

* refactor(modules): clear remaining back-edges and split the largest TUs

Three known dependency back-edges are gone (module_depgraph.py KNOWN_BACK_EDGES
is now empty; --check passes with 0 violations, 0 cycles):

- window -> graphics: window queries the new IWindowSurfaceHost capability
  (common/WindowSurfaceHost.h) instead of holding a Graphics pointer;
  Window::setGraphics was removed and all call sites updated.
- window -> image: Window::setIcon was replaced by setIconRGBA(const uint8_t*,
  w, h); the window no longer decodes ImageData.
- scene -> graphics: pickScreenAt / collectFrustumIdsAt implementations moved
  to graphics/ScenePicking.cpp (graphics -> scene is a legal downward edge);
  scene now depends only on spatial.

TU splits (pure moves, verified identical method sets and brace balance):

- vulkan/Graphics.cpp (5118 lines) -> Graphics.cpp (lifecycle), GraphicsPipeline,
  Graphics2D, Graphics3D, GraphicsMesh + shared GraphicsInternal.h.
- scene/Scene.cpp -> Scene.cpp (script layer / host lifecycle / serialization)
  + SceneNodes.cpp + shared SceneInternal.h.

Verified with a real build (MSVC 19.51, prebuilt third-party): full build green;
window.* and Scene.* suites pass, including scene picking/culling and GPU cases.

* refactor(graphics): narrow Graphics interfaces and clear public-header leaks

Step 4 — interface segregation:
- New lean interfaces: IGraphics2D, IGraphics3D, IResourceFactory, IPostFX
  (pure virtuals, forward-declared types only; graphics/Color.h extracted from
  Canvas.h so modules that only need the color type stop pulling Canvas.h).
- Graphics now implements all four facets; consumers can depend on the narrow
  interface they use instead of the 129-method god class.
- Migrated voxel (VoxelWorld::drawVisible -> IGraphics3D*) and model3d
  (ModelRenderer::buildRenderable(s) -> IResourceFactory&).
- Graphics.h slims from 24 sub-header includes to a handful of small type
  headers + forward declarations; the destructor moved out-of-line so
  unique_ptr effect members are destroyed where types are complete.

Step 5 — header leaks (module_depgraph.py '*' marks: 14 -> 7):
- map/TileLayer.h, particles/ParticleEmitter.h, avatar/AvatarInstance.h,
  animation/SpineAnim.h, map/TileSystem.h, model3d/ModelData.h,
  model3d/ModelRenderer.h, audio/Audio.h + Source.h, image/ImageData.h +
  Image.h, dialogue/Dialogue.h, procgen Palette/OutputSpec/TextureRecipe/
  PbrMaterial -> forward declarations, includes moved to .cpp.
- voxel/VoxelWorld.h: terrain sampler Pimpl'd (unique_ptr + out-of-line
  destructor), removing the procgen header dependency.
- gpgpu/vulkan backend headers stop pulling graphics/vulkan/Graphics.h.
- Remaining '*' marks are deliberate: tiny POD/enum headers (GridConfig,
  MapObject, BlendMode, Color), an internal backend header
  (GraphicsInternal.h -> filesystem), and lean interface references.

Verified with a full clean build (MSVC) and tests: window/Scene/voxel/
RenderSystem/Quad/shader/TextureSampler/resourceLifetime pass; broad suite
only shows the pre-existing PHYSFS-init filesystem-environment failures.

* feat(resources): revive ResourceManager as unified IAssetReloader-backed cache

* fix(resources): leak ResourceManager singleton to avoid exit-time teardown crashes

Cached CPU resources may own third-party handles (FreeType faces, Assimp
scenes, image decode handlers) whose libraries are torn down at process
exit in an unspecified TU order; destroying cached entries from the
singleton destructor can segfault at exit (seen on CI Windows in
model3d.materialApi.objMtl). Keep the singleton alive until OS reclaim;
explicit unload()/clear() still release entries during the run.

* refactor(devtools): consume business modules through capability interfaces

DevTools / cmdline no longer include business-module headers, so trimming
scene / physics / procgen / particles / audio / ui / graphics no longer
requires disabling devtools, and devtools can be switched off with
-DEVENGINE_MODULE_DEVTOOLS=OFF.

New capability interfaces in common/:
- ISceneQuery (scene) - host/node inspection + mutation + transform sync
- IRenderCapture (graphics) - render status, PNG capture, camera control,
  visible-entity snapshot, entity-ID mask, G-buffer PNGs
- IPhysicsQuery (physics) - 2D world lifecycle + ray casts
- IProcgenQuery (procgen) - recipe listing, map/mesh generation
- IParticlesQuery (particles) - emitter status + one-shot emit
- IAudioQuery (audio) - volume / stop-all
- IEditorHost (ui) - declarative editor host (used by cmdline too)

Providers register in their module constructors. DevTools rewires McpServer
(render/scene/procgen/physics/particles/audio/host tools), SceneInspect
(now delegates to ISceneQuery + IRenderCapture) and RenderVision (uses
IRenderCapture::capturePngDataUrl); cmdline/Mcp.cpp uses IEditorHost.

manifest: devtools DEPS graphics scene physics procgen particles audio ui
image event filesystem -> event; cmdline DEPS filesystem ui -> filesystem.

Verified: full build green; devtools.mcp.* tests pass; broad suite shows
only the pre-existing PHYSFS-init filesystem-environment failures.

* style: apply clang-format to changed lines after dev merge

* fix(webgpu): include RenderControl/TextureSampler explicitly after Graphics.h slimming

* fix(webgpu): provide newFont/print stubs to satisfy IGraphics2D/IResourceFactory vtables

* fix(common): make ProcgenQuery.h self-sufficient (cstdint/utility for GCC)
2026-08-20 05:53:33 +08:00
西风逍遥游 a2292a8427 fix(modules): instance state for PlacementSystem; declare procgen deps for editor/voxel
PlacementSystem's eight function-local static registries/counters move into a single instance's member state. Editor's heightmap API is guarded by EVENGINE_HAS_PROCGEN (web builds exclude procgen) and voxel now declares its hard procgen dependency; both module layers are corrected to match their real includes so the declared-layer check passes.
2026-08-19 22:44:52 +08:00
西风逍遥游 4377e062dd feat: zeroerr parameter validation + Doxygen API documentation
Squashed onto current main. Adds src/engine/common/Assert.h (EV_PARAM_CHECK / EV_ASSERT backed by zeroerr), an EVENGINE_ENABLE_ASSERTS option (non-Debug builds strip ZEROERR_NO_ASSERT unless enabled), parameter checks at key entry points, Doxygen comments across headers, Doxyfile + make docs / CMake docs targets, and Windows setup + code conventions in AGENTS.md.
2026-08-19 09:01:12 +08:00
西风逍遥游 50a230f5a3 Revert "feat: zeroerr parameter validation + Doxygen API documentation (#113)"
This reverts commit 3f3e41990b, reversing
changes made to 7d6375bc95.
2026-08-19 08:36:18 +08:00
西风逍遥游 af0cae4e49 Merge branch 'main' into codex/asserts-and-api-docs
# Conflicts:
#	src/engine/cmdline/cmdline.h
#	src/modules/building/BuildingTypes.h
#	src/modules/building/Ghost.h
#	src/modules/building/JsonHelpers.h
#	src/modules/building/PlacementSystem.h
#	src/modules/building/PlacementWorld.h
#	src/modules/dialogue/Dialogue.h
#	src/modules/filesystem/HotReload.h
#	src/modules/gpgpu/Gpgpu.h
#	src/modules/graphics/Graphics.h
#	src/modules/inventory/JsonHelpers.h
#	src/modules/model3d/ModelData.h
#	src/modules/network/Network.h
#	src/modules/network/TcpSocket.h
#	src/modules/rpg/JsonHelpers.h
#	src/modules/scene/SceneHost.h
#	src/modules/tensor/GpuBackend.h
#	src/modules/tensor/Graph.h
#	src/modules/tensor/Tensor.h
#	src/modules/voxel/Chunk.h
#	src/modules/voxel/GreedyMesher.h
#	src/modules/voxel/VoxelWorld.h
2026-08-19 08:20:18 +08:00
西风逍遥游 228b5a0f15 docs: add Doxygen API comments, docs target, and Windows AGENTS.md
Normalize all header comments to Doxygen @brief form and fill in missing class/method docs across engine common, cmdline, and module headers (~2368 @brief entries). Add root Doxyfile, 'make docs' target, CMake docs target, .gitignore for docs/api, README/docs/dev updates, and a Windows (native) + code-conventions section in AGENTS.md.
2026-08-19 00:13:35 +08:00
Cursor Agentand西风逍遥游 d80df444aa refactor(scene): register link kinds instead of hard-coding them
A scene link keeps an external object in step with the node it hangs off. The
kinds were a closed enum with a switch in TransformSystem, so scene had to
include graphics, physics and audio to do the casts, and no other module could
ever attach to the tree without editing SceneHost.h -- particles, voxel,
spritestack, avatar and weather all had to stay outside it.

Kinds are registered now (scene/SceneLink.h). The module owning the target type
supplies pushWorld / pullWorld / alive, keeps the casts on its own side where
the type is complete, and scene never learns what a Renderable3D is. Dispatch is
a function-pointer table rather than virtual calls, since link sync runs for
every dirty node every frame.

The six typed helpers (linkRenderable2D and friends) stay as conveniences and
now resolve their kind by name, so they return false rather than crash when the
module that registers it was trimmed out. The script API already named kinds
with strings, which is exactly the registry key, so it is unchanged.

Direction is now the right way round: graphics, physics and audio depend on
scene rather than scene on them, and scene drops from L5 to L1. What remains is
scene -> graphics from pickScreenAt / collectFrustumIdsAt, which take a Camera3D
and read its projection; that is recorded in the back-edge whitelist as the next
thing to move.

Each provider lives in a SceneLinks.cpp, sharing the basename so the three come
out of the build together when scene is disabled.

Co-authored-by: 西风逍遥游 <sunxfancy@gmail.com>
2026-08-18 13:46:25 +00:00
西风逍遥游 c3a2da2d99 feat: add physics-driven metroidvania demo 2026-08-15 00:37:50 +08:00
西风逍遥游andCursor Agent c26a077cb5 feat(physics): integrate Box3D for 3D rigid-body simulation (#31)
Add Erin Catto's Box3D (v0.1.0) as external/box3d and expose World3D,
Body3D, and Shape3D through Physics.newWorld3D, mirroring the existing
Box2D script API with meter-space coordinates, queries, and contact events.

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-08-11 17:01:13 +08:00
西风逍遥游andCursor Agent cbb6f14ac4 feat(physics): interactive cloth and 2D fluid (#25)
* feat(physics): add interactive cloth and 2D fluid solvers

Extend the Physics module with Verlet cloth (pin/grab) and
double-density-relaxation fluid (emit/interact), plus Squirrel
bindings, tests, docs, and an examples/softbody demo.

Co-authored-by: 西风逍遥游 <sunxfancy@gmail.com>

* fix(physics): improve cloth constraint solve and softbody tests

Apply full distance correction when one cloth particle is pinned, and
tighten unit tests around pin hold, free-fall, grab, and fluid behavior.

Co-authored-by: 西风逍遥游 <sunxfancy@gmail.com>

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-08-11 14:49:17 +08:00
西风逍遥游andCursor Agent d603219164 feat: complete 2D/3D pick, overlap, and collision query APIs (#11)
Add Math geometry tests for 2D/3D picking and overlaps, Physics
rayCast/queryAABB/testPoint, and Camera2D/3D screen pick helpers,
with script bindings, docs, and unit tests.

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-08-10 07:42:09 +08:00
sunxfancyandCursor c19b8fda41 feat: enhance physics and map modules with Box2D integration and documentation updates
- Updated the physics module to include Box2D support, enabling management of physics bodies and collision events.
- Enhanced the map module to support tile layers and improved hot-reload functionality for tilemaps.
- Updated documentation to reflect the new features in the physics and map systems, including usage examples and API references.
- Modified CMakeLists.txt to include new modules for physics and font management, ensuring proper build configurations.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-06 23:53:39 +08:00