SkateGame.cs
using System;
using System.Threading.Tasks;
namespace Skateboard;
public sealed class SkateGame : Component, Component.INetworkListener
{
public static SkateGame Instance { get; private set; }
[Property] public List<SteamId> Devs { get; set; }
[ConVar( ConVarFlags.Replicated )] public static bool skate_debug { get; set; } = false;
[Property] public bool StartServer { get; set; } = true;
[Property] public GameObject PlayerPrefab { get; set; }
[Property] public List<GameObject> SpawnPoints { get; set; }
protected override void OnAwake()
{
Instance = this;
}
protected override async Task OnLoad()
{
if ( Scene.IsEditor )
return;
if ( StartServer && !Networking.IsActive )
{
LoadingScreen.Title = "Creating Lobby";
await Task.DelayRealtimeSeconds( 0.1f );
Networking.CreateLobby( new() );
}
}
public void OnActive( Connection channel )
{
if ( !PlayerPrefab.IsValid() )
return;
var startLocation = FindSpawnLocation().WithScale( 1 );
var player = PlayerPrefab.Clone( startLocation, name: $"Player - {channel.DisplayName}" );
player.NetworkSpawn( enabled: true, owner: channel );
var pawn = player.Components.Get<Skateboard.Player.SkatePawn>();
if ( pawn.IsValid() )
pawn.OwningConnectionId = channel.Id;
}
private Transform FindSpawnLocation()
{
if ( SpawnPoints is not null && SpawnPoints.Count > 0 )
{
return Random.Shared.FromList( SpawnPoints, default ).WorldTransform;
}
var spawnPoints = Scene.GetAllComponents<SpawnPoint>().ToArray();
if ( spawnPoints.Length > 0 )
{
return Random.Shared.FromArray( spawnPoints ).WorldTransform;
}
return WorldTransform;
}
[ConCmd( "get_all_maps" )]
public async static void GetAllMaps()
{
var maps = await Package.FindAsync( "type:map" );
foreach ( var map in maps.Packages )
{
var supported = map.GetMeta( "GameSupport", "" );
var parent = map.GetMeta( "ParentPackage", "" );
if ( supported == null || !supported.Contains( "thieves.skateboard" ) || parent == null )
continue;
Log.Info( $"Parent: {parent}" );
Log.Info( $"Map: {map.Title} - {map.FullIdent}" );
}
}
}