Commit Graph
69 Commits
Author SHA1 Message Date
西风逍遥游 2d05741d88 Merge remote-tracking branch 'origin/main' into codex/mcp-new-features 2026-08-16 19:10:00 +08:00
西风逍遥游 072c454150 feat(mcp): add RenderVision — vision-model description of rendered frames
Adds a vision-model bridge (devtools/RenderVision) that captures the
current frame (Graphics readback -> PNG data URL) and sends it with
engine render parameters to an OpenAI-compatible vision model over
plain HTTP, returning prose that describes the frame and explains the
render-parameter <-> visual-result correspondence for other LLM agents.

- New MCP tools:
  - eve_render_describe (fresh/reason; cached otherwise)
  - eve_render_vision_config (set/read config, key masked)
- Breakpoint hit and runtime-error pause auto-flag a pending dump that
  McpServer::poll performs on the main (render) thread.
- Config via env (EVE_VISION_BASE_URL/API_KEY/MODEL/PATH/TIMEOUT_MS)
  or the config tool.
- No TLS/OpenSSL is linked, so the endpoint must be plain HTTP (works
  with local Ollama/vLLM/LM Studio).
- Compiles cleanly on MSVC (C++20); tests extended for new tools.
2026-08-16 16:10:26 +08:00
西风逍遥游 17f2a9ea3d Merge pull request #84 from EVEngine/EVEngine-deps-restructure
deps: own libraries in external/, third-party deps in third-party/
2026-08-16 15:58:11 +08:00
西风逍遥游 0dfc18c08f deps: own libraries in external/, third-party deps in third-party/
Move the user-maintained VKBuilder from the third-party aggregate into external/ (git submodule), and relocate the third-party DungeonTemplateLibrary and Box3D from external/ into the third-party aggregate (previously pushed to EVEngine/third-party). Update .gitmodules, include paths, DTL/box3d build wiring, and docs.
2026-08-16 13:34:12 +08:00
西风逍遥游 af58355ab2 Merge remote-tracking branch 'origin/main' into codex/mcp-new-features 2026-08-16 12:48:10 +08:00
西风逍遥游 0bd283e054 feat(plugin): add model converter that drives Blender bpy to reshape primitives 2026-08-16 03:56:07 +08:00
西风逍遥游 090283a743 feat(mcp): expose engine runtime features (scene/procgen/physics/render/particles/audio) as MCP tools
Add 18 new MCP tools to the embedded McpServer so agents can drive
the live game beyond the debugger surface:
- scene/entity query + transform mutation
- procgen recipe enumeration, map grid generation, mesh build
- 2D physics world create/list/raycast/remove
- render status + frame screenshot (PNG)
- particle emitter spawn, audio master control

Tool handlers use ModuleManager to reach Scene/Procgen/Physics/
Graphics/Particles/Audio and degrade gracefully when a module is
not mounted. Extend the tools/list and unit-test coverage.
2026-08-16 02:44:25 +08:00
西风逍遥游 91940965cb Merge branch 'main' into codex/procgen-bush-generator 2026-08-15 22:02:19 +08:00
西风逍遥游 d1a3e07e8d Merge branch 'main' into codex/procgen-skyscraper 2026-08-15 22:01:11 +08:00
西风逍遥游 72252ad218 procgen: add procedural 3D small bush (mesh.bush)
Add a deterministic low-poly small-bush recipe to procgen. It clusters
squashed foliage ellipsoids under a dome silhouette, adds emergent woody
twigs and optional leaf cards, using a two-region atlas (bark/foliage)
consistent with mesh.tree.

- src/modules/procgen/algorithms/BushMesh.{h,cpp}: recipe implementation
- MarchingCubes.cpp: register mesh.bush in MeshRecipeRegistry
- test/procgen.cpp: reproducibility/styles, option validation, render dump
- examples/bush-generator/: interactive showcase + Kenney CC0 mini-forest
  derived atlas with attribution
- docs/dev/程序化生成模块设计.md: document mesh.bush

