/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 7 Ġ ĠAnd rei ĠHe ide lb acher Ġ< and rei . he ide lb acher @ gmail . com > Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat : Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . andre ih h . alg ost orm . systems Ċ Ċ import Ġcom . andre ih h . alg ost orm . core . drivers . audio . Audio Stream Ċ import Ġcom . andre ih h . alg ost orm . core . drivers . graphics 2 d . Color Ċ import Ġcom . andre ih h . alg ost orm . core . drivers . io . Resource Ċ import Ġcom . andre ih h . alg ost orm . core . ecs . Component Ċ import Ġcom . andre ih h . alg ost orm . core . ecs . Entity Pool Ċ import Ġcom . andre ih h . alg ost orm . core . ecs . Entity Ref Ċ import Ġcom . andre ih h . alg ost orm . core . ecs . Entity Ref . Id Ċ import Ġcom . andre ih h . alg ost orm . systems . graphics 2 d . Tile Set Ċ import Ġkotlin . properties . Deleg ates Ċ Ċ class ĠMap Object Ġprivate Ġconstructor ( ĊĠĠĠ Ġval Ġwidth : ĠInt , ĊĠĠĠ Ġval Ġheight : ĠInt , ĊĠĠĠ Ġval Ġtile Width : ĠInt , ĊĠĠĠ Ġval Ġtile Height : ĠInt , ĊĠĠĠ Ġval Ġtile Sets : ĠList < Tile Set >, ĊĠĠĠ Ġval Ġsounds : ĠList < Resource < Audio Stream >>, ĊĠĠĠ Ġval Ġentities : ĠEntity Pool , ĊĠĠĠ Ġval ĠbackgroundColor : ĠColor ?, ĊĠĠĠ Ġval Ġversion : ĠString Ċ ) Ġ{ ĊĠĠĠ Ġclass ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġmap Object ( init : ĠBuilder . () Ġ-> ĠUnit ): ĠMap Object Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBuilder (). apply ( init ). build () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġwidth : ĠInt Ġby ĠDeleg ates . notNull () ĊĠĠĠĠĠĠĠ Ġvar Ġheight : ĠInt Ġby ĠDeleg ates . notNull () ĊĠĠĠĠĠĠĠ Ġvar Ġtile Width : ĠInt Ġby ĠDeleg ates . notNull () ĊĠĠĠĠĠĠĠ Ġvar Ġtile Height : ĠInt Ġby ĠDeleg ates . notNull () ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġtile Sets Ġ= Ġarray ListOf < Tile Set >() ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġsounds Ġ= Ġarray ListOf < Resource < Audio Stream >>() ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġinitial Entities Ġ= Ġhash Map Of < Id , ĠCollection < Component >>() ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġentities Ġ= Ġarray ListOf < Collection < Component >>() ĊĠĠĠĠĠĠĠ Ġvar ĠbackgroundColor : ĠColor ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġversion : ĠString Ġ= Ġ" 1 . 0 " ĊĊĠĠĠĠĠĠĠ Ġfun Ġtile Set ( init : ĠTile Set . Builder . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtile Sets Ġ+= ĠTile Set . Builder (). apply ( init ). build () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġtile Set ( tile Set : ĠTile Set ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtile Sets Ġ+= Ġtile Set ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġsound ( resource : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsounds Ġ+= ĠResource ( resource ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġsound ( resource : ĠResource < Audio Stream >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsounds Ġ+= Ġresource ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġentity ( id : ĠId , Ġinit : ĠEntity Ref . Builder . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Entities [ id ] Ġ= ĠEntity Ref . Builder (). apply ( init ). build () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġentity ( id : ĠId , Ġcomponents : ĠCollection < Component >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Entities [ id ] Ġ= Ġcomponents ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġentity ( init : ĠEntity Ref . Builder . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentities Ġ+= ĠEntity Ref . Builder (). apply ( init ). build () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġentity ( components : ĠCollection < Component >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentities Ġ+= Ġcomponents ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġbuild (): ĠMap Object Ġ= ĠMap Object ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġwidth , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġheight , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtile Width Ġ= Ġtile Width , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtile Height Ġ= Ġtile Height , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtile Sets Ġ= Ġtile Sets . toList (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsounds Ġ= Ġsounds . toList (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentities Ġ= ĠEntity Pool . of ( initial Entities ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ Ġentities . forEach Ġ{ Ġcreate ( it ) Ġ} Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠbackgroundColor Ġ= ĠbackgroundColor , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġversion Ġ= Ġversion ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