package Ġcom . mine in aby ss . ge ary . ecs . components Ċ Ċ // TODO Ġadd Ġdocumentation Ġand Ġmaybe Ġsplit Ġinto Ġtwo Ġfiles Ċ Ċ import Ġcom . mine in aby ss . ge ary . ecs . Ge ary Entity Ċ Ċ /** Ċ Ġ* ĠA Ġcomponent Ġholding Ġthe Ġchildren Ġentities Ġof Ġthis Ġentity . Ċ Ġ*/ Ċ // TODO Ġhave ĠUUID s Ġfor Ġreferencing Ġchildren / parents Ġafter Ġan Ġengine Ġrestart , Ġthen Ġmake Ġserial izable Ċ public Ġclass ĠChildren ( ĊĠĠĠĠĠĠĠ Ġinternal Ġval Ġids : ĠMutable Set < Ge ary Entity > Ġ= Ġmutable Set Of () Ċ ) Ċ Ċ /** ĠA Ġlist Ġof Ġchildren Ġfor Ġthis Ġentity Ġ*/ Ċ public Ġval ĠGe ary Entity . children : ĠSet < Ge ary Entity > ĊĠĠĠ Ġget () Ġ= Ġget < Children >() ?. ids ?. toSet () Ġ?: Ġempty Set () Ċ Ċ /** ĠAdds Ġa Ġ[ Children ] Ġcomponent , Ġadding Ġthe Ġ[ child ] Ġto Ġit . ĠAlso Ġsets Ġthe Ġparent Ġof Ġ[ child ] Ġto Ġthis Ġentity . Ġ Ġ*/ Ċ public Ġfun ĠGe ary Entity . addChild ( child : ĠGe ary Entity ) Ġ{ ĊĠĠĠ Ġget Or Add Ġ{ ĠChildren () Ġ}. apply Ġ{ ĊĠĠĠĠĠĠĠ Ġids Ġ+= Ġchild ĊĠĠĠ Ġ} ĊĠĠĠ Ġchild . unsafe Parent Ġ= Ġthis Ċ } Ċ Ċ /** ĠAdds Ġa Ġ[ Children ] Ġcomponent , Ġadding Ġthe Ġ[ children ] Ġto Ġit . ĠAlso Ġsets Ġthe Ġparents Ġof Ġ[ children ] Ġto Ġthis Ġentity . Ġ*/ Ċ public Ġfun ĠGe ary Entity . add Children ( var arg Ġchildren : ĠGe ary Entity ) Ġ{ ĊĠĠĠ Ġget Or Add Ġ{ ĠChildren () Ġ}. apply Ġ{ ĊĠĠĠĠĠĠĠ Ġids . addAll ( children ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġchildren . forEach Ġ{ Ġit . unsafe Parent Ġ= Ġthis Ġ} Ċ } Ċ Ċ /** ĠRemoves Ġa Ġ[ child ] Ġwithout Ġalso Ġremoving Ġits Ġparent . Ġ*/ Ċ private Ġfun ĠGe ary Entity . unsafe Remove Child ( child : ĠGe ary Entity ) Ġ{ ĊĠĠĠ Ġget < Children >() ?. ids ?. remove ( child ) Ċ } Ċ Ċ /** ĠRemoves Ġa Ġ[ child ], Ġalso Ġremoving Ġits Ġparent . Ġ*/ Ċ public Ġfun ĠGe ary Entity . removeChild ( child : ĠGe ary Entity ) Ġ{ ĊĠĠĠ Ġunsafe Remove Child ( child ) ĊĠĠĠ Ġchild . unsafe Parent Ġ= Ġnull Ċ } Ċ Ċ /** ĠRemoves Ġ[ children ], Ġalso Ġremoving Ġtheir Ġparents . Ġ*/ Ċ public Ġfun ĠGe ary Entity . remove Children ( var arg Ġchildren : ĠGe ary Entity ) Ġ{ ĊĠĠĠ Ġchildren . forEach Ġ{ Ġit . unsafe Parent Ġ= Ġnull Ġ} ĊĠĠĠ Ġget < Children >() ?. ids ?. removeAll ( children ) Ċ } Ċ Ċ /** ĠRemoves Ġall Ġof Ġthis Ġentity 's Ġchildren , Ġalso Ġremoving Ġtheir Ġparents . Ġ*/ Ċ public Ġfun ĠGe ary Entity . clear Children () Ġ{ ĊĠĠĠ Ġval Ġids Ġ= Ġget < Children >() ?. ids Ġ?: Ġreturn ĊĠĠĠ Ġids . forEach Ġ{ Ġit . unsafe Parent Ġ= Ġnull Ġ} ĊĠĠĠ Ġids . clear () Ċ } Ċ Ċ /** Ċ Ġ* ĠA Ġcomponent Ġholding Ġthe Ġparent Ġentity Ġof Ġthis Ġentity . Ċ Ġ*/ Ċ public Ġdata Ġclass ĠParent ( ĊĠĠĠĠĠĠĠ Ġvar Ġid : ĠGe ary Entity ? Ċ ) Ċ Ċ /** ĠUpdate Ġchild 's Ġparent Ġwithout Ġalso Ġadding Ġit Ġto Ġthe Ġparent 's Ġchildren . Ġ*/ Ċ private Ġvar ĠGe ary Entity . unsafe Parent ĊĠĠĠ Ġget () Ġ= Ġget < Parent >() ?. id ĊĠĠĠ Ġset ( parent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġget Or Add Ġ{ ĠParent ( parent ) Ġ}. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . id Ġ= Ġparent ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ /** ĠSet Ġan Ġentity 's Ġparent . ĠAlso Ġadds / re moves Ġthis Ġchild Ġfrom Ġthe Ġparent . Ġ*/ Ċ public Ġvar ĠGe ary Entity . parent : ĠGe ary Entity ? ĊĠĠĠ Ġget () Ġ= Ġget < Parent >() ?. id ĊĠĠĠ Ġset ( parent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġremoves Ġthis Ġentity Ġfrom Ġthe Ġold Ġparent 's Ġchildren ĊĠĠĠĠĠĠĠ Ġthis . parent ?. unsafe Remove Child ( this ) ĊĠĠĠĠĠĠĠ Ġ// Ġadds Ġthis Ġentity Ġto Ġthe Ġnew Ġparent 's Ġchildren , Ġwhich Ġalso Ġadds Ġa Ġparent Ġcomponent Ġto Ġthis Ġentity ĊĠĠĠĠĠĠĠ Ġparent ?. addChild ( this ) ĊĠĠĠ Ġ} Ċ