package Ġtab ool ib . module . effect . wing Ċ Ċ import Ġtab ool ib . common . platform . Proxy Player Ċ import Ġtab ool ib . common . util . Location Ċ import Ġtab ool ib . module . effect . Particle Sp awner Ċ import Ġtab ool ib . module . effect . Player Back Coordinate Ċ import Ġkotlin . math . cos Ċ import Ġkotlin . math . sin Ċ Ċ /** Ċ Ġ* Ġè¡¨ç¤º ä¸Ģä¸ª ç¿ ħ è Ĩ Ģ æķĪæŀľ Ċ Ġ* Ċ Ġ* Ġ@ author ĠSol dier Ċ Ġ*/ Ċ open Ġclass ĠW ing Render ( var Ġheight : ĠInt , Ġvar Ġwidth : ĠInt ) Ġ{ ĊĊĠĠĠ Ġvar Ġsize Ġ= Ġ 0 ĊĊĠĠĠ Ġval Ġmasks Ġ= ĠHashMap < Char , ĠParticle Sp awner >() ĊĊĠĠĠ Ġval Ġshape Ġ= ĠArray ( height Ġ+ Ġ 1 ) Ġ{ Ġget Space ( width ) Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ¯ı ä¸ª ç² Ĵ åŃĲ éĹ´ çļĦ éĹ´ éļĶ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġinterval : ĠDouble Ġ= Ġ 0 . 2 ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç¿ ħ è Ĩ Ģ å½ĵåīį æīĵå¼Ģ çļĦ è§Ĵ åº¦ Ġ ä¸ĢèĪ¬ æĥħåĨµä¸ĭ ä¸įéľĢè¦ģ ä¿®æĶ¹ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġangle Ġ= Ġ 0 ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç¿ ħ è Ĩ Ģ çħ ½ åĬ¨ æĹ ĭ è½¬ çļĦ è§Ĵ åº¦ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġoffset Ġ= Ġ 5 ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ·»åĬł ä¸Ģ è¡Į å½¢ çĬ¶ Ġæ¯ı ä¸ª char éĥ½ å¯¹åºĶ ä¸Ģç§į çī¹ æķĪ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd ( str : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadd ( str , Ġsize ) ĊĠĠĠĠĠĠĠ Ġsize ++ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® å½¢ çĬ¶ Ġæ¯ı ä¸ª char éĥ½ å¯¹åºĶ ä¸Ģç§į çī¹ æķĪ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd ( str : ĠString , Ġrow : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( row Ġ>= Ġheight ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror (" row ${ row } Ġnot Ġmatch Ġdefined Ġheight ($ height )") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( str . length Ġ!= Ġwidth ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror (" string Ġlength (${ str . length }) Ġnot Ġmatch Ġdefined Ġwidth ($ width )") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġshape [ row ] Ġ= Ġstr ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® shape ä¸Ń æŁĲä¸ª åŃĹç¬¦ å¯¹åºĶçļĦ ç² Ĵ åŃĲ æķĪæŀľ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoperator Ġfun Ġset ( char : ĠChar , Ġparticle : ĠParticle Sp awner ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmasks [ char ] Ġ= Ġparticle ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġset ( char : ĠChar , Ġfunc : Ġ( Location ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmasks [ char ] Ġ= Ġobject Ġ: ĠParticle Sp awner Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġspawn ( location : ĠLocation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunc ( location ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ¸ ²æŁĵ ä¸Ģä¸ª ç¿ ħ è Ĩ Ģ ĊĠĠĠĠ Ġ* Ġframe Ġ æİ¥åıĹ ä»İ 0 - 1 0 çļĦ æķ°åŃĹ Ġ å¯¹åºĶ ç¿ ħ è Ĩ Ģ çļĦ ä¸įåĲĮ çĬ¶æĢģ ĊĠĠĠĠ Ġ* Ġè®¾ç½® ä¸Ģä¸ª task Ġä»İ 0 - 1 0 æ¸²æŁĵ Ġ åį³åı¯ å½¢ æĪĲ ä¸Ģä¸ª å®Įæķ´ çļĦ ç¿ ħ è Ĩ Ģ ç² Ĵ åŃĲ åĬ¨çĶ» ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġrender ( player : ĠProxy Player , Ġframe : ĠInt , Ġx : ĠDouble Ġ= Ġ 0 . 0 , Ġy : ĠDouble Ġ= Ġ 0 . 0 , Ġz : ĠDouble Ġ= Ġ 0 . 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcoordinate Ġ= ĠPlayer Back Coordinate ( player . location . add ( x , Ġy , Ġz )) ĊĠĠĠĠĠĠĠ Ġif Ġ( frame Ġ% Ġ 5 Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġangle Ġ+= Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( angle Ġ% Ġ 3 0 Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoffset Ġ*= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġyaw Ġ= ĠMath . to Radians ( angle . toDouble ()) ĊĠĠĠĠĠĠĠ Ġfor Ġ( wx Ġin Ġ 0 Ġuntil Ġwidth ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( hy Ġin Ġ 0 Ġuntil Ġheight ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchar Ġ= Ġshape [ height Ġ- Ġ 1 Ġ- Ġhy ][ width Ġ- Ġwx Ġ- Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmask Ġ= Ġmasks [ char ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mask Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmask . spawn ( coordinate . new Location ( wx Ġ* Ġinterval Ġ* Ġcos ( yaw ), Ġhy Ġ* Ġinterval , Ġwx Ġ* Ġ- sin ( yaw ) Ġ* Ġinterval )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmask . spawn ( coordinate . new Location (- wx Ġ* Ġinterval Ġ* Ġcos ( yaw ), Ġhy Ġ* Ġinterval , Ġwx Ġ* Ġ- sin ( yaw ) Ġ* Ġinterval )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġget Space ( count : ĠInt ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append (" Ġ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġbuilder . toString () ĊĠĠĠ Ġ} Ċ }