package Ġcom . example . face decor ater . feature Ċ Ċ import Ġandroid . content . Context Ċ import Ġcom . example . face decor ater . R Ċ import Ġcom . google . ar . core . Aug ment ed Face Ċ import Ġcom . google . ar . scene form . Frame Time Ċ import Ġcom . google . ar . scene form . Node Ċ import Ġcom . google . ar . scene form . math . Quaternion Ċ import Ġcom . google . ar . scene form . math . Vector 3 Ċ import Ġcom . google . ar . scene form . rendering . View Render able Ċ import Ġcom . google . ar . scene form . ux . Aug ment ed Face Node Ċ import Ġkotlinx . android . synt hetic . main . camera _ st icker _ element _ layout . view .* Ċ Ċ /** Ċ Ġ* ĠìĤ¬ ìĭ¤ Ġê°Ģ ë©´ ê¸° ëĬ¥ ìŀĦ Ċ Ġ* ĠìļĶ ì¦ ĺ Ġìľł íĸī íķľëĭ¤ ê¸ ¸ ëŀĺ Ġë§Į ëĵ ¬ Ċ Ġ*/ Ċ Ċ class ĠSt icker Face Node ( private Ġval Ġcontext : ĠContext , Ġaugment ed Face : ĠAug ment ed Face ?) Ġ: ĊĠĠĠ ĠAug ment ed Face Node ( augment ed Face ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġeye Node Left : ĠNode ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġeye Node Right : ĠNode ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġnose Node : ĠNode ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġmouse Node : ĠNode ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġon Activate () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activate () ĊĠĠĠĠĠĠĠ Ġeye Node Left Ġ= ĠNode () ĊĠĠĠĠĠĠĠ Ġeye Node Left !!. setParent ( this ) ĊĊĠĠĠĠĠĠĠ Ġeye Node Right Ġ= ĠNode () ĊĠĠĠĠĠĠĠ Ġeye Node Right !!. setParent ( this ) ĊĊĠĠĠĠĠĠĠ Ġnose Node Ġ= ĠNode () ĊĠĠĠĠĠĠĠ Ġnose Node !!. setParent ( this ) ĊĊĠĠĠĠĠĠĠ Ġmouse Node Ġ= ĠNode () ĊĠĠĠĠĠĠĠ Ġmouse Node !!. setParent ( this ) ĊĊĠĠĠĠĠĠĠ ĠView Render able . builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setView ( context , ĠR . layout . camera _ st icker _ element _ layout ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. then Accept Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Shadow C aster Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Shadow Receiver Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeye Node Right !!. render able Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeye Node Left !!. render able Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠView Render able . builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setView ( context , ĠR . layout . camera _ st icker _ element _ layout ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. then Accept Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Shadow C aster Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Shadow Receiver Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . view . camera _ st icker _ imageView . setImage Resource ( R . drawable . test nose ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmouse Node ?. render able Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonUpdate ( frame Time : ĠFrame Time ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Update ( frame Time ) ĊĠĠĠĠĠĠĠ Ġaugment ed Face ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Region Pose ( Region . LEFT _ EY E )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeye Node Left ?. local Position Ġ= ĠVector 3 ( it . x Ġ- Ġ 0 . 0 1 f , Ġit . y Ġ- Ġ 0 . 0 2 5 f , Ġit . z Ġ+ Ġ 0 . 0 1 5 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeye Node Left ?. local Scale Ġ= ĠVector 3 ( 0 . 0 5 5 f , Ġ 0 . 0 5 5 f , Ġ 0 . 0 5 5 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeye Node Left ?. local Rotation Ġ= ĠQuaternion . axis Angle ( Vector 3 ( 0 . 0 f , Ġ 0 . 0 f , Ġ 1 . 0 f ), Ġ- 1 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Region Pose ( Region . RIGHT _ EY E )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeye Node Right ?. local Position Ġ= ĠVector 3 ( it . x Ġ+ Ġ 0 . 0 1 f , Ġit . y Ġ- Ġ 0 . 0 2 5 f , Ġit . z Ġ+ Ġ 0 . 0 1 5 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeye Node Right ?. local Scale Ġ= ĠVector 3 ( 0 . 0 5 5 f , Ġ 0 . 0 5 5 f , Ġ 0 . 0 5 5 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeye Node Right ?. local Rotation Ġ= ĠQuaternion . axis Angle ( Vector 3 ( 0 . 0 f , Ġ 0 . 0 f , Ġ 1 . 0 f ), Ġ 1 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Region Pose ( Region . NO SE )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnose Node ?. local Position Ġ= ĠVector 3 ( it . x , Ġit . y Ġ- Ġ 0 . 0 3 5 f , Ġit . z Ġ+ Ġ 0 . 0 1 5 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnose Node ?. local Scale Ġ= ĠVector 3 ( 0 . 0 5 5 f , Ġ 0 . 0 5 5 f , Ġ 0 . 0 5 5 f ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnose Node ?. local Rotation Ġ= ĠQuaternion . axis Angle ( Vector 3 ( 0 . 0 f , Ġ 0 . 0 f , Ġ 1 . 0 f ), Ġ 1 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Region Pose ( Region . MOUSE )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmouse Node ?. local Position Ġ= ĠVector 3 ( it . x , Ġit . y Ġ- Ġ 0 . 1 f , Ġit . z Ġ+ Ġ 0 . 0 1 5 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmouse Node ?. local Scale Ġ= ĠVector 3 ( 0 . 0 7 f , Ġ 0 . 0 7 f , Ġ 0 . 0 7 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Region Pose ( region : ĠRegion ): ĠVector 3 ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= Ġaugment ed Face ?. mesh Vertices ĊĠĠĠĠĠĠĠ Ġif Ġ( buffer Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( region ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRegion . LEFT _ EY E Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVector 3 ( buffer . get ( 3 7 4 Ġ* Ġ 3 ), Ġbuffer . get ( 3 7 4 Ġ* Ġ 3 Ġ+ Ġ 1 ), Ġbuffer . get ( 3 7 4 Ġ* Ġ 3 Ġ+ Ġ 2 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRegion . RIGHT _ EY E Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVector 3 ( buffer . get ( 1 4 5 Ġ* Ġ 3 ), Ġbuffer . get ( 1 4 5 Ġ* Ġ 3 Ġ+ Ġ 1 ), Ġbuffer . get ( 1 4 5 Ġ* Ġ 3 Ġ+ Ġ 2 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRegion . MOUSE Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVector 3 ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . get ( 1 1 Ġ* Ġ 3 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . get ( 1 1 Ġ* Ġ 3 Ġ+ Ġ 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . get ( 1 1 Ġ* Ġ 3 Ġ+ Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRegion . NO SE Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVector 3 ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . get ( 1 Ġ* Ġ 3 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . get ( 1 Ġ* Ġ 3 Ġ+ Ġ 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . get ( 1 Ġ* Ġ 3 Ġ+ Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} Ċ Ċ }