public void UpdateTerrainBody(Terrain terrain)
{
Terrain = terrain;
foreach (var body in TerrainBodies)
{
var fixtures = body.FixtureList.ToArray();
foreach (var fixture in fixtures)
{
fixture.Dispose();
}
body.Dispose();
}
TerrainBodies.Clear();
// Update the terrain explicitly
terrain.Update();
var outlines = terrain.GetOutline();
foreach (var outline in outlines)
{
var vertices = new Vector2[outline.Count];
for (int i = 0; i < outline.Count; i++)
{
vertices[i] = outline[i] * terrain.Scale;
}
var shape = new ChainShape(new Vertices(vertices));
var body = new Body(PhysicsWorld);
body.BodyType = BodyType.Static;
body.Friction = 1.0f;
body.CreateFixture(shape);
TerrainBodies.Add(body);
}
}