Progress network character controls
This commit is contained in:
1 parent
01f38a19a1
commit
0cb70d4042
51 files changed
+297
-2093
No files matched your search
@@ -14,6 +14,7 @@ namespace Server
|
||||
[WorldSystemFilter(WorldSystemFilterFlags.ServerSimulation)]
|
||||
public partial struct ServerProcessGameEntryRequestSystem : ISystem
|
||||
{
|
||||
[BurstCompile]
|
||||
public void OnCreate(ref SystemState state)
|
||||
{
|
||||
state.RequireForUpdate<TdPrefabs>();
|
||||
@@ -22,21 +23,19 @@ namespace Server
|
||||
}
|
||||
|
||||
|
||||
[BurstCompile]
|
||||
public void OnUpdate(ref SystemState state)
|
||||
{
|
||||
var ecb = new EntityCommandBuffer(Allocator.Temp);
|
||||
// var ecb = new EntityCommandBuffer(Allocator.Temp);
|
||||
|
||||
var ecb = SystemAPI.GetSingletonRW<EndSimulationEntityCommandBufferSystem.Singleton>().ValueRW
|
||||
.CreateCommandBuffer(state.WorldUnmanaged);
|
||||
|
||||
var tdPrefabs = SystemAPI.GetSingleton<TdPrefabs>();
|
||||
var characterPrefab = tdPrefabs.Character;
|
||||
var fpsPlayerPrefab = tdPrefabs.FPSPlayer;
|
||||
|
||||
foreach (var (teamRequest, requestSource, requestEntity) in SystemAPI.Query<TdTeamRequest, ReceiveRpcCommandRequest>().WithEntityAccess())
|
||||
{
|
||||
//destroy request entity that only holds request
|
||||
ecb.DestroyEntity(requestEntity);
|
||||
|
||||
//sync server connection entity with client connection entity
|
||||
ecb.AddComponent<NetworkStreamInGame>(requestSource.SourceConnection);
|
||||
|
||||
var requestedTeam = teamRequest.Value;
|
||||
var requestedColor = teamRequest.Color;
|
||||
|
||||
@@ -54,37 +53,47 @@ namespace Server
|
||||
break;
|
||||
}
|
||||
|
||||
Debug.Log($"Server is assigning ClientId {clientId} to team {requestedTeam}");
|
||||
|
||||
var newCharacter = ecb.Instantiate(characterPrefab);
|
||||
var newFPSPlayer = ecb.Instantiate(fpsPlayerPrefab);
|
||||
|
||||
ecb.SetName(newCharacter, "Character");
|
||||
//instantiate prefab
|
||||
|
||||
var characterEntity = ecb.Instantiate(tdPrefabs.Character);
|
||||
var playerEntity = ecb.Instantiate(tdPrefabs.FPSPlayer);
|
||||
|
||||
//Destroy character prefab, when client disconnects
|
||||
ecb.AppendToBuffer(requestSource.SourceConnection, new LinkedEntityGroup{Value = characterEntity});
|
||||
ecb.AppendToBuffer(requestSource.SourceConnection, new LinkedEntityGroup{Value = playerEntity});
|
||||
|
||||
//Setup ghost owner
|
||||
ecb.SetComponent(characterEntity, new GhostOwner { NetworkId = clientId});
|
||||
ecb.SetComponent(playerEntity, new GhostOwner { NetworkId = clientId});
|
||||
|
||||
|
||||
ecb.SetName(characterEntity, "Character");
|
||||
|
||||
//Set position
|
||||
var newTransform = LocalTransform.FromPosition(spawnPosition);
|
||||
ecb.SetComponent(newCharacter, newTransform);
|
||||
ecb.SetComponent(characterEntity, newTransform);
|
||||
|
||||
ecb.SetComponent(newCharacter, new GhostOwner { NetworkId = clientId});
|
||||
ecb.SetComponent(newFPSPlayer, new GhostOwner { NetworkId = clientId});
|
||||
|
||||
ecb.SetComponent(newCharacter, new TdTeam { Value = requestedTeam });
|
||||
//Set config and Team
|
||||
ecb.SetComponent(characterEntity, new TdTeam { Value = requestedTeam });
|
||||
|
||||
ecb.SetComponent(newCharacter, new CharacterConfig
|
||||
ecb.SetComponent(characterEntity, new CharacterConfig
|
||||
{
|
||||
Color = requestedColor
|
||||
});
|
||||
|
||||
//Setup connection
|
||||
FirstPersonPlayer playerComponent = SystemAPI.GetComponent<FirstPersonPlayer>(tdPrefabs.FPSPlayer);
|
||||
playerComponent.ControlledCharacter = newCharacter;
|
||||
ecb.SetComponent(newFPSPlayer, playerComponent);
|
||||
playerComponent.ControlledCharacter = characterEntity;
|
||||
ecb.SetComponent(playerEntity, playerComponent);
|
||||
|
||||
//Destroy character prefab, when client disconnects
|
||||
ecb.AppendToBuffer(requestSource.SourceConnection, new LinkedEntityGroup{Value = newCharacter});
|
||||
ecb.AppendToBuffer(requestSource.SourceConnection, new LinkedEntityGroup{Value = newFPSPlayer});
|
||||
//sync server connection entity with client connection entity
|
||||
ecb.AddComponent<NetworkStreamInGame>(requestSource.SourceConnection);
|
||||
|
||||
//destroy request entity that only holds request
|
||||
ecb.DestroyEntity(requestEntity);
|
||||
}
|
||||
|
||||
ecb.Playback(state.EntityManager);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user