`# placeholder just to make the compiler shut up type Storage[T] = seq[T] proc 
newStorage[T](size: int): seq[T] = newSeq[T] size proc components[T](x: var 
seq[T]): var seq[T] = x type Entity = object id: int ComponentMotion = object 
x, y: float template setupComponent(t: typedesc) = var x {.used.} = 
newStorage[t] 100 proc getStorage(_: typedesc[t]): var Storage[t] = x proc 
getComponent(self: Entity, _: typedesc[t]): ptr t = addr x.components[self.id] 
proc setComponent[T](self: Entity, comp: T) = self.getComponent(T)[] = comp 
setupComponent ComponentMotion var en = Entity(id: 0) en.setComponent 
ComponentMotion() en.getComponent(ComponentMotion).x = 10 echo 
en.getComponent(ComponentMotion).x echo getStorage(ComponentMotion)[0].x `

Run

Reply via email to