has and remove component
							parent
							
								
									a7727bf750
								
							
						
					
					
						commit
						6a57453dc2
					
				|  | @ -36,7 +36,7 @@ pub const ComponentManager = struct { | |||
|         self.component_stores.add(ptr.*); | ||||
|     } | ||||
| 
 | ||||
|     pub fn add_component(self: *Self, entityID: usize, component: anytype) void { | ||||
|     pub fn set_component(self: *Self, entityID: usize, component: anytype) void { | ||||
|         self.component_stores.get(ComponentStore(@TypeOf(component))).*.set(entityID, component); | ||||
|     } | ||||
| 
 | ||||
|  | @ -44,6 +44,14 @@ pub const ComponentManager = struct { | |||
|         return self.component_stores.get(ComponentStore(TComponent)).*.get(entityID) catch |err| return err; | ||||
|     } | ||||
| 
 | ||||
|     pub fn has_component(self: *Self, comptime TComponent: type, entityID: usize) bool { | ||||
|         return self.component_stores.get(ComponentStore(TComponent)).*.has(entityID); | ||||
|     } | ||||
| 
 | ||||
|     pub fn remove_component(self: *Self, comptime TComponent: type, entityID: usize) void { | ||||
|         return self.component_stores.get(ComponentStore(TComponent)).*.remove(entityID); | ||||
|     } | ||||
| 
 | ||||
|     pub fn read_components(self: *Self, comptime TComponent: type) []TComponent { | ||||
|         return self.component_stores.get(ComponentStore(TComponent)).*.all_components(); | ||||
|     } | ||||
|  | @ -67,7 +75,7 @@ test "add component" { | |||
| 
 | ||||
|     component_manager.register(TestComponent); | ||||
| 
 | ||||
|     component_manager.add_component(2, component); | ||||
|     component_manager.set_component(2, component); | ||||
|     var expectedComponent = try component_manager.get_component(TestComponent, 2); | ||||
|     expectedComponent.number = 5; // should be immutable! | ||||
| 
 | ||||
|  | @ -75,6 +83,50 @@ test "add component" { | |||
|     testing.expect(expectedComponent.number == 3); | ||||
| } | ||||
| 
 | ||||
| test "has component" { | ||||
|     const component = TestComponent { | ||||
|         .number = 69 | ||||
|     }; | ||||
| 
 | ||||
|     var component_manager = ComponentManager.init(std.testing.allocator); | ||||
|     defer component_manager.deinit(); | ||||
| 
 | ||||
|     component_manager.register(TestComponent); | ||||
| 
 | ||||
|     component_manager.set_component(420, component); | ||||
| 
 | ||||
|     testing.expect(component_manager.has_component(TestComponent, 420)); | ||||
|     testing.expect(!component_manager.has_component(TestComponent, 39)); | ||||
| } | ||||
| 
 | ||||
| test "remove component" { | ||||
|     const component = TestComponent { | ||||
|         .number = 3 | ||||
|     }; | ||||
| 
 | ||||
|     const componentTwo = TestComponent { | ||||
|         .number = 8 | ||||
|     }; | ||||
| 
 | ||||
|     const componentThree = TestComponent { | ||||
|         .number = 14 | ||||
|     }; | ||||
| 
 | ||||
|     var component_manager = ComponentManager.init(std.testing.allocator); | ||||
|     defer component_manager.deinit(); | ||||
| 
 | ||||
|     component_manager.register(TestComponent); | ||||
| 
 | ||||
|     component_manager.set_component(2, component); | ||||
|     component_manager.set_component(5, componentTwo); | ||||
|     component_manager.set_component(52, componentThree); | ||||
| 
 | ||||
|     var components = component_manager.remove_component(TestComponent, 5); | ||||
| 
 | ||||
|     testing.expect(!component_manager.has_component(TestComponent, 5)); | ||||
|     testing.expect(component_manager.has_component(TestComponent, 52)); | ||||
| } | ||||
| 
 | ||||
| test "read components" { | ||||
|     const component = TestComponent { | ||||
|         .number = 3 | ||||
|  | @ -93,9 +145,9 @@ test "read components" { | |||
| 
 | ||||
|     component_manager.register(TestComponent); | ||||
| 
 | ||||
|     component_manager.add_component(2, component); | ||||
|     component_manager.add_component(5, componentTwo); | ||||
|     component_manager.add_component(52, componentThree); | ||||
|     component_manager.set_component(2, component); | ||||
|     component_manager.set_component(5, componentTwo); | ||||
|     component_manager.set_component(52, componentThree); | ||||
| 
 | ||||
|     var components = component_manager.read_components(TestComponent); | ||||
| 
 | ||||
|  | @ -122,9 +174,9 @@ test "read entities" { | |||
| 
 | ||||
|     component_manager.register(TestComponent); | ||||
| 
 | ||||
|     component_manager.add_component(2, component); | ||||
|     component_manager.add_component(5, componentTwo); | ||||
|     component_manager.add_component(52, componentThree); | ||||
|     component_manager.set_component(2, component); | ||||
|     component_manager.set_component(5, componentTwo); | ||||
|     component_manager.set_component(52, componentThree); | ||||
| 
 | ||||
|     var entities = component_manager.read_entities(TestComponent); | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue