/* Ċ Ġ* ĠFX GL Ġ- ĠJava FX ĠGame ĠLibrary . ĠThe ĠMIT ĠLicense Ġ( MIT ). Ċ Ġ* ĠCopyright Ġ( c ) ĠAl mas B Ġ( al mas lvl @ gmail . com ). Ċ Ġ* ĠSee ĠLICENSE Ġfor Ġdetails . Ċ Ġ*/ Ċ Ċ package Ġcom . al mas b . fx gl . cut scene Ċ Ċ import Ġcom . al mas b . fx gl . animation . Animation Ċ import Ġcom . al mas b . fx gl . animation . Animation Builder Ċ import Ġcom . al mas b . fx gl . input . User Action Ċ import Ġcom . al mas b . fx gl . input . view . Key View Ċ import Ġcom . al mas b . fx gl . scene . Scene Service Ċ import Ġcom . al mas b . fx gl . scene . Sub Scene Ċ import Ġjavafx . geometry . Point 2 D Ċ import Ġjavafx . scene . input . KeyCode Ċ import Ġjavafx . scene . paint . Color Ċ import Ġjavafx . scene . shape . Rectangle Ċ import Ġjavafx . scene . text . Font Ċ import Ġjavafx . scene . text . Text Ċ import Ġjavafx . util . Duration Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* Ċ Ġ* Ġ@ author ĠAl mas ĠB aim ag amb et ov Ġ( al mas lvl @ gmail . com ) Ċ Ġ*/ Ċ class ĠCut scene Scene ( private Ġval Ġscene Service : ĠScene Service ) Ġ: ĠSub Scene () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġanimation : ĠAnimation < *> ĊĠĠĠ Ġprivate Ġval Ġanimation 2 : ĠAnimation < *> ĊĊĠĠĠ Ġprivate Ġval Ġtext RP G Ġ= ĠText () ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcut scene : ĠCut scene ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtop Line Ġ= ĠRectangle ( scene Service . pref Width , Ġ 1 5 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġtop Line . translate Y Ġ= Ġ- 1 5 0 . 0 ĊĊĠĠĠĠĠĠĠ Ġval Ġbot Line Ġ= ĠRectangle ( scene Service . pref Width , Ġ 2 0 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġbot Line . translate Y Ġ= Ġscene Service . pref Height ĊĊĠĠĠĠĠĠĠ Ġanimation Ġ= ĠAnimation Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. duration ( Duration . seconds ( 0 . 5 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. translate ( top Line ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. from ( Point 2 D ( 0 . 0 , Ġ- 1 5 0 . 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to ( Point 2 D . ZERO ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġanimation 2 Ġ= ĠAnimation Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. duration ( Duration . seconds ( 0 . 5 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. translate ( bot Line ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. from ( Point 2 D ( 0 . 0 , Ġscene Service . pref Height )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to ( Point 2 D ( 0 . 0 , Ġscene Service . pref Height Ġ- Ġ 2 0 0 . 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġtext RP G . fill Ġ= ĠColor . WHITE ĊĠĠĠĠĠĠĠ Ġtext RP G . font Ġ= ĠFont . font ( 1 8 . 0 ) ĊĠĠĠĠĠĠĠ Ġtext RP G . wrapping Width Ġ= Ġscene Service . pref Width Ġ- Ġ 1 5 5 . 0 ĊĠĠĠĠĠĠĠ Ġtext RP G . translate X Ġ= Ġ 5 0 . 0 ĊĠĠĠĠĠĠĠ Ġtext RP G . translate Y Ġ= Ġscene Service . pref Height Ġ- Ġ 1 6 0 . 0 ĊĠĠĠĠĠĠĠ Ġtext RP G . opacity Ġ= Ġ 0 . 0 ĊĊĠĠĠĠĠĠĠ Ġval Ġkey View Ġ= ĠKey View ( KeyCode . ENTER , ĠColor . GREEN YELLOW , Ġ 1 8 . 0 ) ĊĠĠĠĠĠĠĠ Ġkey View . translate X Ġ= Ġscene Service . pref Width Ġ- Ġ 8 0 . 0 ĊĠĠĠĠĠĠĠ Ġkey View . translate Y Ġ= Ġscene Service . pref Height Ġ- Ġ 4 0 . 0 ĊĠĠĠĠĠĠĠ Ġkey View . opacity Property (). bind ( text RP G . opacity Property ()) ĊĊĠĠĠĠĠĠĠ Ġcontent Root . children . addAll ( top Line , Ġbot Line , Ġtext RP G , Ġkey View ) ĊĊĠĠĠĠĠĠĠ Ġinput . addAction ( object Ġ: ĠUser Action (" Next ĠR PG ĠLine ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Action Begin () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Line () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, ĠKeyCode . ENTER ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcenter Text Bind ( text : ĠText , Ġx : ĠDouble , Ġy : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtext . layout Bounds Property (). addListener Ġ{ Ġ_, Ġ_, Ġbounds Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext . translate X Ġ= Ġx Ġ- Ġbounds . width Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext . translate Y Ġ= Ġy Ġ- Ġbounds . height Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate () Ġ{ ĊĠĠĠĠĠĠĠ Ġanimation 2 . on Finished Ġ= ĠRunnable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Open () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġanimation . start () ĊĠĠĠĠĠĠĠ Ġanimation 2 . start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonUpdate ( tp f : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠ Ġanimation . on Update ( tp f ) ĊĠĠĠĠĠĠĠ Ġanimation 2 . on Update ( tp f ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( message . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext RP G . text Ġ+= Ġmessage . poll () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġend Cut scene () Ġ{ ĊĠĠĠĠĠĠĠ Ġtext RP G . opacity Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġanimation 2 . on Finished Ġ= ĠRunnable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscene Service . pop Sub Scene () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonClose () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġanimation . start Reverse () ĊĠĠĠĠĠĠĠ Ġanimation 2 . start Reverse () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart ( cut scene : ĠCut scene ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . cut scene Ġ= Ġcut scene ĊĊĠĠĠĠĠĠĠ Ġnext Line () ĊĊĠĠĠĠĠĠĠ Ġscene Service . push Sub Scene ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġcurrent Line Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdialog Line : ĠCut scene Dialog Line ĊĠĠĠ Ġprivate Ġval Ġmessage Ġ= ĠArray Deque < Char >() ĊĊĠĠĠ Ġprivate Ġfun Ġnext Line () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġdo Ġnot Ġallow Ġto Ġmove Ġto Ġnext Ġline Ġwhile Ġthe Ġtext Ġanimation Ġis Ġgoing ĊĠĠĠĠĠĠĠ Ġif Ġ( message . isNotEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĊĠĠĠĠĠĠĠ Ġif Ġ( current Line Ġ< Ġcut scene . lines . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog Line Ġ= Ġcut scene . lines [ current Line ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog Line . data . forEach Ġ{ Ġmessage . add Last ( it ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext RP G . text Ġ= Ġdialog Line . owner Ġ+ Ġ": Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Line ++ ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġend Cut scene () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Open () Ġ{ ĊĠĠĠĠĠĠĠ Ġtext RP G . opacity Ġ= Ġ 1 . 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠonClose () Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrent Line Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġmessage . clear () ĊĠĠĠ Ġ} Ċ }