public void Entity_With_Component_Changes_Should_Not_Be_Added_Unless_It_Is_A_Match()
 {
     var e1 = new DefaultEntity("e1", "test").AddComponent(new XYComponent());
     Assert.Equal(0, _aspectMatchingFamily.EntireAspectList.Count());
     _aspectMatchingFamily.ComponentAddedToEntity(e1, typeof (XYComponent));
     Assert.Equal(0, _aspectMatchingFamily.EntireAspectList.Count());
 }
 public void IsInChannel_Should_Be_False_For_Incorrect_Channel()
 {
     var channelName = "channelName";
     var notChannelName = "notChannelname";
     var e = new DefaultEntity("test", channelName);
     Assert.False(e.IsInChannel(notChannelName));
 }
 public void Get_Should_Add_To_ChannelAspects_If_Entity_Is_In_Current_Channel()
 {
     Assert.Equal(0, _aspectManager.Aspects.Count());
     var e = new DefaultEntity("Test", "default").CreateLabelAspect("Test", 0, 0);
     _aspectManager.Get(e);
     Assert.Equal(1, _aspectManager.ChannelAspects.Count());
 }
 public void Get_Should_Add_To_Aspects()
 {
     Assert.Equal(0, _aspectManager.Aspects.Count());
     var e = new DefaultEntity("Test", "irrelevant").CreateLabelAspect("Test", 0, 0);
     _aspectManager.Get(e);
     Assert.Equal(1, _aspectManager.Aspects.Count());
 }
 public void AddComponent_Should_Increase_Component_Count()
 {
     var e = new DefaultEntity("Test", "teset");
     Assert.Equal(0, e.Components.Count);
     e.AddComponent(new StringComponent {Value = "test"});
     Assert.Equal(1, e.Components.Count);
 }
 public void Entity_Should_Not_Be_In_Entities_After_Removed()
 {
     var entity = new DefaultEntity();
     _gameManager.AddEntity(entity);
     Assert.True(_gameManager.EntityManager.Entities.ContainsKey(entity.ID));
     _gameManager.RemoveEntity(entity);
     Assert.False(_gameManager.EntityManager.Entities.ContainsKey(entity.ID));
 }
 public void AddEntity_Should_Notify_EntityAdded()
 {
     var notified = false;
     var entity = new DefaultEntity();
     _gameManager.EntityAdded += (s, e) => notified = true;
     _gameManager.AddEntity(entity);
     Assert.True(notified);
 }
 public void AddEntity_Should_Increase_Entity_Count()
 {
     var expected = 1;
     var entity = new DefaultEntity();
     Assert.Equal(0, _gameManager.EntityManager.Entities.Count);
     _gameManager.AddEntity(entity);
     Assert.Equal(expected, _gameManager.EntityManager.Entities.Count);
 }
 public void Init_Should_Apply_Entity_Channels_To_Aspect()
 {
     var expected = new[] {"one", "two", "three"};
     var e = new DefaultEntity("Test", expected).CreateLabelAspect("Label", 0, 0);
     var aspect = new LabelAspect();
     aspect.Init(e);
     Assert.True(aspect.Channels.All(s => expected.Contains(s)));
 }
 public void AddComponent_Should_Raise_OnComponentAdded()
 {
     var called = false;
     var e = new DefaultEntity("name", "test");
     e.ComponentAdded += (s, arg) => { called = true; };
     e.AddComponent(new StringComponent {Value = "test"});
     Assert.True(called);
 }
 public void NewEntity_Should_Not_Allow_An_Entity_To_Be_Added_More_Than_Once()
 {
     var e1 = new DefaultEntity("e1", "test").CreateLabelAspect("test", 0, 0);
     Assert.Equal(0, _aspectMatchingFamily.EntireAspectList.Count());
     _aspectMatchingFamily.NewEntity(e1);
     Assert.Equal(1, _aspectMatchingFamily.EntireAspectList.Count());
     _aspectMatchingFamily.NewEntity(e1);
     Assert.Equal(1, _aspectMatchingFamily.EntireAspectList.Count());
 }
 public void GetAspectList_Should_Register_Existing_Entities()
 {
     var entity = new DefaultEntity("TestEntity", "all");
     entity.CreateLabelAspect("Test", 0, 0);
     _entityManager.Entities.Add(entity.ID, entity);
     _entityAspectManager.RegisterEntity(entity);
     var aspectList = _entityAspectManager.GetAspectList<LabelAspect>();
     Assert.Equal(1, aspectList.Count());
 }
 public IEntity Clone()
 {
     var e = new DefaultEntity(Name, Channels.ToArray());
     foreach (var c in Components.Values)
     {
         e.Components.Add(c.GetType(), c.Clone());
     }
     return e;
 }
 public void RemoveEntity_Should_Decrease_Entity_Count()
 {
     var entity = new DefaultEntity();
     Assert.Equal(0, _gameManager.EntityManager.Entities.Count);
     _gameManager.AddEntity(entity);
     Assert.Equal(1, _gameManager.EntityManager.Entities.Count);
     _gameManager.RemoveEntity(entity);
     Assert.Equal(0, _gameManager.EntityManager.Entities.Count);
 }
 public void Aspect_Should_Be_Removed_From_Channel_List_When_In_Channel_And_Deleted()
 {
     var e = new DefaultEntity("Test", "default").CreateLabelAspect("Test", 0, 0);
     var aspect = _aspectManager.Get(e);
     Assert.Equal(1, _aspectManager.ChannelAspects.Count());
     Assert.Equal(aspect, _aspectManager.ChannelAspects.First());
     aspect.Delete();
     Assert.Equal(0, _aspectManager.ChannelAspects.Count());
 }
 public void NewEntity_Should_Not_Allow_An_Entity_That_Fails_To_Match_AspectComponents()
 {
     var e1 = new DefaultEntity("e1", "test");
     var e2 = new DefaultEntity("e2", "Test").CreateLabelAspect("Test", 0, 0);
     Assert.Equal(0, _aspectMatchingFamily.EntireAspectList.Count());
     _aspectMatchingFamily.NewEntity(e2);
     Assert.Equal(1, _aspectMatchingFamily.EntireAspectList.Count());
     _aspectMatchingFamily.NewEntity(e1);
     Assert.Equal(1, _aspectMatchingFamily.EntireAspectList.Count());
 }
 public void Init_Should_Create_Pointers_To_Entity_Components_From_Aspect()
 {
     var e = new DefaultEntity("Test", "default").CreateLabelAspect("Label", 0, 0);
     var aspect = new LabelAspect();
     aspect.Init(e);
     foreach (var component in e.Components.Values)
     {
         Assert.Equal(component, aspect.Components[component.GetType()]);
     }
 }
        public void Get_Should_Return_A_New_Aspect_Of_Appropriate_Type()
        {
            var expected = typeof (LabelAspect);
            var e = new DefaultEntity("Test", "all");
            e.CreateLabelAspect("Test", 0, 0);

            var actual = _aspectManager.Get(e);
            Assert.Equal(expected, actual.GetType());
            Assert.Equal(actual, _aspectManager.Aspects.First());
        }
        public IEntity Clone()
        {
            var e = new DefaultEntity(Name, Channels.ToArray());

            foreach (var c in Components.Values)
            {
                e.Components.Add(c.GetType(), c.Clone());
            }
            return(e);
        }
 public void RemoveEntity_Should_Delete_Associated_Aspect()
 {
     var deleted = false;
     var e1 = new DefaultEntity("e1", "test").CreateLabelAspect("label", 0, 0);
     _aspectMatchingFamily.NewEntity(e1);
     _aspectMatchingFamily.EntireAspectList.First().Deleted += (s, ea) => deleted = true;
     _aspectMatchingFamily.RemoveEntity(e1);
     Assert.True(deleted);
     Assert.Equal(0, _aspectMatchingFamily.EntireAspectList.Count());
 }
 public void Reset_Should_Clear_Components_and_Channels()
 {
     var e = new DefaultEntity("Test", "default").CreateLabelAspect("Label", 0, 0);
     var aspect = new LabelAspect();
     aspect.Init(e);
     Assert.True(aspect.Components.Count > 0);
     Assert.True(aspect.Channels.Count > 0);
     aspect.Reset();
     Assert.Equal(0, aspect.Components.Count);
     Assert.Equal(0, aspect.Channels.Count);
 }
 public void ReleaseAspectList_Should_Remove_All_Aspects_And_Remove_AspectFamily()
 {
     var entity = new DefaultEntity("TestEntity", "all");
     entity.CreateLabelAspect("Test", 0, 0);
     _entityManager.Entities.Add(entity.ID, entity);
     _entityAspectManager.RegisterEntity(entity);
     var aspectList = _entityAspectManager.GetAspectList<LabelAspect>();
     Assert.Equal(1, aspectList.Count());
     _entityAspectManager.ReleaseAspectList<LabelAspect>();
     Assert.Equal(0, aspectList.Count());
     var aspectList2 = _entityAspectManager.GetAspectList<LabelAspect>();
     Assert.NotEqual(aspectList, aspectList2);
 }
        public void AddComponent_Should_Overwrite_Component_If_Parameter_Set()
        {
            var labelOne = "label one";
            var labelTwo = "label two";
            var e = new DefaultEntity("test", "test");
            e.AddComponent(new StringComponent {Value = labelOne});

            Assert.Equal(labelOne, ((StringComponent) e.Components[typeof (StringComponent)]).Value);

            e.AddComponent(new StringComponent {Value = labelTwo}, true);

            Assert.Equal(labelTwo, ((StringComponent) e.Components[typeof (StringComponent)]).Value);
        }
 public void CleanUp_Should_Delete_All_Aspects()
 {
     var deleteCount = 0;
     var expectedDeleteCount = 3;
     var e1 = new DefaultEntity("e1", "test").CreateLabelAspect("test", 0, 0);
     var e2 = new DefaultEntity("e2", "Test").CreateLabelAspect("test", 0, 0);
     var e3 = new DefaultEntity("e3", "test").CreateLabelAspect("test", 0, 0);
     _aspectMatchingFamily.NewEntity(e1);
     _aspectMatchingFamily.NewEntity(e2);
     _aspectMatchingFamily.NewEntity(e3);
     Assert.Equal(3, _aspectMatchingFamily.EntireAspectList.Count());
     foreach (var aspect in _aspectMatchingFamily.EntireAspectList)
     {
         aspect.Deleted += (s, ea) => deleteCount++;
     }
     _aspectMatchingFamily.CleanUp();
     Assert.Equal(expectedDeleteCount, deleteCount);
     Assert.Equal(0, _aspectMatchingFamily.EntireAspectList.Count());
 }
 public void Entity_With_Component_Changes_Should_Be_Added_If_Component_Is_Right_Type_And_Is_Match()
 {
     var e1 = new DefaultEntity("e1", "test").CreateLabelAspect("test", 0, 0);
     Assert.Equal(0, _aspectMatchingFamily.EntireAspectList.Count());
     _aspectMatchingFamily.ComponentAddedToEntity(e1, typeof (XYComponent));
     Assert.Equal(1, _aspectMatchingFamily.EntireAspectList.Count());
 }
 public void IsInChannel_Should_Validate_Entity_Channel()
 {
     var channelName = "channelName";
     var e = new DefaultEntity("test", channelName);
     Assert.True(e.IsInChannel(channelName));
 }
 public void Can_Find_Component_By_String()
 {
     var e = new DefaultEntity("name", "channel");
     e.AddComponent(new StringComponent());
     Assert.True(e.HasComponent(typeof (StringComponent)));
 }
 public void Entity_With_Component_Changes_Should_Not_Be_Removed_If_Family_Does_Not_Contain_Entity()
 {
     var e1 = new DefaultEntity("e1", "test").CreateLabelAspect("test", 0, 0);
     var e2 = new DefaultEntity("e2", "test").CreateLabelAspect("test", 0, 0);
     _aspectMatchingFamily.NewEntity(e1);
     Assert.Equal(1, _aspectMatchingFamily.EntireAspectList.Count());
     _aspectMatchingFamily.ComponentRemovedFromEntity(e2, typeof (XYComponent));
     Assert.Equal(1, _aspectMatchingFamily.EntireAspectList.Count());
 }
 public void Entity_With_Non_Matching_Component_Type_Should_Not_Trigger_Remove()
 {
     var e1 = new DefaultEntity("e1", "test").CreateLabelAspect("test", 0, 0);
     Assert.Equal(0, _aspectMatchingFamily.EntireAspectList.Count());
     _aspectMatchingFamily.NewEntity(e1);
     Assert.Equal(1, _aspectMatchingFamily.EntireAspectList.Count());
     _aspectMatchingFamily.ComponentRemovedFromEntity(e1, typeof (SomeOtherComponent));
     Assert.Equal(1, _aspectMatchingFamily.EntireAspectList.Count());
 }
 public void Entity_That_Is_A_Match_And_Has_Matching_Component_Type_Removed_Should_Be_Removed()
 {
     var e1 = new DefaultEntity("e1", "test").CreateLabelAspect("label", 0, 0);
     _aspectMatchingFamily.NewEntity(e1);
     Assert.Equal(1, _aspectMatchingFamily.EntireAspectList.Count());
     _aspectMatchingFamily.ComponentRemovedFromEntity(e1, typeof (XYComponent));
     Assert.Equal(0, _aspectMatchingFamily.EntireAspectList.Count());
 }
 public void Entity_With_Component_Changes_Should_Not_Be_Added_If_Component_Is_Wrong_Type()
 {
     var e1 =
         new DefaultEntity("e1", "test").CreateLabelAspect("test", 0, 0).AddComponent(new SomeOtherComponent());
     Assert.Equal(0, _aspectMatchingFamily.EntireAspectList.Count());
     _aspectMatchingFamily.ComponentAddedToEntity(e1, typeof (SomeOtherComponent));
     Assert.Equal(0, _aspectMatchingFamily.EntireAspectList.Count());
 }