public void RemoveSharedComponentFromEntity() { ECSWorld world = new ECSWorld(); var buffer = new EntityCommandBuffer(world); SharedComponent1 shared1 = new SharedComponent1(); EntityArchetype archetype = EntityArchetype.Empty; archetype = archetype.Add <TestComponent1>(); archetype = archetype.AddShared(shared1); Entity target = world.Instantiate(archetype); buffer.RemoveSharedComponent <SharedComponent1>(target); buffer.Playback(); ComponentQuery query = new ComponentQuery(); query.IncludeReadWrite <TestComponent1>(); query.ExcludeShared <SharedComponent1>(); Assert.Collection(world.ComponentManager.GetBlocks(query), accessor => { Assert.Equal(1, accessor.GetEntityData().Length); }); }
public void CreateEntityFromPrefab() { ECSWorld world = new ECSWorld(); var buffer = new EntityCommandBuffer(world); SharedComponent1 shared1 = new SharedComponent1(); Prefab prefab = new Prefab(); prefab.AddComponent(new TestComponent1 { i = 1, d = 2, f = 3 }); prefab.AddSharedComponent(shared1); buffer.CreateEntity(prefab); buffer.Playback(); ComponentQuery query = new ComponentQuery(); query.IncludeReadWrite <TestComponent1>(); query.IncludeShared <SharedComponent1>(); Assert.Collection(world.ComponentManager.GetBlocks(query), accessor => { Assert.Equal(1, accessor.GetEntityData().Length); var cData = accessor.GetComponentData <TestComponent1>(); Assert.Equal(1, cData[0].i); Assert.Equal(2d, cData[0].d, 3); Assert.Equal(3f, cData[0].f, 3); var shared = accessor.GetSharedComponentData <SharedComponent1>(); Assert.Same(shared1, shared); }); }
public void DestroyEntity() { ECSWorld world = new ECSWorld(); var buffer = new EntityCommandBuffer(world); SharedComponent1 shared1 = new SharedComponent1(); EntityArchetype archetype = EntityArchetype.Empty; archetype = archetype.Add <TestComponent1>(); archetype = archetype.AddShared(shared1); buffer.CreateEntity(archetype); buffer.Playback(); ComponentQuery query = new ComponentQuery(); query.IncludeReadWrite <TestComponent1>(); query.IncludeShared <SharedComponent1>(); Entity e = default; Assert.Collection(world.ComponentManager.GetBlocks(query), accessor => { Assert.Equal(1, accessor.GetEntityData().Length); e = accessor.GetEntityData()[0]; }); buffer.DestroyEntity(e); buffer.Playback(); Assert.Empty(world.ComponentManager.GetBlocks(query)); }
public void SetComponentToEntity() { ECSWorld world = new ECSWorld(); var buffer = new EntityCommandBuffer(world); SharedComponent1 shared1 = new SharedComponent1(); EntityArchetype archetype = EntityArchetype.Empty; archetype = archetype.Add <TestComponent1>(); archetype = archetype.AddShared(shared1); Entity target = world.Instantiate(archetype); buffer.SetComponent(target, new TestComponent1 { i = 2, d = 3, f = 4 }); buffer.Playback(); ComponentQuery query = new ComponentQuery(); query.IncludeReadWrite <TestComponent1>(); query.IncludeShared <SharedComponent1>(); Assert.Collection(world.ComponentManager.GetBlocks(query), accessor => { Assert.Equal(1, accessor.GetEntityData().Length); var cData = accessor.GetComponentData <TestComponent1>(); Assert.Equal(2, cData[0].i); Assert.Equal(3d, cData[0].d, 3); Assert.Equal(4f, cData[0].f, 3); }); }
public ComponentQueryTests() { var shared1 = new SharedComponent1(); var shared2 = new SharedComponent2(); archetypeC1 = EntityArchetype.Empty.Add <TestComponent1>(); archetypeC1C2 = archetypeC1.Add <TestComponent2>(); archetypeC1S1 = archetypeC1.AddShared(shared1); archetypeC1C2S1 = archetypeC1S1.Add <TestComponent2>(); archetypeC1C2S1S2 = archetypeC1C2S1.AddShared(shared2); archetypeC2S1 = EntityArchetype.Empty.Add <TestComponent2>().AddShared(shared1); }
public void CreateEntitySetComponent() { ECSWorld world = new ECSWorld(); var buffer = new EntityCommandBuffer(world); SharedComponent1 shared1 = new SharedComponent1(); Prefab prefab = new Prefab(); prefab.AddComponent(new TestComponentVector3() { value = Vector3.UnitY }); prefab.AddSharedComponent(shared1); buffer.CreateEntity(prefab); buffer.CreateEntity(prefab); buffer.SetComponent(new TestComponentVector3 { value = Vector3.UnitX }); buffer.CreateEntity(prefab.Archetype); buffer.SetComponent(new TestComponentVector3 { value = Vector3.UnitZ }); buffer.Playback(); ComponentQuery query = new ComponentQuery(); query.IncludeReadWrite <TestComponentVector3>(); query.IncludeShared <SharedComponent1>(); Assert.Collection(world.ComponentManager.GetBlocks(query), accessor => { Assert.Equal(3, accessor.GetEntityData().Length); var cData = accessor.GetComponentData <TestComponentVector3>(); Assert.Equal(Vector3.UnitY, cData[0].value); Assert.Equal(Vector3.UnitX, cData[1].value); Assert.Equal(Vector3.UnitZ, cData[2].value); var shared = accessor.GetSharedComponentData <SharedComponent1>(); Assert.Same(shared1, shared); }); }
public void ThrowIfNoTarget() { ECSWorld world = new ECSWorld(); var buffer = new EntityCommandBuffer(world); SharedComponent1 shared1 = new SharedComponent1(); Prefab prefab = new Prefab(); prefab.AddComponent(new TestComponentVector3() { value = Vector3.UnitY }); prefab.AddSharedComponent(shared1); Assert.Throws <InvalidOperationException>(() => buffer.AddComponent(new TestComponent1())); buffer.CreateEntity(prefab); buffer.AddComponent(new TestComponent1()); buffer.Playback(); Assert.Throws <InvalidOperationException>(() => buffer.AddComponent(new TestComponent1())); }
public PrefabTests() { prefab1 = new Prefab(); shared = new SharedComponent1() { array = new[] { 1, 2, 3 } }; prefab1.AddComponent(new TestComponent1 { i = 1, d = 2, f = 3 }); prefab1.AddComponent(new TestComponent2 { i = 3, d = 4, f = 5 }); prefab1.AddSharedComponent(shared); prefab2 = new Prefab(); prefab2.AddComponent(new TestComponentVector3() { value = Vector3.One }); }
public void Empty() { ECSWorld world = new ECSWorld(); var buffer = new EntityCommandBuffer(world); SharedComponent1 shared1 = new SharedComponent1(); Prefab prefab = new Prefab(); prefab.AddComponent(new TestComponentVector3() { value = Vector3.UnitY }); prefab.AddSharedComponent(shared1); Assert.True(buffer.IsEmpty()); buffer.CreateEntity(prefab); Assert.False(buffer.IsEmpty()); buffer.Playback(); Assert.True(buffer.IsEmpty()); }