Boat Attack使用了Universal RP的许多新图形功能,可以用于探索 Universal RP 的使用方式和技巧。
您最多选择25个主题 主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 

233 行
10 KiB

using NUnit.Framework;
using Unity.Collections;
namespace Unity.Entities.Tests
{
class EntityManagerComponentGroupOperationsTests : ECSTestsFixture
{
[Test]
public void AddRemoveChunkComponentWithGroupWorks()
{
var metaChunkGroup = m_Manager.CreateEntityQuery(typeof(ChunkHeader));
var entity1 = m_Manager.CreateEntity(typeof(EcsTestData));
var entity2 = m_Manager.CreateEntity(typeof(EcsTestData), typeof(EcsTestData2));
var entity3 = m_Manager.CreateEntity(typeof(EcsTestData2));
var group1 = m_Manager.CreateEntityQuery(ComponentType.ReadWrite<EcsTestData>());
m_Manager.AddChunkComponentData(group1, new EcsTestData3(7));
Assert.IsTrue(m_Manager.HasComponent(entity1, ComponentType.ChunkComponent<EcsTestData3>()));
var val1 = m_Manager.GetChunkComponentData<EcsTestData3>(entity1).value0;
Assert.AreEqual(7, val1);
Assert.IsTrue(m_Manager.HasComponent(entity2, ComponentType.ChunkComponent<EcsTestData3>()));
var val2 = m_Manager.GetChunkComponentData<EcsTestData3>(entity2).value0;
Assert.AreEqual(7, val2);
Assert.IsFalse(m_Manager.HasComponent(entity3, ComponentType.ChunkComponent<EcsTestData3>()));
Assert.AreEqual(2, metaChunkGroup.CalculateLength());
m_ManagerDebug.CheckInternalConsistency();
var group2 = m_Manager.CreateEntityQuery(ComponentType.ReadWrite<EcsTestData2>(), ComponentType.ChunkComponent<EcsTestData3>());
m_Manager.RemoveChunkComponentData<EcsTestData3>(group2);
Assert.IsFalse(m_Manager.HasComponent(entity2, ComponentType.ChunkComponent<EcsTestData3>()));
Assert.AreEqual(1, metaChunkGroup.CalculateLength());
}
[Test]
[StandaloneFixme]
public void AddRemoveSharedComponentWithGroupWorks()
{
var entity1 = m_Manager.CreateEntity(typeof(EcsTestData));
var entity2 = m_Manager.CreateEntity(typeof(EcsTestData), typeof(EcsTestData2));
var entity3 = m_Manager.CreateEntity(typeof(EcsTestData2));
var group1 = m_Manager.CreateEntityQuery(ComponentType.ReadWrite<EcsTestData>());
m_Manager.AddSharedComponentData(group1, new EcsTestSharedComp(7));
Assert.IsTrue(m_Manager.HasComponent(entity1, ComponentType.ReadWrite<EcsTestSharedComp>()));
var val1 = m_Manager.GetSharedComponentData<EcsTestSharedComp>(entity1).value;
Assert.AreEqual(7, val1);
Assert.IsTrue(m_Manager.HasComponent(entity2, ComponentType.ReadWrite<EcsTestSharedComp>()));
var val2 = m_Manager.GetSharedComponentData<EcsTestSharedComp>(entity2).value;
Assert.AreEqual(7, val2);
Assert.IsFalse(m_Manager.HasComponent(entity3, ComponentType.ReadWrite<EcsTestSharedComp>()));
m_ManagerDebug.CheckInternalConsistency();
var group2 = m_Manager.CreateEntityQuery(ComponentType.ReadWrite<EcsTestData2>(), ComponentType.ReadWrite<EcsTestSharedComp>());
m_Manager.RemoveComponent(group2, typeof(EcsTestSharedComp));
Assert.IsFalse(m_Manager.HasComponent(entity2, typeof(EcsTestSharedComp)));
}
[Test]
[StandaloneFixme] // ISharedComponentData
public void AddRemoveAnyComponentWithGroupWorksWithVariousTypes()
{
TypeManager.Initialize();
var componentTypes = new ComponentType[] { typeof(EcsTestTag), typeof(EcsTestData4), ComponentType.ChunkComponent<EcsTestData4>(), typeof(EcsTestSharedComp) };
foreach (var type in componentTypes)
{
// We want a clean slate for the m_manager so teardown and setup before the test
TearDown();
Setup();
var metaChunkGroup = m_Manager.CreateEntityQuery(typeof(ChunkHeader));
var entity1 = m_Manager.CreateEntity(typeof(EcsTestData));
var entity2 = m_Manager.CreateEntity(typeof(EcsTestData), typeof(EcsTestData2));
var entity3 = m_Manager.CreateEntity(typeof(EcsTestData2));
var group1 = m_Manager.CreateEntityQuery(ComponentType.ReadWrite<EcsTestData>());
m_Manager.AddComponent(group1, type);
Assert.IsTrue(m_Manager.HasComponent(entity1, type));
Assert.IsTrue(m_Manager.HasComponent(entity2, type));
Assert.IsFalse(m_Manager.HasComponent(entity3, type));
if (type.IsChunkComponent)
Assert.AreEqual(2, metaChunkGroup.CalculateLength());
if (type == ComponentType.ReadWrite<EcsTestSharedComp>())
{
m_Manager.SetSharedComponentData(entity1, new EcsTestSharedComp(1));
m_Manager.SetSharedComponentData(entity2, new EcsTestSharedComp(2));
}
m_ManagerDebug.CheckInternalConsistency();
var group2 = m_Manager.CreateEntityQuery(ComponentType.ReadWrite<EcsTestData2>(), type);
m_Manager.RemoveComponent(group2, type);
Assert.IsFalse(m_Manager.HasComponent(entity2, ComponentType.ChunkComponent<EcsTestData3>()));
if (type.IsChunkComponent)
Assert.AreEqual(1, metaChunkGroup.CalculateLength());
}
TypeManager.Shutdown();
}
[Test]
[StandaloneFixme] // ISharedComponentData
public void RemoveAnyComponentWithGroupIgnoresChunksThatDontHaveTheComponent()
{
TypeManager.Initialize();
var componentTypes = new ComponentType[] { typeof(EcsTestTag), typeof(EcsTestData4), ComponentType.ChunkComponent<EcsTestData4>(), typeof(EcsTestSharedComp) };
foreach (var type in componentTypes)
{
// We want a clean slate for the m_manager so teardown and setup before the test
TearDown();
Setup();
var metaChunkGroup = m_Manager.CreateEntityQuery(typeof(ChunkHeader));
var entity1 = m_Manager.CreateEntity(typeof(EcsTestData));
var entity2 = m_Manager.CreateEntity(typeof(EcsTestData), typeof(EcsTestData2));
var entity3 = m_Manager.CreateEntity(typeof(EcsTestData2));
var group1 = m_Manager.CreateEntityQuery(ComponentType.ReadWrite<EcsTestData>());
m_Manager.AddComponent(group1, type);
Assert.IsTrue(m_Manager.HasComponent(entity1, type));
Assert.IsTrue(m_Manager.HasComponent(entity2, type));
Assert.IsFalse(m_Manager.HasComponent(entity3, type));
if (type.IsChunkComponent)
Assert.AreEqual(2, metaChunkGroup.CalculateLength());
if (type == ComponentType.ReadWrite<EcsTestSharedComp>())
{
m_Manager.SetSharedComponentData(entity1, new EcsTestSharedComp(1));
m_Manager.SetSharedComponentData(entity2, new EcsTestSharedComp(2));
}
m_ManagerDebug.CheckInternalConsistency();
m_Manager.RemoveComponent(m_Manager.UniversalQuery, type);
Assert.AreEqual(0, m_Manager.CreateEntityQuery(type).CalculateLength());
}
TypeManager.Shutdown();
}
uint GetComponentDataVersion<T>(Entity e) where T : struct, IComponentData
{
return m_Manager.GetChunk(e).GetComponentVersion(m_Manager.GetArchetypeChunkComponentType<T>(true));
}
uint GetSharedComponentDataVersion<T>(Entity e) where T : struct, ISharedComponentData
{
return m_Manager.GetChunk(e).GetComponentVersion(m_Manager.GetArchetypeChunkSharedComponentType<T>());
}
[Test]
[StandaloneFixme] // Don't know why fails?
public void AddRemoveComponentWithGroupPreservesChangeVersions()
{
m_ManagerDebug.SetGlobalSystemVersion(10);
var entity1 = m_Manager.CreateEntity(typeof(EcsTestData));
var entity2 = m_Manager.CreateEntity(typeof(EcsTestData), typeof(EcsTestData2));
var entity3 = m_Manager.CreateEntity(typeof(EcsTestData2));
m_ManagerDebug.SetGlobalSystemVersion(20);
m_Manager.SetComponentData(entity2, new EcsTestData2(7));
m_Manager.SetComponentData(entity3, new EcsTestData2(8));
Assert.AreEqual(10, GetComponentDataVersion<EcsTestData>(entity1));
Assert.AreEqual(10, GetComponentDataVersion<EcsTestData>(entity2));
Assert.AreEqual(20, GetComponentDataVersion<EcsTestData2>(entity2));
Assert.AreEqual(20, GetComponentDataVersion<EcsTestData2>(entity3));
m_ManagerDebug.SetGlobalSystemVersion(30);
m_Manager.AddSharedComponentData(m_Manager.UniversalQuery, new EcsTestSharedComp(1));
m_ManagerDebug.SetGlobalSystemVersion(40);
m_Manager.AddComponent(m_Manager.UniversalQuery, typeof(EcsTestTag));
Assert.AreEqual(30, GetSharedComponentDataVersion<EcsTestSharedComp>(entity1));
Assert.AreEqual(30, GetSharedComponentDataVersion<EcsTestSharedComp>(entity2));
Assert.AreEqual(30, GetSharedComponentDataVersion<EcsTestSharedComp>(entity3));
Assert.AreEqual(40, GetComponentDataVersion<EcsTestTag>(entity1));
Assert.AreEqual(40, GetComponentDataVersion<EcsTestTag>(entity2));
Assert.AreEqual(40, GetComponentDataVersion<EcsTestTag>(entity3));
m_ManagerDebug.SetGlobalSystemVersion(50);
m_Manager.RemoveComponent(m_Manager.UniversalQuery, typeof(EcsTestSharedComp2));
Assert.AreEqual(30, GetSharedComponentDataVersion<EcsTestSharedComp>(entity1));
Assert.AreEqual(30, GetSharedComponentDataVersion<EcsTestSharedComp>(entity2));
Assert.AreEqual(30, GetSharedComponentDataVersion<EcsTestSharedComp>(entity3));
m_ManagerDebug.SetGlobalSystemVersion(60);
m_Manager.RemoveComponent(m_Manager.UniversalQuery, typeof(EcsTestSharedComp));
Assert.AreEqual(10, GetComponentDataVersion<EcsTestData>(entity1));
Assert.AreEqual(10, GetComponentDataVersion<EcsTestData>(entity2));
Assert.AreEqual(20, GetComponentDataVersion<EcsTestData2>(entity2));
Assert.AreEqual(20, GetComponentDataVersion<EcsTestData2>(entity3));
}
}
}