mirror of
https://github.com/Facepunch/sbox-public.git
synced 2026-01-13 08:48:39 -05:00
This commit imports the C# engine code and game files, excluding C++ source code. [Source-Commit: ceb3d758046e50faa6258bc3b658a30c97743268]
81 lines
1.7 KiB
C#
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;
|
|
}
|
|
}
|