package secs

@(private)
RemoveComponents1 :: proc(world: ^World, entity: Entity, $C: typeid) {
	RemoveComponent(world, entity, C)
}

@(private)
RemoveComponents2 :: proc(world: ^World, entity: Entity, $C1: typeid, $C2: typeid) {
	RemoveComponents1(world, entity, C1)
	RemoveComponent(world, entity, C2)
}

@(private)
RemoveComponents3 :: proc(world: ^World, entity: Entity, $C1: typeid, $C2: typeid, $C3: typeid) {
	RemoveComponents2(world, entity, C1, C2)
	RemoveComponent(world, entity, C3)
}

@(private)
RemoveComponents4 :: proc(
	world: ^World,
	entity: Entity,
	$C1: typeid,
	$C2: typeid,
	$C3: typeid,
	$C4: typeid,
) {
	RemoveComponents3(world, entity, C1, C2, C3)
	RemoveComponent(world, entity, C4)
}

@(private)
RemoveComponents5 :: proc(
	world: ^World,
	entity: Entity,
	$C1: typeid,
	$C2: typeid,
	$C3: typeid,
	$C4: typeid,
	$C5: typeid,
) {
	RemoveComponents4(world, entity, C1, C2, C3, C4)
	RemoveComponent(world, entity, C5)
}

@(private)
RemoveComponents6 :: proc(
	world: ^World,
	entity: Entity,
	$C1: typeid,
	$C2: typeid,
	$C3: typeid,
	$C4: typeid,
	$C5: typeid,
	$C6: typeid,
) {
	RemoveComponents5(world, entity, C1, C2, C3, C4, C5)
	RemoveComponent(world, entity, C6)
}

@(private)
RemoveComponents7 :: proc(
	world: ^World,
	entity: Entity,
	$C1: typeid,
	$C2: typeid,
	$C3: typeid,
	$C4: typeid,
	$C5: typeid,
	$C6: typeid,
	$C7: typeid,
) {
	RemoveComponents6(world, entity, C1, C2, C3, C4, C5, C6)
	RemoveComponent(world, entity, C7)
}

@(private)
RemoveComponents8 :: proc(
	world: ^World,
	entity: Entity,
	$C1: typeid,
	$C2: typeid,
	$C3: typeid,
	$C4: typeid,
	$C5: typeid,
	$C6: typeid,
	$C7: typeid,
	$C8: typeid,
) {
	RemoveComponents7(world, entity, C1, C2, C3, C4, C5, C6, C7)
	RemoveComponent(world, entity, C8)
}

@(private)
RemoveComponents9 :: proc(
	world: ^World,
	entity: Entity,
	$C1: typeid,
	$C2: typeid,
	$C3: typeid,
	$C4: typeid,
	$C5: typeid,
	$C6: typeid,
	$C7: typeid,
	$C8: typeid,
	$C9: typeid,
) {
	RemoveComponents8(world, entity, C1, C2, C3, C4, C5, C6, C7, C8)
	RemoveComponent(world, entity, C9)
}

@(private)
RemoveComponents10 :: proc(
	world: ^World,
	entity: Entity,
	$C1: typeid,
	$C2: typeid,
	$C3: typeid,
	$C4: typeid,
	$C5: typeid,
	$C6: typeid,
	$C7: typeid,
	$C8: typeid,
	$C9: typeid,
	$C10: typeid,
) {
	RemoveComponents9(world, entity, C1, C2, C3, C4, C5, C6, C7, C8, C9)
	RemoveComponent(world, entity, C10)
}

RemoveComponents :: proc {
	RemoveComponents1,
	RemoveComponents2,
	RemoveComponents3,
	RemoveComponents4,
	RemoveComponents5,
	RemoveComponents6,
	RemoveComponents7,
	RemoveComponents8,
	RemoveComponents9,
	RemoveComponents10,
}