package secs

@(private)
AddComponents1 :: proc(world: ^World, entity: Entity, component: $C) {
	AddComponent(world, entity, component)
}

@(private)
AddComponents2 :: proc(world: ^World, entity: Entity, c1: $C1, c2: $C2) {
	AddComponents1(world, entity, c1)
	AddComponent(world, entity, c2)
}

@(private)
AddComponents3 :: proc(world: ^World, entity: Entity, c1: $C1, c2: $C2, c3: $C3) {
	AddComponents2(world, entity, c1, c2)
	AddComponent(world, entity, c3)
}

@(private)
AddComponents4 :: proc(world: ^World, entity: Entity, c1: $C1, c2: $C2, c3: $C3, c4: $C4) {
	AddComponents3(world, entity, c1, c2, c3)
	AddComponent(world, entity, c4)
}

@(private)
AddComponents5 :: proc(
	world: ^World,
	entity: Entity,
	c1: $C1,
	c2: $C2,
	c3: $C3,
	c4: $C4,
	c5: $C5,
) {
	AddComponents4(world, entity, c1, c2, c3, c4)
	AddComponent(world, entity, c5)
}

@(private)
AddComponents6 :: proc(
	world: ^World,
	entity: Entity,
	c1: $C1,
	c2: $C2,
	c3: $C3,
	c4: $C4,
	c5: $C5,
	c6: $C6,
) {
	AddComponents5(world, entity, c1, c2, c3, c4, c5)
	AddComponent(world, entity, c6)
}

@(private)
AddComponents7 :: proc(
	world: ^World,
	entity: Entity,
	c1: $C1,
	c2: $C2,
	c3: $C3,
	c4: $C4,
	c5: $C5,
	c6: $C6,
	c7: $C7,
) {
	AddComponents6(world, entity, c1, c2, c3, c4, c5, c6)
	AddComponent(world, entity, c7)
}

@(private)
AddComponents8 :: proc(
	world: ^World,
	entity: Entity,
	c1: $C1,
	c2: $C2,
	c3: $C3,
	c4: $C4,
	c5: $C5,
	c6: $C6,
	c7: $C7,
	c8: $C8,
) {
	AddComponents7(world, entity, c1, c2, c3, c4, c5, c6, c7)
	AddComponent(world, entity, c8)
}

@(private)
AddComponents9 :: proc(
	world: ^World,
	entity: Entity,
	c1: $C1,
	c2: $C2,
	c3: $C3,
	c4: $C4,
	c5: $C5,
	c6: $C6,
	c7: $C7,
	c8: $C8,
	c9: $C9,
) {
	AddComponents8(world, entity, c1, c2, c3, c4, c5, c6, c7, c8)
	AddComponent(world, entity, c9)
}

@(private)
AddComponents10 :: proc(
	world: ^World,
	entity: Entity,
	c1: $C1,
	c2: $C2,
	c3: $C3,
	c4: $C4,
	c5: $C5,
	c6: $C6,
	c7: $C7,
	c8: $C8,
	c9: $C9,
	c10: $C10,
) {
	AddComponents9(world, entity, c1, c2, c3, c4, c5, c6, c7, c8, c9)
	AddComponent(world, entity, c10)
}

AddComponents :: proc {
	AddComponents1,
	AddComponents2,
	AddComponents3,
	AddComponents4,
	AddComponents5,
	AddComponents6,
	AddComponents7,
	AddComponents8,
	AddComponents9,
	AddComponents10,
}