using System; using Unity.Burst; using Unity.Collections; using Unity.Jobs; using Unity.Mathematics; using UnityEngine; namespace GameCore.Network.Test { public class TestNetDatabase : MonoBehaviour { public struct Troop { public float2 position; } public struct Soldier { public int id; public int2 coord; } private TypeMetaDatabase typeMetaDatabase; private NetDatabase netDatabase; private void OnEnable() { typeMetaDatabase = new TypeMetaDatabase(Allocator.Persistent); typeMetaDatabase.RegisterType(); typeMetaDatabase.RegisterType(); netDatabase = new NetDatabase(typeMetaDatabase, 16, Allocator.Persistent); var handle = new UpdateJob() { typeMetaDatabase = typeMetaDatabase, netDatabase = netDatabase, frameId = 1, }.Schedule(); handle.Complete(); } private void OnDisable() { typeMetaDatabase.Dispose(); netDatabase.Dispose(); } [BurstCompile] private struct UpdateJob : IJob { public TypeMetaDatabase typeMetaDatabase; public NetDatabase netDatabase; public int frameId; public void Execute() { var troop = new Troop() {position = new float2(1, 2)}; var troopIndex = netDatabase.Add(troop, frameId, 0, out var gen0, typeMetaDatabase); Debug.Log($"Troop {troopIndex} added, generation {gen0}"); var soldier = new Soldier() {id = 1, coord = new int2(1, 1)}; var soldierIndex = netDatabase.Add(soldier, frameId, troopIndex, out var gen1, typeMetaDatabase); Debug.Log($"Soldier {soldierIndex} added, generation {gen1}"); ref readonly var soldierData = ref netDatabase.Get(soldierIndex, typeMetaDatabase); Debug.Log($"Soldier id: {soldierData.id}, coord: {soldierData.coord}"); soldier.coord = new int2(2, 2); var ok = netDatabase.Update(soldierIndex, soldier, frameId, typeMetaDatabase); Debug.Log($"Soldier update: {ok}, id: {soldierData.id}, coord: {soldierData.coord}"); ok = netDatabase.Remove(troopIndex); Debug.Log($"Troop removed: {ok}"); ok = netDatabase.Remove(soldierIndex); Debug.Log($"Solider removed: {ok}"); } } } }