has and remove component
parent
a7727bf750
commit
6a57453dc2
|
@ -36,7 +36,7 @@ pub const ComponentManager = struct {
|
||||||
self.component_stores.add(ptr.*);
|
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);
|
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;
|
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 {
|
pub fn read_components(self: *Self, comptime TComponent: type) []TComponent {
|
||||||
return self.component_stores.get(ComponentStore(TComponent)).*.all_components();
|
return self.component_stores.get(ComponentStore(TComponent)).*.all_components();
|
||||||
}
|
}
|
||||||
|
@ -67,7 +75,7 @@ test "add component" {
|
||||||
|
|
||||||
component_manager.register(TestComponent);
|
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);
|
var expectedComponent = try component_manager.get_component(TestComponent, 2);
|
||||||
expectedComponent.number = 5; // should be immutable!
|
expectedComponent.number = 5; // should be immutable!
|
||||||
|
|
||||||
|
@ -75,6 +83,50 @@ test "add component" {
|
||||||
testing.expect(expectedComponent.number == 3);
|
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" {
|
test "read components" {
|
||||||
const component = TestComponent {
|
const component = TestComponent {
|
||||||
.number = 3
|
.number = 3
|
||||||
|
@ -93,9 +145,9 @@ test "read components" {
|
||||||
|
|
||||||
component_manager.register(TestComponent);
|
component_manager.register(TestComponent);
|
||||||
|
|
||||||
component_manager.add_component(2, component);
|
component_manager.set_component(2, component);
|
||||||
component_manager.add_component(5, componentTwo);
|
component_manager.set_component(5, componentTwo);
|
||||||
component_manager.add_component(52, componentThree);
|
component_manager.set_component(52, componentThree);
|
||||||
|
|
||||||
var components = component_manager.read_components(TestComponent);
|
var components = component_manager.read_components(TestComponent);
|
||||||
|
|
||||||
|
@ -122,9 +174,9 @@ test "read entities" {
|
||||||
|
|
||||||
component_manager.register(TestComponent);
|
component_manager.register(TestComponent);
|
||||||
|
|
||||||
component_manager.add_component(2, component);
|
component_manager.set_component(2, component);
|
||||||
component_manager.add_component(5, componentTwo);
|
component_manager.set_component(5, componentTwo);
|
||||||
component_manager.add_component(52, componentThree);
|
component_manager.set_component(52, componentThree);
|
||||||
|
|
||||||
var entities = component_manager.read_entities(TestComponent);
|
var entities = component_manager.read_entities(TestComponent);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue