Files
sbox-public/engine/Sandbox.Engine/Game/Map/Map.cs
s&box team 71f266059a Open source release
This commit imports the C# engine code and game files, excluding C++ source code.

[Source-Commit: ceb3d758046e50faa6258bc3b658a30c97743268]
2025-11-24 09:05:18 +00:00

81 lines
1.7 KiB
C#

using System.Threading;
namespace Sandbox;
public sealed class Map
{
private PhysicsWorld PhysicsWorld;
/// <summary>
/// The world physics objects
/// </summary>
public PhysicsGroup PhysicsGroup { get; private set; }
/// <summary>
/// The world geometry;
/// </summary>
public SceneMap SceneMap { get; private set; }
private Map()
{
}
public Map( string mapName, MapLoader loader )
{
SceneMap = new SceneMap( loader.World, mapName, loader );
PhysicsWorld = loader.PhysicsWorld;
CreatePhysics( SceneMap.MapFolder, loader.WorldOrigin );
}
public static async Task<Map> CreateAsync( string mapName, MapLoader loader, CancellationToken cancelToken = default )
{
var sceneMap = await SceneMap.CreateAsync( loader.World, mapName, loader, cancelToken );
if ( !sceneMap.IsValid() )
return null;
var map = new Map
{
SceneMap = sceneMap,
PhysicsWorld = loader.PhysicsWorld
};
map.CreatePhysics( sceneMap.MapFolder, loader.WorldOrigin );
return map;
}
private void CreatePhysics( string mapFolder, Vector3 origin )
{
if ( !PhysicsWorld.IsValid() )
return;
var physicsGroup = PhysicsWorld.native.CreateAggregateInstance( $"{mapFolder}/world_physics.vphys", new Transform( origin ), 0, PhysicsMotionType.Static );
if ( !physicsGroup.IsValid() )
{
Log.Warning( $"Couldn't find map physics: '{mapFolder}/world_physics.vphys'" );
return;
}
PhysicsGroup = physicsGroup;
}
public void Delete()
{
if ( SceneMap.IsValid() )
{
SceneMap.Delete();
SceneMap = null;
}
if ( PhysicsGroup.IsValid() )
{
PhysicsWorld.native.DestroyAggregateInstance( PhysicsGroup );
PhysicsGroup = null;
}
PhysicsWorld = null;
}
}