You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

80 lines
2.6 KiB

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<Troop>();
typeMetaDatabase.RegisterType<Soldier>();
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<Soldier>(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}");
}
}
}
}