|
|
|
|
|
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}");
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|