package Ġcom . github . x the bat . kv ant . factories Ċ Ċ import Ġcom . github . x the bat . kv ant . Component Class Ċ import Ġcom . github . x the bat . kv ant . common . Pool Ċ import Ġcom . github . x the bat . kv ant . core . Entity Ċ import Ġcom . github . x the bat . kv ant . interfaces . Component Ċ import Ġcom . github . x the bat . kv ant . newInstance Ċ import Ġkotlin . reflect . K Class Ċ Ċ class ĠP ooled ObjectFactory Ġ: ĠObject Factory Ġ{ ĊĠĠĠ Ġprivate Ġval Ġentities Ġ= ĠPool < Entity Pool able Adapter >() ĊĊĠĠĠ Ġprivate Ġval Ġcomponents Ġ= Ġmutable Map Of < Component Class , ĠPool < Component >>() ĊĊĠĠĠ Ġprivate Ġclass ĠEntity Pool able Adapter ( val Ġentity : ĠEntity ) Ġ: ĠPool . Pool able Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġreset () Ġ= Ġwith ( entity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove All () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Added ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Removed ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġflags Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġentity () Ġ= Ġentities . obtain Ġ{ ĠEntity Pool able Adapter ( Entity ()) Ġ}. entity ĊĊĠĠĠ Ġoverride Ġfun Ġ< T : ĠComponent > Ġcomponent ( type : ĠK Class < out ĠT >): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpool Ġ= Ġcomponents . get Or Put ( type ) Ġ{ ĠPool () Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġpool . obtain Ġ{ Ġtype . newInstance () Ġ} Ġas ĠT ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclear Cache () Ġ{ ĊĠĠĠĠĠĠĠ Ġentities . clear () ĊĠĠĠĠĠĠĠ Ġcomponents . values . forEach Ġ{ Ġit . clear () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfree Entity ( entity : ĠEntity ) Ġ= Ġentities . free ( Entity Pool able Adapter ( entity )) ĊĊĠĠĠ Ġoverride Ġfun Ġfree Component ( component : ĠComponent ) Ġ= Ġcomponents . get Or Put ( component :: class ) Ġ{ ĠPool () Ġ}. free ( component ) Ċ }