Consolidated from the qa-input-collision-fix-0.1.0 work, applied onto main so only the changes main genuinely lacks are carried (main already merged the walkable-demo/collision work independently). - fix(input): populate the UE 5.8 FInputMappingContextMappingData DefaultKeyMappings field in ue_create_input_assets.py (the runtime reads GetMappings()->DefaultKeyMappings.Mappings; the script previously wrote only the deprecated 'mappings' array, so the cooked game had 0 runtime mappings and every key silently did nothing — in packaged AND PIE). Regenerated IMC_Default.uasset. WASD/mouse/Space/R/Escape verified working. - fix(build): drop editor-only APIs that break the game target build — UStaticMesh::PostEditChange() (GigLineAssetTools) and AActor::GetActorLabel() (character ground probe). GigLine and GigLineEditor now both compile clean. - tools: OS-level uinput input harness (input_emulation.py + input_test.py) and run_pie.sh for PIE isolation; document the PIE-vs-packaged input test in Docs/build.md. Removed the temporary SIM/EI/screenshot diagnostics from the character.
67 lines
1.6 KiB
C++
67 lines
1.6 KiB
C++
#include "GigLineAssetTools.h"
|
|
|
|
#include "Engine/StaticMesh.h"
|
|
#include "PhysicsEngine/BodySetup.h"
|
|
#include "StaticMeshResources.h"
|
|
|
|
void UGigLineAssetTools::SetComplexCollisionAsSimple(UStaticMesh* Mesh, bool bEnable)
|
|
{
|
|
if (!Mesh)
|
|
{
|
|
return;
|
|
}
|
|
|
|
UBodySetup* BodySetup = Mesh->GetBodySetup();
|
|
if (!BodySetup)
|
|
{
|
|
return;
|
|
}
|
|
|
|
BodySetup->CollisionTraceFlag = bEnable ? CTF_UseComplexAsSimple : CTF_UseSimpleAndComplex;
|
|
BodySetup->InvalidatePhysicsData();
|
|
BodySetup->CreatePhysicsMeshes();
|
|
Mesh->MarkPackageDirty();
|
|
// PostEditChange() is editor-only and not a member of UStaticMesh; the
|
|
// physics data regeneration above plus MarkPackageDirty is all a headless
|
|
// commandlet needs to persist the new collision flags.
|
|
}
|
|
|
|
void UGigLineAssetTools::ClearSimpleCollision(UStaticMesh* Mesh)
|
|
{
|
|
if (!Mesh)
|
|
{
|
|
return;
|
|
}
|
|
|
|
UBodySetup* BodySetup = Mesh->GetBodySetup();
|
|
if (!BodySetup)
|
|
{
|
|
return;
|
|
}
|
|
|
|
BodySetup->AggGeom.EmptyElements();
|
|
BodySetup->InvalidatePhysicsData();
|
|
BodySetup->CreatePhysicsMeshes();
|
|
Mesh->MarkPackageDirty();
|
|
}
|
|
|
|
FString UGigLineAssetTools::GetCollisionComplexity(UStaticMesh* Mesh)
|
|
{
|
|
if (!Mesh)
|
|
{
|
|
return TEXT("no mesh");
|
|
}
|
|
|
|
const UBodySetup* BodySetup = Mesh->GetBodySetup();
|
|
if (!BodySetup)
|
|
{
|
|
return TEXT("no body setup");
|
|
}
|
|
|
|
const int32 Flag = static_cast<int32>(BodySetup->CollisionTraceFlag.GetValue());
|
|
if (Flag == CTF_UseComplexAsSimple) { return TEXT("UseComplexAsSimple"); }
|
|
if (Flag == CTF_UseSimpleAsComplex) { return TEXT("UseSimpleAsComplex"); }
|
|
if (Flag == CTF_UseSimpleAndComplex) { return TEXT("UseSimpleAndComplex"); }
|
|
return TEXT("ProjectDefault");
|
|
}
|