2 Commits
Author SHA1 Message Date
zwitschi e1ddf852fa docs(agents): document the Unreal Engine and C++ skill packs
AGENTS.md only described the Blender packs. Add the two skill sets that shipped
with the project since:

- 31 Unreal Engine packs (MIT, quodsoler/unreal-engine-skills f3742d7) at
  .agents/skills/ue-*/, targeting UE 5.8 C++, with ue-project-context as the entry
  point and a discipline mapping to this project's work.
- The cpp router (MIT, DiamonDinoia/skill-cpp f2617fb) at .agents/skills/cpp/, for
  general C++11-23 against the Core Guidelines; the project is C++20.
2026-11-10 17:51:01 +01:00
zwitschi 8e6aa9cff2 docs(vehicle): record the float fix is fragile — delete+recreate, not the box centre
The transient settle at Z 78 was the first physics-asset recreation; repeating the
delete + rebuild + assign cycle flipped the pawn to simulating=0 and stuck at spawn,
with the same box centre -18 that had settled. The delete+recreate is the failure,
not the box: delete_asset does not fully release the package, so NewObject reuses
stale state and the rebuilt body stops simulating.

- Plugin enablement (5e328f5) stays the solid fix (4 wheels).
- The physics asset needs a proper fix: set PhysicsType=PhysType_Simulated and update
  in place, not delete+recreate.
- ue_vehicle_import.py SOURCE is stale (/tmp/gigline/hatch vs /tmp/gigline/vehicle for
  the skeletal FBX), so the wired regeneration is never reached.
- Driving is still untested.
2026-11-10 17:35:20 +01:00
2 changed files with 86 additions and 0 deletions

No files matched your search

