package Ġme . anno . engine . ui Ċ Ċ import Ġme . anno . ecs . Entity Ċ import Ġme . anno . ecs . components . light . Light Component Ċ import Ġme . anno . ecs . pref ab . Hierarchy Ċ import Ġme . anno . ecs . pref ab . Prefab Ċ import Ġme . anno . ecs . pref ab . Prefab Inspector . Companion . current Inspector Ċ import Ġme . anno . ecs . pref ab . Prefab Inspector . Companion . format Warning Ċ import Ġme . anno . ecs . pref ab . Prefab Save able Ċ import Ġme . anno . ecs . pref ab . change . Path Ċ import Ġme . anno . engine . ui . render . Render View Ċ import Ġme . anno . engine . ui . sc enet abs . EC SS c ene Tabs Ċ import Ġme . anno . io . IS ave able Ċ import Ġme . anno . io . text . Text Reader Ċ import Ġme . anno . language . translation . Name Desc Ċ import Ġme . anno . math s . Math s . length Ċ import Ġme . anno . math s . Math s . mix ARGB Ċ import Ġme . anno . studio . Studio Base Ċ import Ġme . anno . ui . Panel Ċ import Ġme . anno . ui . base . menu . Menu . open Menu Ċ import Ġme . anno . ui . base . menu . Menu Option Ċ import Ġme . anno . ui . editor . Property Inspector Ċ import Ġme . anno . ui . editor . files . FileContent Importer Ċ import Ġme . anno . ui . editor . tree View . TreeView Ċ import Ġme . anno . ui . editor . tree View . TreeView Panel Ċ import Ġme . anno . ui . style . Style Ċ import Ġme . anno . utils . Color . norm ARGB Ċ import Ġme . anno . utils . strings . String Helper . camel Case To Title Ċ import Ġme . anno . utils . strings . String Helper . short en Ċ import Ġme . anno . utils . structures . lists . Lists . flatten Ċ import Ġme . anno . utils . structures . lists . Updating List Ċ import Ġme . anno . utils . types . AABB s . delta X Ċ import Ġme . anno . utils . types . AABB s . delta Y Ċ import Ġme . anno . utils . types . AABB s . delta Z Ċ import Ġme . anno . utils . types . Strings . isBlank 2 Ċ import Ġorg . apache . logging . log 4 j . Log Manager Ċ Ċ class ĠEC ST ree View ( val Ġlibrary : ĠEditor State , Ġstyle : ĠStyle ) Ġ: ĊĠĠĠ ĠTree View < IS ave able >( ĊĠĠĠĠĠĠĠ ĠUpdating List Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġworld Ġ= Ġlibrary . pref ab ?. get Sample Instance () // Ġ?: Ġlibrary . world ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( world Ġ!= Ġnull ) ĠlistOf ( world ) Ġelse Ġempty List () ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ ĠE CS File Importer Ġas ĠFile Content Importer < IS ave able >, ĊĠĠĠĠĠĠĠ Ġtrue , ĊĠĠĠĠĠĠĠ Ġstyle ĊĠĠĠ Ġ) Ġ{ ĊĊĠĠĠ Ġval Ġinspector Ġget () Ġ= Ġcurrent Inspector !! ĊĊĠĠĠ Ġoverride Ġfun ĠisValid Element ( element : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġelement Ġis ĠPref ab Save able ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġtoggle Collapsed ( element : ĠIS ave able ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġis Collapsed Ġ= Ġis Collapsed ( element ) ĊĠĠĠĠĠĠĠ Ġval Ġtarget Ġ= Ġ! is Collapsed ĊĠĠĠĠĠĠĠ Ġ// Ġremove Ġchildren Ġfrom Ġthe Ġselection ??? ... ĊĠĠĠĠĠĠĠ Ġval Ġtargets Ġ= Ġcontent . children . filter Is Instance < TreeView Panel <* >> (). filter Ġ{ Ġit . isIn Focus Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( targets . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Collapsed ( element , Ġtarget ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( it Ġin Ġtargets ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelement 2 Ġ= Ġit . getElement () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( element 2 Ġis ĠPref ab Save able ) Ġset Collapsed ( element 2 , Ġtarget ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd Child ( element : ĠIS ave able , Ġchild : ĠAny , Ġindex : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġelement Ġas ĠPref ab Save able ĊĠĠĠĠĠĠĠ Ġwhen Ġ( child ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPref ab Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠH ierarchy . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPath . ROOT _ PATH , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPref ab Save able Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Root Ġ= Ġchild . root ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠH ierarchy . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild Root . pref ab !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild . pref ab Path !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠLOGGER . warn (" Unknown Ġtype Ġ$ child ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Index In Parent ( parent : ĠIS ave able , Ġchild : ĠIS ave able ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġtodo Ġwe Ġneed Ġthe Ġadd Ġindex Ġ( inside Ġthe Ġcurrent Ġpref ab ) Ġfor Ġthis Ġto Ġwork Ġcorrectly ĊĠĠĠĠĠĠĠ Ġ// Ġtodo Ġor Ġwe Ġshould Ġsupport Ġcomplete Ġre ordering ĊĠĠĠĠĠĠĠ ĠLOGGER . warn (" getIndex In Parent Ġisn 't Ġimplemented Ġfully ") ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( child Ġis ĠPref ab Save able ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild . index In Parent ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove Child ( parent : ĠIS ave able , Ġchild : ĠIS ave able ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġtodo Ġsomehow Ġthe Ġwindow Ġelement Ġcannot Ġbe Ġremoved ĊĠĠĠĠĠĠĠ Ġif Ġ( parent Ġis ĠPref ab Save able Ġ&& Ġchild Ġis ĠPref ab Save able ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLOGGER . info (" Trying Ġto Ġremove Ġelement Ġ${ child . className } Ġfrom Ġ${ parent . className }") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEditor State . selection Ġ= ĠEditor State . selection . filter Ġ{ Ġit Ġ! in Ġchild . listOf Hierarchy Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEditor State . fine Selection Ġ= ĠEditor State . fine Selection . filter Ġ{ Ġit Ġ! in Ġchild . listOf Hierarchy Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠH ierarchy . remove Path From Prefab ( parent . root . pref ab !! , Ġchild ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġthrow ĠNotImplementedError () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdestroy ( element : ĠIS ave able ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( element Ġis ĠPref ab Save able ) Ġelement . on Destroy () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Warning ( element : ĠPref ab Save able ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( warn Ġin Ġelement . get Reflection s (). debug Warnings ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġwarn . getter . call ( element ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġnull ) Ġreturn Ġformat Warning ( warn . name , Ġvalue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( element . is Collapsed ) Ġ{// Ġcould Ġbecome Ġexpensive ... Ġso Ġonly Ġgo Ġto Ġa Ġcertain Ġdepth ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( child Type Ġin Ġelement . list Child Types ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( child Ġin Ġelement . getChild List ByType ( child Type )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( warn Ġin Ġchild . get Reflection s (). debug Warnings ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġwarn . getter . call ( child ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġnull ) Ġreturn Ġformat Warning ( warn . name , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhas Warning ( element : ĠPref ab Save able ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( warn Ġin Ġelement . get Reflection s (). debug Warnings ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġwarn . getter . call ( element ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġnull ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( element . is Collapsed ) Ġ{// Ġcould Ġbecome Ġexpensive ... Ġso Ġonly Ġgo Ġto Ġa Ġcertain Ġdepth ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( child Type Ġin Ġelement . list Child Types ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( child Ġin Ġelement . getChild List ByType ( child Type )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( warn Ġin Ġchild . get Reflection s (). debug Warnings ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġwarn . getter . call ( child ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġnull ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Local Color ( element : ĠIS ave able , Ġis Hover ed : ĠBoolean , ĠisIn Focus : ĠBoolean ): ĠInt Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval ĠisIn Focus 2 Ġ= ĠisIn Focus Ġ|| Ġ( element Ġis ĠPref ab Save able Ġ&& Ġelement Ġin Ġlibrary . selection ) ĊĠĠĠĠĠĠĠ Ġ// Ġshow Ġa Ġspecial Ġcolor , Ġif Ġthe Ġcurrent Ġelement Ġcontains Ġsomething Ġselected ĊĊĠĠĠĠĠĠĠ Ġval Ġis Indirect ly In Focus Ġ= Ġ! isIn Focus 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ&& Ġlibrary . selection . isNotEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġlibrary . selection . any Ġ{ Ġit Ġis ĠPref ab Save able Ġ&& Ġit . any In Hierarchy Ġ{ Ġp Ġ-> Ġp Ġ=== Ġelement Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġelement . findFirst In All Ġ{ Ġit Ġin Ġlibrary . selection Ġ} Ġ!= Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġis Enabled Ġ= Ġif Ġ( element Ġis ĠPref ab Save able ) Ġelement . all In Hierarchy Ġ{ Ġit . isEnabled Ġ} Ġelse Ġtrue ĊĠĠĠĠĠĠĠ Ġvar Ġcolor Ġ= Ġif Ġ( isEnabled ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isIn Focus 2 ) Ġ 0 xff cc 1 5 Ġelse Ġif Ġ( is Indirect ly In Focus ) Ġ 0 xdd cc aa Ġelse Ġ 0 xcc cccc ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isIn Focus 2 ) Ġ 0 xcc 1 5 ff Ġelse Ġif Ġ( is Indirect ly In Focus ) Ġ 0 x 4 4 2 2 5 5 Ġelse Ġ 0 x 3 3 3 3 3 3 ĊĠĠĠĠĠĠĠ Ġ// Ġif Ġis Ġlight Ġcomponent , Ġwe Ġcan Ġmix Ġin Ġits Ġcolor ĊĠĠĠĠĠĠĠ Ġval Ġlight Ġ= Ġif Ġ( element Ġis ĠEntity ) Ġelement . getComponent ( Light Component :: class ) Ġelse Ġelement Ġas ? ĠLight Component ĊĠĠĠĠĠĠĠ Ġif Ġ( light Ġ!= Ġnull ) Ġcolor Ġ= Ġmix ARGB ( color , Ġnorm ARGB ( light . color ), Ġ 0 . 5 f ) ĊĠĠĠĠĠĠĠ Ġif Ġ( is Hover ed ) Ġcolor Ġ= Ġmix ARGB ( color , Ġ- 1 , Ġ 0 . 5 f ) ĊĠĠĠĠĠĠĠ Ġif Ġ( element Ġis ĠPref ab Save able Ġ&& Ġhas Warning ( element )) Ġcolor Ġ= Ġmix ARGB ( color , Ġ 0 xffff 0 0 , Ġ 0 . 8 f ) ĊĠĠĠĠĠĠĠ Ġreturn Ġcolor Ġor Ġ( 2 5 5 Ġshl Ġ 2 4 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Tooltip Text ( element : ĠIS ave able ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠmaxLength Ġ= Ġ 1 0 0 ĊĠĠĠĠĠĠĠ Ġval Ġwarn Ġ= Ġif Ġ( element Ġis ĠPref ab Save able ) Ġget Warning ( element ) Ġelse Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ( warn Ġ!= Ġnull ) Ġreturn Ġwarn ĊĠĠĠĠĠĠĠ Ġval Ġdesc Ġ= Ġif Ġ( element Ġis ĠPref ab Save able ) Ġelement . description . short en ( maxLength ). toString () Ġelse Ġ"" ĊĠĠĠĠĠĠĠ Ġval Ġdesc Ln Ġ= Ġif Ġ( desc . isEmpty ()) Ġdesc Ġelse Ġdesc Ġ+ Ġ"\ n " ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement Ġis ĠPanel Ġ-> Ġelement . tooltip Ġ?: Ġdesc ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement Ġ! is ĠEntity Ġ-> Ġdesc ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement . children . isEmpty () Ġ-> Ġwhen Ġ( element . components . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġdesc ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 , Ġ 2 , Ġ 3 Ġ-> Ġdesc Ln Ġ+ Ġelement . components . join ToString Ġ{ Ġit . className Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġdesc Ln Ġ+ Ġ"${ element . components . size } ĠC " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement . components . isEmpty () Ġ-> Ġdesc Ln Ġ+ Ġ"${ element . children . size } ĠE , Ġ${ element . size Of All Children } Ġtotal " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġdesc Ln Ġ+ Ġ"${ element . children . size } ĠE Ġ+ Ġ${ element . components . size } ĠC , Ġ${ element . size Of All Children } Ġtotal " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Children ( element : ĠIS ave able ): ĠList < IS ave able > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( element Ġis ĠPref ab Save able ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtypes Ġ= Ġelement . list Child Types () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( types . length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġelement . getChild List ByType ( types [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Count Ġ= Ġtypes . sum Of Ġ{ Ġelement . getChild List ByType ( it ). size Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjoined Ġ= ĠArrayList < Prefab Save able >( child Count ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( type Ġin Ġtypes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjoined Ġ+= Ġelement . getChild List ByType ( type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjoined ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġempty List () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Collapsed ( element : ĠIS ave able ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( element Ġis ĠPref ab Save able ) Ġelement . is Collapsed Ġelse Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Collapsed ( element : ĠIS ave able , Ġcollapsed : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( element Ġ! is ĠPref ab Save able ) Ġreturn ĊĠĠĠĠĠĠĠ Ġelement . is Collapsed Ġ= Ġcollapsed ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement . root . pref ab ! ![ element . pref ab Path !! , Ġ" is Collapsed "] Ġ= Ġcollapsed ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} Ġ// Ġid c Ġtoo Ġmuch Ġabout Ġsaving Ġthat Ġproperty ; Ġmain Ġthing Ġis Ġthat Ġwe Ġcan Ġcollapse Ġand Ġexpand Ġstuff Ġin Ġthe Ġeditor ĊĠĠĠĠĠĠĠ Ġneeds Tree Update Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġinvalidate Layout () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Drag Type ( element : ĠIS ave able ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( element ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPref ab Save able Ġ-> Ġ" Prefab Save able " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPref ab Ġ-> Ġ" Prefab " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġelement . className ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstringify For Copy ( element : ĠIS ave able ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( element Ġ! is ĠPref ab Save able ) Ġreturn Ġelement . toString () ĊĠĠĠĠĠĠĠ Ġval Ġtab Ġ= ĠE CSS c ene Tabs . current Tab Ġ?: Ġreturn Ġ"" ĊĠĠĠĠĠĠĠ Ġval Ġroot Ġ= Ġtab . inspector . root ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( element Ġ== Ġroot ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtab . inspector . toString () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠH ierarchy . stringify ( element ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Symbol ( element : ĠIS ave able ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( element Ġis ĠPref ab Save able Ġ&& Ġelement . root . pref ab ?. is Writable Ġ== Ġfalse ) Ġ"\ uD 8 3 D \ u DD 1 2 " Ġelse Ġ" â ļ ª " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetParent ( element : ĠIS ave able ): ĠIS ave able ? Ġ{ ĊĠĠĠĠĠĠĠ Ġelement Ġas ĠPref ab Save able ĊĠĠĠĠĠĠĠ Ġreturn Ġelement . parent ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetName ( element : ĠIS ave able ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġelement Ġas ĠPref ab Save able ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġelement . name ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( name . isBlank 2 ()) Ġelement . className . camel Case To Title () Ġelse Ġname ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠsetName ( element : ĠIS ave able , Ġname : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠE CS File Importer . setName ( element , Ġname ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġopen Add Menu ( parent : ĠIS ave able ) Ġ{ ĊĠĠĠĠĠĠĠ Ġparent Ġas ĠPref ab Save able ĊĠĠĠĠĠĠĠ Ġ// Ġtemporary Ġsolution : ĊĠĠĠĠĠĠĠ Ġval Ġpref ab Ġ= Ġparent . pref ab !! ĊĠĠĠĠĠĠĠ Ġif Ġ( pref ab . is Writable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġopen Ġadd Ġmenu Ġfor Ġoften Ġcreated Ġentities : Ġcamera , Ġlight , Ġnodes , Ġ... ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwe Ġcould Ġuse Ġwhich Ġpref abs Ġwere Ġmost Ġoften Ġcreated Ġ:) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclasses Ġ= Ġparent . list Child Types (). map Ġ{ Ġparent . getOptions ByType ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatten () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĠsortBy Ġ{ Ġit . title Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġopen Menu ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow Stack , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclasses . map Ġ{ Ġoption Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsample Instance Ġ= Ġoption . generator () Ġas ĠIS ave able ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠclassName Ġ= Ġsample Instance . className ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġoption . title ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMenu Option ( Name Desc ( title )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Id Ġ= ĠPath . generate Random Id () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġpref ab . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent . pref ab Path !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sample Instance Ġis ĠEntity ) Ġ' e ' Ġelse Ġ' c ', ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠclassName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Ġ= Ġoption . generator () Ġas ĠPref ab Save able ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild . pref ab Path Ġ= Ġpath ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild . pref ab Ġ= Ġpref ab ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent . addChild ( child ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProperty Inspector . invalidate UI () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse ĠLOGGER . warn (" Prefab Ġis Ġnot Ġwritable !") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcan Be Inserted ( parent : ĠIS ave able , Ġelement : ĠIS ave able , Ġindex : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( parent Ġ! is ĠPref ab Save able ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġreturn Ġparent . get Original (). run Ġ{ Ġthis Ġ== Ġnull Ġ|| Ġindex Ġ>= Ġchildren . size Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcan Be Removed ( element : ĠIS ave able ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( element Ġ! is ĠPref ab Save able ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġval Ġindex In Parent Ġ= Ġelement . index In Parent ĊĠĠĠĠĠĠĠ Ġval Ġparent Ġ= Ġelement . parent !! ĊĠĠĠĠĠĠĠ Ġval Ġparent Prefab Ġ= Ġparent . get Original () ĊĠĠĠĠĠĠĠ Ġreturn Ġparent Prefab Ġ== Ġnull Ġ|| Ġindex In Parent Ġ>= Ġparent Prefab . children . size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġselect Element ( element : ĠIS ave able ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( element Ġis ĠPref ab Save able ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary . select ( element ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfocus On Element ( element : ĠIS ave able ) Ġ{ ĊĠĠĠĠĠĠĠ Ġselect Element ( element ) ĊĠĠĠĠĠĠĠ Ġ// Ġfocus Ġon Ġthe Ġelement Ġby Ġin verting Ġthe Ġcamera Ġtransform Ġand Ġsuch ... ĊĠĠĠĠĠĠĠ Ġval Ġwindow Stack Ġ= Ġwindow !!. window Stack ĊĠĠĠĠĠĠĠ Ġif Ġ( element Ġis ĠEntity ) Ġfor Ġ( window Ġin Ġwindow Stack ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . panel . for All Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġis ĠRender View ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnot Ġperfect , Ġbut Ġgood Ġenough Ġprobably ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtodo Ġsmooth Ġl erp Ġover Ġ. 2 s Ġfor Ġorientation ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa abb Ġ= Ġelement . aabb ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Radius Ġ= Ġlength ( aabb . delta X (), Ġa abb . delta Y (), Ġa abb . delta Z ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Radius . is Finite () Ġ&& Ġnew Radius Ġ> Ġ 0 . 0 ) Ġit . radius Ġ= Ġnew Radius ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . position . set ( element . transform . global Position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . update Editor Camera Transform () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Paste ( x : ĠFloat , Ġy : ĠFloat , Ġdata : ĠString , Ġtype : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! try Paste ( data )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Paste ( x , Ġy , Ġdata , Ġtype ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġreturns Ġtrue Ġon Ġsuccess ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġtry Paste ( data : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( val Ġelement Ġ= ĠText Reader . read ( data , ĠStudio Base . workspace , Ġtrue ). first OrNull ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPref ab Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpref ab Ġ= Ġlibrary . pref ab ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroot Ġ= Ġpref ab ?. get Sample Instance () Ġ?: Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠH ierarchy . add ( pref ab , ĠPath . ROOT _ PATH , Ġelement , ĠPath . ROOT _ PATH , Ġroot ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPref ab Save able Ġ-> Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOGGER . warn (" Unknown Ġtype Ġ${ element ?. className }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval ĠclassName Ġget () Ġ= Ġ" EC ST ree View " ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠLOGGER Ġ= ĠLog Manager . getLogger ( EC ST ree View :: class ) ĊĠĠĠ Ġ} Ċ Ċ }