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.
74 lines
2.4 KiB
74 lines
2.4 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, 0, 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}"); |
|
} |
|
} |
|
} |
|
} |