+27
View File
@@ -197,6 +197,33 @@ Do not copy the common packs into the repository: a second copy under a differen
**Caveat:** the skill packs assume MCP-driven interactive Blender. This project runs Blender headless via scripts in `Tools/` — use the skills as method guides (checklists, naming conventions, proportions, validation steps), not for their MCP tooling. The headless scripts remain the execution path.
## Unreal Engine skills
The 31 Unreal Engine skill packs (MIT, [quodsoler/unreal-engine-skills](https://github.com/quodsoler/unreal-engine-skills) `f3742d7`) live in the repository at `.agents/skills/ue-*/` and target **UE 5.8 C++**. Each carries API examples verified against the 5.8 headers plus a deprecated-API table that maps old calls to the 5.8 forms. They are agent instructions, not add-ons.
`.agents/skills/ue-project-context/` is the entry point: it writes `.agents/ue-project-context.md` (module names, conventions, enabled plugins), and every other UE skill reads that file first. Refresh it when the project changes — new module, new plugin, engine bump — before consulting the rest.
The general mapping to this project's work:
- **Build and modules** — `ue-module-build-system` (Build.cs, unresolved externals, include order, plugin enablement).
- **Reflection and core types** — `ue-cpp-foundations` (UCLASS/UPROPERTY/UFUNCTION, TObjectPtr, delegates), `ue-blueprint-cpp-interop`.
- **Actor/component lifecycle** — `ue-actor-component-architecture` (spawning, attachment, tick groups, EndPlay).
- **Player and pawns** — `ue-character-movement` (the character's walking), `ue-gameplay-framework` (GameMode/Pawn/Controller), `ue-input-system` (Enhanced Input). The Chaos vehicle is the `ChaosVehiclesPlugin` — see the vehicle notes in `TODO.md`, not a skill pack.
- **Physics and collision** — `ue-physics-collision` (channels, traces, overlaps, profiles).
- **Materials and rendering** — `ue-materials-rendering`, `ue-niagara-effects`.
- **World and streaming** — `ue-world-level-streaming` (World Partition, level streaming, travel), `ue-procedural-generation` (PCG).
- **Data, save and serialization** — `ue-data-assets-tables`, `ue-serialization-savegames`.
- **Networking** — `ue-networking-replication` (replication, RPCs, relevance).
- **UI** — `ue-ui-umg-slate` (UMG, Slate, Common UI).
- **Debugging, profiling, tests** — `ue-testing-debugging`, `ue-async-threading`.
- **Editor tooling** — `ue-editor-tools` (detail customizations, menus, factories).
- **Animation** — `ue-animation-system` (AnimInstance, montages, notifies, root motion).
- **As-needed** — `ue-ai-navigation`, `ue-audio-system`, `ue-game-features`, `ue-gameplay-abilities` (GAS), `ue-gameplay-cameras`, `ue-gameplay-tags-messaging`, `ue-mass-entity`, `ue-mover`, `ue-sequencer-cinematics`, `ue-state-trees`.
## C++ skill
One router skill, `cpp` (MIT, [DiamonDinoia/skill-cpp](https://github.com/DiamonDinoia/skill-cpp) `f2617fb`), lives at `.agents/skills/cpp/` and covers general C++11 through C++23 against the C++ Core Guidelines. It detects the project language standard from the build system (**C++20** for this project, from the UBT compile flags), then loads the matching standard reference plus the topic references the task touches. Load it for any C++ work that is not Unreal-specific; the UE skills supersede it for engine API questions.
## Licensing & Distribution
- Publish project-owned code under a chosen open-source license.
+59
View File
@@ -715,3 +715,62 @@ Next: the bisect plan step 2 — spawn a **stock `AWheeledVehiclePawn`** with `S
- **Fix:** add `{"Name": "ChaosVehiclesPlugin", "Enabled": true}` to `GigLine.uproject`. Result: `CreateVehicle() entered → wheels 4`, `first UpdateState - output present`, `diag ... setups=4 wheels=4`.
- **Also removed** `SetSimulatePhysics(true)` / `SetCollisionProfileName("PhysicsActor")` / `SetCollisionEnabled` from the `AGigLineVehicle` constructor: the Chaos movement component drives the mesh through its async physics, and forcing the regular rigid-body solver is what kept the body out of the vehicle solver.
- **The plugin fix converts "teleport up" into "float at Z 545".** With 4 wheels the pawn now settles at a stable Z 545 (540 cm above the ReviewMap floor at Z 5) in *both* the control and terrain probe maps — no teleport, but the suspension holds the chassis ~5 m too high. That is the next bug: wheel radius / suspension rest-length / chassis-box offset, not the vehicle creation.
## 2026-11-10 — Vehicle: the physics-asset recreation fixed the float; box-centre +32.4 is wrong
After the plugin enablement gave 4 wheels, the pawn still floated at Z 545 in both probe
maps. Two more findings close that:
- **Regenerating the physics asset fixed the float.** The committed `PA_Vehicle_Sedan`
was a stale body (the prior "one chassis body" commit `5dd53ac` changed the builder but
the asset was never re-generated). Rebuilding it through the current
`UGigLineVehicleBuilder::build_physics_asset` (one `root` body, box 452x205x40 at
centre 0,0,−18) and assigning it back to `SK_Vehicle_Sedan.physics_asset` made the pawn
**fall and settle at Z 78** (≈ wheel radius + suspension above the floor) in both the
control and terrain probe maps. `create_vehicle` → `wheels 4`, `output present`.
- **Box centre +32.4 is wrong.** I tried moving the chassis box from −18 to
`+Extent.Z*0.45` (=+32.4) on the theory that −18 put the body below the ground. It made
it **worse**: the box then overlaps the wheel bones (at +33), the Chaos vehicle fails to
set up, and the pawn reports `simulating=0` and stays at spawn (Z 300). Reverted. The
working value is the original **−18**, because `GetWheelRestingPosition`/`LocateBoneOffset`
measures wheel position against the root **bone** (origin), not the box, so the box
centre is effectively ignored by the suspension — and +32.4 breaks the wheel/chassis
separation. Do not "correct" the box centre without re-testing settle.
- **The regeneration is not wired into any script.** `build_physics_asset` is a
`UBlueprintFunctionLibrary` (callable from Python as
`unreal.GigLineVehicleBuilder.build_physics_asset(mesh, dest, "PA_Vehicle_Sedan")`), but
`ue_vehicle_import.py` imports the skeletal mesh and never creates/assigns the physics
asset. Next step is to add that call to the import (delete + rebuild + assign + save) so
the asset is reproducible, then re-run the `-drivetest` (driving is still untested).
- **Editor vs game target:** `build_physics_asset` is `#if WITH_EDITOR`, so it lives in the
**editor** module (`libUnrealEditor-GigLine.so`). `Build.sh GigLine Linux Development`
does **not** recompile it — you must build `GigLineEditor`. The box-centre change I made
looked like a no-op because the editor module was stale; the `.so` mtime is the tell.
Uncommitted when pausing: `PA_Vehicle_Sedan.uasset` is currently at the **+32.4** box
(wrong — regenerate at −18), `SK_Vehicle_Sedan.uasset` points at it, and the four
`VehicleProbe*.umap` churn should be reverted. `GigLineVehicleBuilder.cpp` is reverted/clean.
## 2026-11-10 — Vehicle float: the delete+recreate physics asset is fragile
The "settle at Z 78" result was transient. Recreating `PA_Vehicle_Sedan` again (the
second/third delete + rebuild + assign cycle) flipped the pawn to **`simulating=0` and
stuck at spawn Z 300**, with the same box centre −18 that had settled minutes earlier.
So the box centre is not what flips settle↔stuck; the **delete + recreate cycle is** —
the same failure shape as the material `delete_asset` bug earlier: `delete_asset` does not
fully release the package, `NewObject`/`CreatePackage` then reuses stale state, and the
rebuilt body ends up not simulating (`PhysicsType` left at default, not `Simulated`).
- The plugin enablement (`5e328f5`) remains the solid fix: `CreateVehicle` → 4 wheels.
- The physics asset still needs a **proper** fix, not delete+recreate: set
`BodySetup->PhysicsType = EPhysicsType::PhysType_Simulated` (and any Chaos-required
flags) in `GigLineVehicleBuilder::BuildPhysicsAsset`, and update the asset **in place**
rather than deleting it.
- `ue_vehicle_import.py` was wired to regenerate the asset, but its `SOURCE` is stale
(`/tmp/gigline/hatch` — the static template) while the skeletal FBX lives in
`/tmp/gigline/vehicle`; the wired block is therefore never reached. Fix the source path
(or move the FBX) before relying on the import to rebuild the physics asset.
- Driving (`-drivetest`) is still untested; settling worked only in the transient run.