MCPcopy Create free account
hub / github.com/FlaxEngine/FlaxEngine / CreateCollision

Method CreateCollision

Source/Engine/Terrain/TerrainPatch.cpp:2142–2172  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2140#endif
2141
2142void TerrainPatch::CreateCollision()
2143{
2144 PROFILE_CPU();
2145 PROFILE_MEM(LevelTerrain);
2146 ASSERT(!HasCollision());
2147 if (CreateHeightField())
2148 return;
2149 ASSERT(_physicsHeightField);
2150
2151 // Create geometry
2152 const Transform terrainTransform = _terrain->_transform;
2153 CollisionShape shape;
2154 const float rowScale = Math::Abs(terrainTransform.Scale.X) * _collisionScaleXZ;
2155 const float heightScale = Math::Abs(terrainTransform.Scale.Y) * _yHeight / TERRAIN_PATCH_COLLISION_QUANTIZATION;
2156 const float columnScale = Math::Abs(terrainTransform.Scale.Z) * _collisionScaleXZ;
2157 shape.SetHeightField(_physicsHeightField, heightScale, rowScale, columnScale);
2158
2159 // Create shape
2160 JsonAsset* materials[8];
2161 for (int32 i = 0; i < 8; i++)
2162 materials[i] = _terrain->GetPhysicalMaterials()[i];
2163 _physicsShape = PhysicsBackend::CreateShape(_terrain, shape, ToSpan(materials, 8), _terrain->IsActiveInHierarchy(), false);
2164 PhysicsBackend::SetShapeLocalPose(_physicsShape, Vector3(0, _yOffset * terrainTransform.Scale.Y, 0), Quaternion::Identity);
2165
2166 // Create static actor
2167 void* scene = _terrain->GetPhysicsScene()->GetPhysicsScene();
2168 _physicsActor = PhysicsBackend::CreateRigidStaticActor(nullptr, terrainTransform.LocalToWorld(_offset), terrainTransform.Orientation, scene);
2169 PhysicsBackend::AttachShape(_physicsShape, _physicsActor);
2170 if (_terrain->IsDuringPlay())
2171 PhysicsBackend::AddSceneActor(scene, _physicsActor);
2172}
2173
2174bool TerrainPatch::CreateHeightField()
2175{

Callers 3

AddPatchesMethod · 0.80
AddPatchMethod · 0.80
BeginPlayMethod · 0.80

Calls 6

CreateShapeFunction · 0.85
GetPhysicsSceneMethod · 0.80
AbsFunction · 0.50
ToSpanFunction · 0.50
Vector3Class · 0.50
LocalToWorldMethod · 0.45

Tested by

no test coverage detected