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

355 行
12 KiB

using System;
using NUnit.Framework;
using Unity.Collections;
// ******* COPY AND PASTE WARNING *************
// NOTE: Duplicate tests (with only type differences)
// - SystemStateComponentTests.cs and SystemStateBufferElementTests.cs
// - Any change to this file should be reflected in the other file.
// Changes between two files:
// - s/SystemStateComponentTests/SystemStateBufferElementTests/
// - s/EcsState1/EcsIntStateElement/g
// - Add VerifyBufferCount to SystemStateBufferElementTests
// - SystemStateBufferElementTests calls VerifyBufferCount instead of VerifyComponentCount on EcsIntStateElement
// - SetSharedComponent in SystemStateComponentTests:
// m_Manager.SetComponentData(entity, new EcsState1(2));
// Replaced with GetBuffer:
// var buffer = m_Manager.GetBuffer<EcsIntStateElement>(entity);
// buffer.Add(2);
// ******* COPY AND PASTE WARNING *************
namespace Unity.Entities.Tests
{
[TestFixture]
class SystemStateBufferElementTests : ECSTestsFixture
{
void VerifyComponentCount<T>(int expectedCount)
where T : IComponentData
{
var group = m_Manager.CreateEntityQuery(ComponentType.ReadWrite<T>());
var chunks = group.CreateArchetypeChunkArray(Allocator.TempJob);
group.Dispose();
Assert.AreEqual(expectedCount, ArchetypeChunkArray.CalculateEntityCount(chunks));
chunks.Dispose();
}
void VerifyBufferCount<T>(int expectedCount)
where T : ISystemStateBufferElementData
{
var group = m_Manager.CreateEntityQuery(ComponentType.ReadWrite<T>());
var chunks = group.CreateArchetypeChunkArray(Allocator.TempJob);
group.Dispose();
Assert.AreEqual(expectedCount, ArchetypeChunkArray.CalculateEntityCount(chunks));
chunks.Dispose();
}
void VerifyQueryCount(EntityQuery group, int expectedCount)
{
var chunks = group.CreateArchetypeChunkArray(Allocator.TempJob);
Assert.AreEqual(expectedCount, ArchetypeChunkArray.CalculateEntityCount(chunks));
chunks.Dispose();
}
[Test]
[StandaloneFixme] // ISharedComponentData
public void DeleteWhenEmpty()
{
var entity = m_Manager.CreateEntity(
typeof(EcsTestData),
typeof(EcsTestSharedComp),
typeof(EcsIntStateElement)
);
m_Manager.SetComponentData(entity, new EcsTestData(1));
var buffer = m_Manager.GetBuffer<EcsIntStateElement>(entity);
buffer.Add(2);
m_Manager.SetSharedComponentData(entity, new EcsTestSharedComp(3));
VerifyComponentCount<EcsTestData>(1);
m_Manager.DestroyEntity(entity);
VerifyComponentCount<EcsTestData>(0);
VerifyBufferCount<EcsIntStateElement>(1);
m_Manager.RemoveComponent<EcsIntStateElement>(entity);
VerifyBufferCount<EcsIntStateElement>(0);
Assert.IsFalse(m_Manager.Exists(entity));
}
[Test]
[StandaloneFixme] // ISharedComponentData
public void DeleteWhenEmptyArray()
{
var entities = new Entity[512];
for (var i = 0; i < 512; i++)
{
var entity = m_Manager.CreateEntity(
typeof(EcsTestData),
typeof(EcsTestSharedComp),
typeof(EcsIntStateElement)
);
entities[i] = entity;
m_Manager.SetComponentData(entity, new EcsTestData(i));
var buffer = m_Manager.GetBuffer<EcsIntStateElement>(entity);
buffer.Add(2);
m_Manager.SetSharedComponentData(entity, new EcsTestSharedComp(i % 7));
}
VerifyComponentCount<EcsTestData>(512);
for (var i = 0; i < 512; i += 2)
{
var entity = entities[i];
m_Manager.DestroyEntity(entity);
}
VerifyComponentCount<EcsTestData>(256);
VerifyBufferCount<EcsIntStateElement>(512);
VerifyQueryCount(m_Manager.CreateEntityQuery(
ComponentType.Exclude<EcsTestData>(),
ComponentType.ReadWrite<EcsIntStateElement>()), 256);
for (var i = 0; i < 512; i += 2)
{
var entity = entities[i];
m_Manager.RemoveComponent<EcsIntStateElement>(entity);
}
VerifyBufferCount<EcsIntStateElement>(256);
for (var i = 0; i < 512; i += 2)
{
var entity = entities[i];
Assert.IsFalse(m_Manager.Exists(entity));
}
for (var i = 1; i < 512; i += 2)
{
var entity = entities[i];
Assert.IsTrue(m_Manager.Exists(entity));
}
}
[Test]
[StandaloneFixme] // ISharedComponentData
public void DeleteWhenEmptyArray2()
{
var entities = new Entity[512];
for (var i = 0; i < 512; i++)
{
var entity = m_Manager.CreateEntity(
typeof(EcsTestData),
typeof(EcsTestSharedComp),
typeof(EcsIntStateElement)
);
entities[i] = entity;
m_Manager.SetComponentData(entity, new EcsTestData(i));
var buffer = m_Manager.GetBuffer<EcsIntStateElement>(entity);
buffer.Add(i);
m_Manager.SetSharedComponentData(entity, new EcsTestSharedComp(i % 7));
}
VerifyComponentCount<EcsTestData>(512);
for (var i = 0; i < 256; i++)
{
var entity = entities[i];
m_Manager.DestroyEntity(entity);
}
VerifyComponentCount<EcsTestData>(256);
VerifyBufferCount<EcsIntStateElement>(512);
VerifyQueryCount(m_Manager.CreateEntityQuery(
ComponentType.Exclude<EcsTestData>(),
ComponentType.ReadWrite<EcsIntStateElement>()), 256);
for (var i = 0; i < 256; i++)
{
var entity = entities[i];
m_Manager.RemoveComponent<EcsIntStateElement>(entity);
}
VerifyBufferCount<EcsIntStateElement>(256);
for (var i = 0; i < 256; i++)
{
var entity = entities[i];
Assert.IsFalse(m_Manager.Exists(entity));
}
for (var i = 256; i < 512; i++)
{
var entity = entities[i];
Assert.IsTrue(m_Manager.Exists(entity));
}
}
[Test]
[StandaloneFixme] // ISharedComponentData
public void DoNotInstantiateSystemState()
{
var entity0 = m_Manager.CreateEntity(
typeof(EcsTestData),
typeof(EcsTestSharedComp),
typeof(EcsIntStateElement)
);
m_Manager.Instantiate(entity0);
VerifyBufferCount<EcsIntStateElement>(1);
}
[Test]
public void InstantiateResidueEntityThrows()
{
var entity0 = m_Manager.CreateEntity(
typeof(EcsTestData),
typeof(EcsIntStateElement)
);
m_Manager.DestroyEntity(entity0);
Assert.Throws<ArgumentException>(() => m_Manager.Instantiate(entity0));
}
[Test]
[StandaloneFixme] // Test Error
public void DeleteFromEntity()
{
var entities = new Entity[512];
for (var i = 0; i < 512; i++)
{
var entity = m_Manager.CreateEntity(
typeof(EcsTestData),
typeof(EcsIntStateElement)
);
entities[i] = entity;
m_Manager.SetComponentData(entity, new EcsTestData(i));
var buffer = m_Manager.GetBuffer<EcsIntStateElement>(entity);
buffer.Add(i); }
VerifyComponentCount<EcsTestData>(512);
for (var i = 0; i < 512; i++)
{
var entity = entities[i];
m_Manager.DestroyEntity(entity);
}
VerifyComponentCount<EcsTestData>(0);
VerifyBufferCount<EcsIntStateElement>(512);
var group = m_Manager.CreateEntityQuery(
ComponentType.Exclude<EcsTestData>(),
ComponentType.ReadWrite<EcsIntStateElement>());
for (var i = 0; i < 512; i++)
{
var entity = entities[i];
m_Manager.RemoveComponent(entity,typeof(EcsIntStateElement));
}
VerifyBufferCount<EcsIntStateElement>(0);
for (var i = 0; i < 512; i++)
{
var entity = entities[i];
Assert.IsFalse(m_Manager.Exists(entity));
}
}
[Test]
public void DeleteFromEntityQuery()
{
var entities = new Entity[512];
for (var i = 0; i < 512; i++)
{
var entity = m_Manager.CreateEntity(
typeof(EcsTestData),
typeof(EcsIntStateElement)
);
entities[i] = entity;
m_Manager.SetComponentData(entity, new EcsTestData(i));
var buffer = m_Manager.GetBuffer<EcsIntStateElement>(entity);
buffer.Add(i);
}
VerifyComponentCount<EcsTestData>(512);
for (var i = 0; i < 512; i++)
{
var entity = entities[i];
m_Manager.DestroyEntity(entity);
}
VerifyComponentCount<EcsTestData>(0);
VerifyBufferCount<EcsIntStateElement>(512);
var group = m_Manager.CreateEntityQuery(
ComponentType.Exclude<EcsTestData>(),
ComponentType.ReadWrite<EcsIntStateElement>());
m_Manager.RemoveComponent(group,typeof(EcsIntStateElement));
VerifyBufferCount<EcsIntStateElement>(0);
for (var i = 0; i < 512; i++)
{
var entity = entities[i];
Assert.IsFalse(m_Manager.Exists(entity));
}
}
[Test]
public void DeleteTagFromEntityQuery()
{
var entities = new Entity[512];
for (var i = 0; i < 512; i++)
{
var entity = m_Manager.CreateEntity(
typeof(EcsTestData),
typeof(EcsIntStateElement)
);
entities[i] = entity;
m_Manager.SetComponentData(entity, new EcsTestData(i));
}
VerifyComponentCount<EcsTestData>(512);
for (var i = 0; i < 512; i++)
{
var entity = entities[i];
m_Manager.DestroyEntity(entity);
}
VerifyComponentCount<EcsTestData>(0);
VerifyBufferCount<EcsIntStateElement>(512);
var group = m_Manager.CreateEntityQuery(
ComponentType.Exclude<EcsTestData>(),
ComponentType.ReadWrite<EcsIntStateElement>());
m_Manager.RemoveComponent(group,typeof(EcsIntStateElement));
VerifyBufferCount<EcsIntStateElement>(0);
for (var i = 0; i < 512; i++)
{
var entity = entities[i];
Assert.IsFalse(m_Manager.Exists(entity));
}
}
}
}