/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 - 2 0 2 1 ĠAnt on ĠTr ush kov Ċ Ġ* Ċ Ġ* Ġ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 Ġapp . the le ma . ecs Ċ Ċ import Ġapp . the le ma . action .* Ċ import Ġapp . the le ma . g 3 d . Bl ending Ċ import Ġapp . the le ma . g 3 d . Material Ċ import Ġapp . the le ma . g 3 d . Transform Node Ċ import Ġapp . the le ma . g 3 d . particles .* Ċ import Ġapp . the le ma . gl .* Ċ import Ġapp . the le ma . gl tf . GL TF Ċ import Ġapp . the le ma . gl tf . IG L TF Ċ import Ġapp . the le ma . img .* Ċ import Ġapp . the le ma . input . Keyboard Handler Ċ import Ġapp . the le ma . input . Mouse Handler Ċ import Ġapp . the le ma . res . Project Ċ import Ġapp . the le ma . script . B aked Kotlin Scripts Ċ import Ġapp . the le ma . script . IK otlin Script Ċ import Ġapp . the le ma . script . Kotlin Script Ċ import Ġapp . the le ma . shader . Shader Ċ import Ġapp . the le ma . utils . iterate Ċ import Ġkotlin . native . concurrent . Thread Local Ċ Ċ /** ĠEntity Ġcomponent Ġsystem Ġ*/ Ċ @ Thread Local Ċ object ĠE CS : ĠI Entity Component System , ĠComponent Descriptor List (" ECS ") Ġ{ ĊĠĠĠ Ġval Ġall Descriptors Ġ= ĠLinkedHashMap < String , ĠComponent Descriptor < IEntity Component >>() ĊĊĠĠĠ Ġprivate Ġval Ġsystems Internal Ġ= ĠArrayList < I Component System >() ĊĠĠĠ Ġoverride Ġval Ġsystems : ĠList < I Component System > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġsystems Internal ĊĊĠĠĠ Ġprivate Ġval Ġentities Internal Ġ= ĠArrayList < IEntity >() ĊĠĠĠ Ġoverride Ġval Ġentities : ĠList < IEntity > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġentities Internal ĊĊĠĠĠ Ġoverride Ġfun ĠgetDescriptor ( typeName : ĠString ): ĠComponent Descriptor < IEntity Component >? Ġ= ĊĠĠĠĠĠĠĠ Ġall Descriptors [ typeName ] ĊĊĠĠĠ Ġoverride Ġvar Ġcurrent Entity : ĠI Entity ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġentities . get OrNull ( 0 ) ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( entities Internal . size Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Entity ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Entity ( entities Internal [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Entity ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( entities Internal . size Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentities Internal . iterate Ġ{ Ġremove Entity ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentities Internal . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd Entity ( entity : ĠI Entity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġentities Internal . add ( entity ) ĊĠĠĠĠĠĠĠ Ġsystems Internal . iterate Ġ{ Ġit . added Scene ( entity ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove Entity ( entity : ĠI Entity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġentities Internal . remove ( entity ) ĊĠĠĠĠĠĠĠ Ġsystems Internal . iterate Ġ{ Ġit . removed Scene ( entity ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove All Entities () Ġ{ ĊĠĠĠĠĠĠĠ Ġentities Internal . forEach Ġ{ Ġentity Ġ-> Ġsystems Internal . forEach Ġ{ Ġentity . remove Entity ( entity ) Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġentities Internal . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd System ( system : ĠI Component System ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsystems Internal . add ( system ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset System ( index : ĠInt , Ġsystem : ĠI Component System ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsystems Internal [ index ] Ġ= Ġsystem ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove System ( system : ĠI Component System ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsystems Internal . remove ( system ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove System ( index : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsystems Internal . remove At ( index ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate ( delta : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsystems Internal . iterate Ġ{ Ġit . update ( delta ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrender ( shader Channel : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsystems Internal . iterate Ġ{ Ġit . render ( shader Channel ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsetup Default Components () Ġ{ ĊĠĠĠĠĠĠĠ ĠTransform Node . setup Transform Node Components () ĊĠĠĠĠĠĠĠ ĠMesh . setup Mesh Components () ĊĠĠĠĠĠĠĠ ĠShader . setup Shader Components () ĊĊĠĠĠĠĠĠĠ Ġdescriptor ({ ĠMaterial () Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Aliases ( app . the le ma . g 3 d . IM aterial :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstring Enum ( Material :: alpha Mode , ĠBl ending . items ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġint ( Material :: trans luc ent Priority ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġref Abs ( Material :: shader ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdescriptor ({ Ġapp . the le ma . g 3 d . Arm ature () Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Aliases ( app . the le ma . g 3 d . I Arm ature :: class ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdescriptor Ġ{ Ġapp . the le ma . anim . Animation Player () Ġ} ĊĠĠĠĠĠĠĠ Ġdescriptor ({ Ġapp . the le ma . anim . Animation () Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Aliases ( app . the le ma . anim . I Animation :: class ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdescriptor Ġ{ Ġapp . the le ma . anim . Animation Action () Ġ} ĊĊĠĠĠĠĠĠĠ Ġdescriptor Ġ{ Ġapp . the le ma . phys . Physics Properties () Ġ} ĊĊĠĠĠĠĠĠĠ Ġdescriptor Ġ{ ĠMain Loop () Ġ} ĊĊĠĠĠĠĠĠĠ Ġdescriptor ({ Ġapp . the le ma . res . Loader () Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Aliases ( app . the le ma . res . IL o ader :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile (" file ", Ġ{ Ġfile Ġ}) Ġ{ Ġfile Ġ= Ġit Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor Ġ{ ĠEntity Loader () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor ({ ĠGL TF () Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Aliases ( IG L TF :: class ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbool ( GL TF :: save Mes hes In CPU Mem ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbool ( GL TF :: merge Vertex Attributes ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbool ( GL TF :: generate Shaders ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbool ( GL TF :: setup Depth Rendering ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbool ( GL TF :: setup Velocity Shader ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbool ( GL TF :: setup G Buffer Shader ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbool ( GL TF :: receive Shadow s ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbool ( GL TF :: ib l ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġint ( GL TF :: ib l Max Mip Levels ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor Ġ{ Ġapp . the le ma . font . Bitmap Font () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor ({ ĠProject () Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Aliases ( app . the le ma . res . I Project :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġref Abs ( Project :: main Scene ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor Ġ{ Ġapp . the le ma . res . Resource Holder () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdescriptor Ġ{ ĠB aked Kotlin Scripts () Ġ} ĊĊĠĠĠĠĠĠĠ Ġdescriptor ({ ĠKotlin Script () Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Aliases ( IK otlin Script :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstring ( Kotlin Script :: custom Main FunctionName ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdescriptor Ġ{ ĠSimulation Node () Ġ} ĊĊĠĠĠĠĠĠĠ Ġdescriptor Ġ{ ĠKeyboard Handler () Ġ} ĊĠĠĠĠĠĠĠ Ġdescriptor Ġ{ ĠMouse Handler () Ġ} ĊĊĠĠĠĠĠĠĠ Ġdescriptor ({ ĠImage () Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Aliases ( I Image :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġint ( Image :: width ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġint ( Image :: height ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġint ( Image :: pixel Format ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġint ( Image :: pixel Channel Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġint ( Image :: internal Format ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdescriptor ({ ĠTexture 2 D () Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Aliases ( IT ext ure 2 D :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġref (" image ", Ġ{ Ġimage Ġ}) Ġ{ Ġimage Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġint Enum ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTexture 2 D :: min Filter , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlinked Map Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGL _ NE ARE ST Ġto Ġ" Nearest ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGL _ LINEAR Ġto Ġ" Linear ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGL _ LINEAR _ MIP MAP _ NE ARE ST Ġto Ġ" Linear ĠM ip map ĠNe arest ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGL _ NE ARE ST _ MIP MAP _ LINEAR Ġto Ġ" Nearest ĠM ip map ĠLinear ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGL _ LINEAR _ MIP MAP _ LINEAR Ġto Ġ" Linear ĠM ip map ĠLinear " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ?? ?" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġint Enum ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTexture 2 D :: mag Filter , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlinked Map Of ( GL _ NE ARE ST Ġto Ġ" Nearest ", ĠGL _ LINEAR Ġto Ġ" Linear "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ?? ?" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġint (" s Wrap ", Ġ{ Ġs Wrap Ġ}) Ġ{ Ġs Wrap Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġint (" t Wrap ", Ġ{ Ġt Wrap Ġ}) Ġ{ Ġt Wrap Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfloat ( Texture 2 D :: an isot ropic Filter ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdescriptor Ġ{ ĠTexture Cube () Ġ} ĊĊĠĠĠĠĠĠĠ Ġdescriptor ({ ĠParticle System () Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Aliases ( IP article System :: class ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġref ( Particle System :: mesh ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstring ( Particle System :: instance Position Name , Ġ" INSTANCE _ POSITION ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstring ( Particle System :: instance Life Time Name , Ġ" INSTANCE _ LI FE _ TIME ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbool ( Particle System :: life Times As Attribute , Ġfalse ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor ({ ĠParticle Emitter () Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Aliases ( IP article Emitter :: class ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġref ( Particle Emitter :: particle System ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġint ( Particle Emitter :: max Particles ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfloat ( Particle Emitter :: particle E mission Speed ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfloat ( Particle Emitter :: max Particle Life Time ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor ({ ĠMove Particle Effect () Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvec 3 ( Move Particle Effect :: speed ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor ({ ĠParticle Texture Frame Effect () Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġint ( Particle Texture Frame Effect :: frames U ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġint ( Particle Texture Frame Effect :: frames V ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠAction . setup Action Components () ĊĊĠĠĠĠĠĠĠ Ġadd System ( Default Component System ()) ĊĠĠĠ Ġ} Ċ } Ċ