Verified: procgen suite 57/57 passing, render dump produces 900x700 PNG.
2026-08-15 20:54:30 +08:00
西风逍遥游 6a32179adc docs(procgen): document linear tileable structure recipes 2026-08-15 17:59:10 +08:00
西风逍遥游 a36b5837de feat(procgen): add procedural 3D skyscraper generator
Add mesh.skyscraper recipe producing a deterministic setback-tiered tower
with a window grid and optional spire. Window quads are raised a thin lip
above each facade so openings read under directional lighting without
coplanar z-fighting.

- Register recipe in MeshRecipeRegistry
- Add topology/height/reproducibility unit tests
- Add render smoke test outputting out/skyscraper.png
- Add interactive example examples/skyscraper-generator/
- Update procgen and module design docs
2026-08-15 17:51:17 +08:00
西风逍遥游 01223e1149 Merge branch 'main' into codex/hex-grid-planet 2026-08-15 13:19:27 +08:00
西风逍遥游 a1e7fffe99 feat(procgen): add hex-grid planet generator 2026-08-15 13:11:27 +08:00
西风逍遥游 3f3f01298d feat(procgen): add procedural tree generator 2026-08-15 12:41:06 +08:00
西风逍遥游 6adfc8086c feat(graphics): implement hardware MSAA support for 3D scene color pass
- Added functionality to enable hardware MSAA (2x, 4x, 8x) for the 3D scene color pass, enhancing edge quality for 3D models and voxels.
- Introduced `setMsaaSamples` and `getMsaaSamples` methods in the Graphics API to control MSAA sample count.
- Updated RenderControl to include MSAA as a feature, with default settings for enabling/disabling.
- Modified the rendering pipeline to accommodate MSAA, including adjustments to render passes and framebuffers.
- Enhanced documentation and tests to cover new MSAA functionality and ensure stability across various scenarios.
2026-08-14 10:15:07 +08:00
西风逍遥游 913a4aad01 feat(voxel): implement CubeType and CubeTypeRegistry for enhanced voxel type management
- Introduced CubeType to define block properties including texture mappings and orientation.
- Added CubeTypeRegistry for managing block types, including methods for adding and loading from JSON.
- Updated Voxel and VoxelWorld classes to utilize the new registry for voxel management.
- Enhanced GreedyMesher to resolve face textures based on the CubeTypeRegistry.
- Refactored existing methods to support the new block type system, ensuring backward compatibility with previous voxel ID handling.
- Added comprehensive tests for the new functionality, including multi-texture support and block type resolution.
- Updated documentation to reflect changes in voxel management and block type registration.
2026-08-13 23:49:07 +08:00
西风逍遥游 15572df22a feat(window): implement window icon management with setIcon and getIcon methods
- Added setIcon and getIcon methods to the Window interface for managing application icons.
- Implemented setIcon in the SDL window class, ensuring compatibility with RGBA8 image formats.
- Introduced a new test case to validate icon setting and retrieval functionality.
- Updated documentation to reflect the new icon management features.
2026-08-13 22:24:12 +08:00
西风逍遥游andCursor Agent c0d9fe4a7d test(hex): 程序化六边形关卡套件(FOV / 光照 / 寻路 / 拾取 / 粒子) (#50)
* test(hex): add procedural hex dungeon levels for engine QA

Cross-module simulation levels exercise hex tilemap procgen, FOV,
2D lighting, spatial pickup + inventory, and particles. Includes a
playable examples/hex-levels demo with level select and a pipeline crawl.

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

* test(hex): expand levels 06–15 and fog-raid pipeline

Add Flow Field swarm, cell-cost detours, multi-revealer perception,
FoW mask/algorithms, camera pick, dual-grid, procgen variants,
QuadTree cull, multi-light, particle/stash transfer, and a fog-raid
pipeline. Update the playable hex-levels demo for levels 6–9.

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

* test(hex): add fixture JSON data and data-driven hex tests

Expand catalog/items/loot/seeds/perception fixtures, handcrafted maps,
and particle configs. Wire the hex-levels demo to load items and particle
JSON plus fixtures.nut loot tables. Register hex_level_data.cpp coverage.

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

* test(hex): fix data fixtures assertions for zeroerr and sparse gens

Avoid CHECK_EQ on bag->addItem (double-eval), and only enforce minWalkable
on dungeon.bsp in the seeds matrix smoke.

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

* feat(hex): boot each level from distinct catalog configs

Enrich catalog/fixtures with per-level FOV, light, cell-cost, and enable
flags. Wire examples/hex-levels to apply those boot settings on level
switch. Add hex.data.catalog.bootEachLevelDistinctConfig to verify each
catalog entry starts with its own applied configuration.

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

* docs(hex): note per-level boot configs in data README

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

* test(hex): add levels 16–20 and extra data-driven coverage

Expand simulation with facing-cone FOV, flow+cell-cost, seed
reproducibility, corner peek, equipment equip, and torchEscort /
catalogRaid pipelines. Add fixture tests for perception gates, all loot
tables, enable-flag consistency, seed path samples, map markers,
defaults, equipment slots, and mist particles on dungeon.

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

* docs(hex): clarify expanded test coverage in README

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

* test(hex): add levels 21–25 and broader fixture validation

Cover hex world↔tile roundtrip, FOV memory clear, findGroupPath,
multi-algo FOV smoke, blocked-cell sync, and costlyFogPickup pipeline.
Add data tests for loot/item referential integrity, feature tags,
particle schema, algorithm registration, ring-door path, categories,
detection margin, and door walkability.

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

* feat(hex): expand catalog to 31 levels (0–30) and playable cycle

Add levels 16–30 with distinct boot configs (facing cone, flow+cost,
maze/WFC/drunkard, mist particles, raid combo). Regenerate fixtures.nut
with LEVEL_IDS; main.nut cycles all catalog levels via N/B. Add
simulation cases 26–30 and catalog presence tests.

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

* fix(hex): harden level 02/17 against non-portable procgen paths

macOS CI failed hex.level.02.dynamicFov (empty path) and
hex.level.17.flowPlusCellCost (path length == 2) because spawn↔exit
layouts from DTL/std distributions differ across libstdc++ vs libc++.
Use handcrafted hex maps so FOV memory and flow+cost assertions are
platform-stable.

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

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-08-13 11:54:41 +08:00
西风逍遥游andCursor Agent 14b88634ac test(voxel): expand render coverage and fix face winding (#49)
* test(voxel): expand render coverage and fix face winding

Add shader-mirror decode helpers, broader CPU cull/meshing tests, and
GPU pixel-readback cases for drawVisible / drawVoxelFaceInstances.
Correct unit-quad indices so outward faces are front-facing.

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

* test(voxel): add more CPU and GPU render cases

Expand coverage for remesh/dirty, negative chunks, greedy edge shapes,
viewRange edge cases, decode planes, meshVoxels API, and GPU paths
(begin3DFrame, aliases, atlas tiles, far origins, orbit faces, remesh).

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

* docs(voxel): refresh test coverage notes

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

* test(voxel): more edge-case CPU and GPU render coverage

Add OOB/empty packed data, stripe/ring merges, pack masking, multi-chunk
visibility, seam faces, meshVoxels errors, and GPU cases for empty world,
aliases, batch growth, atlas blue tile, side walls, and culled clear.

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

* test(voxel): expand coverage to 88 CPU and 42 GPU cases

Add second-triangle winding helper, greedy/world/decode edge cases,
and more GPU pixel-readback scenarios (face aliases, range cull, orbits).

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

* test(voxel): multi-tile atlas and multi-texture coverage

Add 4×4/8×8/16×8 atlas helpers and GPU sampling for many tex indices,
plus CPU UV-grid and greedy/world tests that keep distinct textures.

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

* test(voxel): more geometry, visibility, and render edge cases

Grow CPU coverage to 114 cases (corners, merges, shell, frustum,
selectVisible replace) and GPU to 64 (aliases, wide/tall rects,
frustum cull, carve, multi-chunk atlas colors).

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

* test(voxel): more cases after merging main

Sync with origin/main, then grow coverage to 129 CPU and 74 GPU
tests (range filter, aliases, null atlas/packed, remesh, atlases).

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

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-08-13 11:29:24 +08:00
西风逍遥游andCursor Agent 6be72c4c8f feat(particles): 2D/3D dynamic bone emission + expanded tests (#48)
* feat(particles): emit from Spine and IK 2D/3D dynamic bones

Extend ParticleEmitter attach beyond AnimPose to SpineSkeleton and
IK Skeleton2D/Skeleton3D, with getAttachKind and broader unit tests.

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

* test(particles): expand dynamic bone attach coverage

Add edge cases (null/OOB, invalid plane), multi-emitter, rate-tracking,
pause/detach sync, Spine scale via module update, IK offset/yz/Solver3D,
AnimPose clip sampling, and empty skin-filter fallback.

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

* test(particles): add attach lifetime, forces, and skin plane cases

New particles_attach_more.cpp covers emitter life/buffer on bones,
rebind, scale extremes, emission area, radial origin, Solver2D step
tracking, Spine rotated offsets, preset/stop/start, and skin xz/yz.

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

* test(particles): add reset/config/force/skin-filter attach cases

particles_attach_extra.cpp covers reset/moveTo/applyConfig with attach,
ellipse+tangential forces, dt edge cases, kind cycling, Spine rate bob,
Solver3D step, skin filter/buffer, and CesiumMan attach-by-name.

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

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-08-13 11:28:29 +08:00
西风逍遥游 2e32afd71b feat(graphics): enhance rendering capabilities with 3D pipeline and ambient occlusion
- Added a new 3D rendering pipeline section in the documentation, detailing initialization, VKBuilder, and asynchronous frame handling.
- Updated the Ambient Occlusion module to support depth-based sampling, allowing for improved visual fidelity in 3D scenes.
- Introduced new shader functionalities for ambient occlusion and global illumination, enhancing the overall rendering quality.
- Updated GBuffer to include hardware depth texture for more accurate depth sampling in 3D rendering.
- Enhanced the RenderControl to manage new features for ambient occlusion and global illumination, ensuring they are enabled by default.

Co-authored-by: 西风逍遥游 <sunxfancy@gmail.com>
2026-08-13 10:01:04 +08:00
西风逍遥游andCursor 973ad214ac fix(graphics): match CSM clip space and keep ClassicScenes midtones readable
Shadow ortho now uses the same Vulkan Y-flip as the camera, with nearest depth sampling so manual PCF does not invent false umbra. Tonemap only compresses HDR peaks, and scene sun intensity is no longer overwritten per config.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-13 08:29:09 +08:00
西风逍遥游andCursor 8e69d6e975 feat(graphics): uncapped present, async offscreen passes, and scene FPS bench
Record shadow and G-buffer into the in-flight swapchain command buffer, add Graphics::setVSync for IMMEDIATE present, and measure ClassicScenes FPS with image-audit snapshots.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-13 01:05:48 +08:00
西风逍遥游andCursor Agent 339b100d5f test(rpg): village-defense cross-module simulation (#45)
* test(rpg): add village-defense cross-module simulation

Drive tilemap, sprite walk animation, tile/world/screen/cell
coordinate conversion, 2D normal litPath + optional GPU lighting,
buff/DOT combat, and building placement in one RPG scenario test.

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

* test(rpg): soft-skip GPU normal sample on software Vulkan ICDs

Lavapipe can return black Canvas pixels for lit2d; keep the optional
GPU normal-map check only when samples are non-zero.

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

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-08-12 22:25:33 +08:00
西风逍遥游andCursor Agent 9736798df1 feat(animation): 2D sprite-sheet and Spine region animation (#44)
* feat(animation): add 2D sprite-sheet and Spine region animation

Implement SpriteSheet/SpriteClip/SpriteAnim for frame animation with Quad
binding, and a Spine .atlas + skeleton JSON subset (bones/slots/region
attachments) that feeds the shared DrawItem2D queue via SpineAnim.

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

* fix(animation): atlas page props, SpriteAnim getLoop, test polish

Parse unindented Spine atlas page keys (size/format/...), move SpriteAnim
getLoop out of line to avoid incomplete type, and harden sprite/spine tests.

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

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-08-12 20:46:37 +08:00
西风逍遥游andCursor Agent 544779079f Add Material, RenderControl, and sampleable G-buffer for post effects (#43)
Introduce a compilable render feature control (shadow/gbuffer/forward/hair),
package shading into Material+ModelPart attachable to Renderable3D, and fill
sampleable linear-depth/normal (optional albedo) G-buffer targets while
keeping forward HW z-testing and CSM shadows.

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-08-12 20:25:41 +08:00
西风逍遥游andCursor Agent 4aeab04099 feat(image): ImageData 2D 像素旋转(逆映射 nearest/linear) (#39)
* feat(image): ImageData::rotate with inverse-map nearest/linear

Add CPU pixel rotation on ImageData using destination-to-source inverse
mapping (Geometric Tools / standard image processing). Supports nearest
and bilinear filters, optional canvas expand to fit the rotated AABB,
and matches Math::rotate2* angle convention. Includes unit tests, Font
script binding, and docs.

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

* test(image): assert exact 90° rotate pixel positions

Pin nearest+expand 90° mapping of corner markers to (1,2) and (0,0).

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

* feat(image): implement RotSprite pixel-art rotation filter

Add Xenowhirl RotSprite as ImageData::rotate filter "rotsprite":
Scale2x×3 with color similarity, best 8×8 sampling offset search,
nearest-neighbor rotate+downscale, and single-pixel detail restore.
Quarter turns use an exact remapping fast path. Tests cover 90°
palette preservation and 45° no-new-colors.

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

* fix(ci): M_PI on MSVC and GitHub API 403 for asset downloads

Windows unit tests failed because test/image.cpp used M_PI without the
MSVC fallback used by other test files. macOS build failed when
download_skinned_character.sh hit GitHub API 403 during PRE_BUILD; add
User-Agent + optional GITHUB_TOKEN auth to asset fetch scripts and pass
GITHUB_TOKEN in CI build steps.

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

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-08-12 18:34:28 +08:00
西风逍遥游andCursor Agent 59b2ebabf1 feat(graphics): parallax occlusion mapping (POM) for mesh3d (#35)
Add height-map driven POM on the default mesh3d / mesh3d_clustered PBR
path so brick/stone materials get fake depth without tessellation.

- GLSL: parallax_map.glsl (adaptive steep march + linear refinement)
- API: Renderable3D::setHeightTexture / setParallax; scale=0 keeps old UVs
- Descriptor binding for height sampler; UBO parallax vec4 appended
- Docs + CPU math tests + GPU pixel-diff coverage

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-08-12 18:33:03 +08:00
西风逍遥游andCursor Agent 5d1e9f8c3d feat(building): extensible building placement system for strategy/ETS (#37)
* Add extensible building placement module for strategy/ETS games

Introduce eve.Building with data-driven definitions, grid occupancy worlds,
ghost previews, and pluggable validate/snap/change hooks. Includes design docs,
user module guide, unit tests, and a gitignore fix so build*/ no longer ignores
src/modules/building/.

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

* fix(building): preserve free-snap world pose on placeAtWorld

placeAtWorld now keeps the snap rule's worldX/worldY on the placed
instance instead of always rewriting to the cell origin, so free and
custom snap modes stay accurate for ETS-style soft placement.

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

* Add examples/building town placement sandbox demo

Interactive demo covering grid snap ghost preview, terrain (dock on water),
road adjacency (stall), L-mask barn, rotate/remove, and resource costs.
Also adds make building shortcut, docs links, and a unit test locking the
demo building definitions.

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

* fix(ci): vendor CesiumMan test assets to avoid flaky Linux SSL download

Linux CI failed linking unit_test when PRE_BUILD curl hit a self-signed
certificate fetching CesiumMan from api.github.com. Commit the ~464 KiB
glTF fixture, skip download when files are present, and add curl retries
with explicit CA bundle for refresh runs.

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

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-08-12 18:32:36 +08:00
西风逍遥游andCursor Agent fc13b994d2 feat(animation): add AnimTrail motion trail drawing (#41)
Record timed samples (manual points or bone world projection), fade by
duration, and draw dotted trajectories via Graphics for animation FX.

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-08-12 17:36:14 +08:00
西风逍遥游andCursor Agent 7f8a46ff97 feat(particles): 骨骼绑定与蒙皮表面粒子发射 (#40)
* feat(particles): bind emitters to bones and emit from skinned mesh

Add ParticleEmitter Attach/SkinSource components so VFX can follow
AnimPose bones (with plane/scale projection) and sample CPU-skinned
vertices for character-surface effects. Expose AnimSkin skinned-position
cache to scripts and cover with unit tests.

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

* fix(particles): use ComponentRef correctly for Attach/SkinSource

attach()/skinSource() return ecs::ComponentRef, not raw pointers.

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

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-08-12 17:35:40 +08:00
西风逍遥游andCursor Agent 618fe97da4 feat(editor): 编辑器构件模块 — Gizmo / 笔刷 / UI 壳 (#36)
* feat(editor): 新增编辑器构件模块(gizmo / 笔刷 / UI 壳)

引擎不内置完整 3D 或地图编辑器,改为提供可组装构件:
TransformGizmo + GizmoManager(平移/旋转/缩放/包围盒)、
TileBuffer + Brush(paint/erase/fill/line/rect/stamp)、
以及 Toolbar / Inspector / Dock / History 辅助快速搭建编辑器 UI。
参考 Three.js、Babylon.js、ImGuizmo、Unity GridBrush 与 Godot 插件 API。

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

* docs(editor): 标记编辑器模块 Phase A 已实现

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

* fix(editor): avoid CHECK(unique_ptr) so zeroerr can compile tests

zeroerr's CHECK copies the expression for printing; unique_ptr is
non-copyable and broke unit_test on Linux/macOS/Windows.

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

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-08-12 17:35:09 +08:00
西风逍遥游andCursor Agent 4698c31b6c feat(rpg): 高度可扩展的 Buff/Status ECS 组件 (#38)
* feat(rpg): make Status/Buff ECS component highly extensible

Extend the existing Statuses component with EffectDefinition::extra,
StatusInstance::props, apply conditions, custom stack policies,
lifecycle hooks, and StatusChangeEvent polling. Expose Buff API aliases
and update docs/tests/examples.

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

* test(rpg): fix buff change-event assertions

Avoid evaluating applyBuff inside CHECK_EQ (double side effects) and
clear the polled change vector between assertions.

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

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-08-12 14:30:36 +08:00
西风逍遥游andCursor Agent 30c98b286f feat(procgen): add Wave Function Collapse and Marching Cubes (#33)
- wfc.simple: tiled WFC with dungeon/cave/terrain presets → Grid2D
- mesh.marchingcubes: Lorensen/Cline MC over sphere/torus/noise/terrain fields
- MeshBuild CPU mesh + Procgen buildMesh/generateMesh bindings
- Graphics::newMeshFromArrays for GPU upload
- tests, example keys 6–8, docs

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-08-11 20:41:43 +08:00
西风逍遥游andCursor Agent 59b2865b85 feat(animation): CPU 蒙皮与 CesiumMan 骨骼动画测试 (#32)
* feat(animation): CPU skinning + CesiumMan download test

Add AnimSkin linear-blend skinning, ModelData bone/weight APIs, and a
network download script for Khronos CesiumMan used by animation.skinned
integration tests during unit_test builds.

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

* fix(test): mount CesiumMan via physfs for skinned animation tests

Model3D loads through the VFS; use allowMountingForPath + mount like
ClassicScenes so CesiumMan.gltf resolves with its .bin sidecar.

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

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-08-11 20:41:31 +08:00
西风逍遥游andCursor Agent 488cf0c9ef feat(ui): add Flex/Row/Column elastic layout for UI containers (#34)
Introduce Flex containers with gap, flexGrow, align, and justify so
toolbars and panels can lay out without manual SameLine, including
Spacer and script builder APIs.

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-08-11 20:41:20 +08:00
西风逍遥游andCursor Agent ece8ff8281 feat(graphics): mipmap、各向异性过滤与 LOD 支持 (#27)
* feat(graphics): add mipmap, anisotropic filtering, and mesh LOD

Enable texture LOD sampling with CPU-generated mip chains, sampler
anisotropy (when supported), and LOD bias via TextureCreateInfo /
TextureSampler. Cubemaps generate mips by default for IBL textureLod.
Renderable3D gains distance-based geometric LOD selection.

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

* fix(graphics): avoid X11 None clash; link sndio on Linux

Rename MipmapMode::None to Disabled (X11 defines None), fix ComponentRef
usage in setMeshLod, and link libsndio for OpenAL on Linux builds.

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

* fix(build): link sndio only when available on Linux

Unconditional -lsndio broke GitHub Actions Linux CI where libsndio is
not installed. Detect the library with find_library instead.

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

* ci: retrigger Linux check after optional sndio fix

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

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-08-11 19:50:31 +08:00
西风逍遥游andCursor Agent f00ca29713 feat(graphics): 屏幕空间环境光遮蔽 SSAO / HBAO / GTAO (#29)
* feat(graphics): add screen-space ambient occlusion (SSAO/HBAO/GTAO)

Implement AmbientOcclusion with quality presets, bilateral blur, and
darkening overlay, following the Volumetric post-process pattern.

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

* test(ao): avoid REQUIRE on unique_ptr (zeroerr print)

Match Volumetric tests: assert the raw pointer before wrapping.

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

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-08-11 18:59:33 +08:00
西风逍遥游andCursor Agent 1fe6934c0a feat(graphics): texture cell bombing 消除平铺重复纹理 (#30)
* feat(graphics): texture cell bombing to break tiling

Add UV-space cell bombing on the default mesh3d / clustered PBR paths:
per-cell random offset and rotation blended across a 2x2 neighborhood
(with textureGrad for stable mips). Opt-in via Renderable3D::setTexCellBomb
(strength 0 keeps prior behavior). Includes GLSL helper, SPIR-V embeds,
CPU reference header, docs, and smoke tests.

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

* fix(graphics): rotate UVs in cell bombing; harden GPU test

Rotate UVs about each cell center (not just translate) so periodic
textures actually break tiling. Use the known-good UV cube + repeating
motif in the pixel smoke test.

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

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-08-11 17:01:48 +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 3543a7343d feat(graphics): classic anti-aliasing (FXAA / SMAA / SSAA / NFAA) (#28)
* feat(graphics): add classic image-space anti-aliasing

Implement AntiAliasing (FXAA, SMAA-lite, SSAA resolve, NFAA) as a
Volumetric-style post API with quality presets, embedded SPIR-V shaders,
Squirrel bindings, tests, and docs.

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

* test(aa): fix zeroerr REQUIRE(a && b) ambiguity

Split combined pointer checks so Expression decomposition does not
conflict with built-in operator&&.

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

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-08-11 17:00:25 +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 a95d6c98ae feat(voxel): 32³ chunk greedy meshing with packed instanced faces (#26)
Add a voxel module that remeshes 32³ chunks into six face-direction
buffers of 32-bit packed rectangles (xyz+wh+tex), culls by frustum,
view range, and camera-facing normals, then draws via a new Vulkan
instanced unit-quad path (Graphics::drawVoxelFaceInstances).

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-08-11 14:48:51 +08:00
西风逍遥游andCursor Agent 922ad44b3c feat(tests): classic render scenes with camera flythrough config switching (#22)
* feat(tests): classic scene flythroughs with render config switching

Add Cornell Box (committed), procedural metal/roughness chart, and
downloadable Sponza/DamagedHelmet tests that fly the camera while
cycling ambient, directional, shadows, point lights, and IBL.

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

* fix(tests): bake Assimp node transforms and light classic scenes

Apply scene-graph world matrices when spawning meshes, fix Cornell face
winding for inward normals, keep Sponza dielectric under missing MR
texture sampling, and link sndio when OpenAL builds that backend.

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

* docs(tests): note ClassicScenes coverage

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

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-08-11 14:48:17 +08:00
西风逍遥游andCursor Agent e99641f088 feat(ui): unified theme tokens with named dark/light switching (#23)
Expand Theme into a full design-token set (palette, rounding, borders,
spacing, font scale) shared by dark/light presets. Add setTheme/getTheme
script APIs and apply tokens with DPI scale so geometry stays consistent
across theme switches.

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-08-11 14:48:04 +08:00
西风逍遥游andCursor Agent 0a2e56cb34 feat(map): 动态视野系统 Phase A/B/C (#21)
* docs: design 2D/3D compatible dynamic FOV system

Add a map-module FOV/FoW design based on public shadowcasting and
3D visibility references, with staged grid2d/heightmap/volume APIs
aligned to Pathfinder conventions.

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

* feat(map): implement Phase A dynamic FOV with shadowcasting

Add Fov facade with multi-revealer recursive shadowcasting, explored
memory, and opaque-GID sync; expose Map.newFov / newFovSize bindings
and cover behavior in map_fov tests.

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

* feat(map): implement FOV Phase B heightmap, volume, and masks

Add raycast/permissive algorithms, heightmap cliffs, volume slice
shadowcasting with vertical extend, dirty-skip compute, and CPU R8
mask export; cover with map_fov Phase B tests and docs.

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

* feat(map): complete FOV Phase C hex, rectangle, and GPU masks

Add hex topology shadowcasting, rectangle-based occlusion FOV,
soft perception/stealth detection helpers, and RGBA8 mask Texture
upload via buildMaskTexture; cover with Phase C map_fov tests.

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

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-08-11 02:12:33 +08:00
西风逍遥游 9cdd1ed971 docs: remove outdated modules and documentation
Deleted several obsolete documentation files related to volumetric rendering, avatar dialogue, database module, and stylized rendering. These changes streamline the documentation and remove references to features that are no longer supported or relevant.
2026-08-11 00:28:49 +08:00
西风逍遥游andCursor Agent 8aa8e35d34 feat(graphics): 体积光 + Ray March + 体积雾 (#19)
* feat(graphics): 屏幕空间体积光(尘雾 God Rays)

在 graphics 模块增加 Volumetric API:径向模糊光柱 + 尘/雾,
质量档 low/medium/high;Drawable.castOcclusion 对齐阴影语义的遮挡绘制。

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

* feat(graphics): 体积光 Ray March 二期 + 扩展测试

合并 main;新增 raymarch 模式(线性深度积分 + 屏空间遮挡近似 CSM),
补充 mode/质量/drawOccluders2D/ray march 等测试(11 用例)。

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

* feat(graphics): 体积雾(高度/距离 Beer-Lambert)

新增 setMode("fog") / applyFog:线性深度上积分高度指数雾与距离 ramp,
输出非预乘 RGB+alpha 以适配 SrcAlpha 混合。合并 main(gpgpu ECS)后补齐
cmake 源扫描,并扩展 volumetric 单测(15/15)。

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

* fix(test): GraphicsSmoke missing-texture 不再竞态 setupWriteDirectory

Mac CI 并行跑 clearAndPresentWindow 时共用 Filesystem identity,
ThrowsOnMissing 里多余的 bootstrap 会失败。缺文件抛错只需 PhysFS open,
并给写目录 bootstrap 使用独立 identity。

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

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-08-10 23:15:51 +08:00
西风逍遥游 a940088b70 Merge branch 'main' of https://github.com/EVEngine/EVEngine 2026-08-10 22:17:58 +08:00