@@ -4,18 +4,55 @@ export class Obstacle {
44 private scene : Phaser . Scene ;
55 private sprite : Phaser . Physics . Arcade . Sprite ;
66 private speed : number ;
7+ private obstacleType : string ;
8+ private movementType : string ;
9+ private acceleration : number = 0 ;
10+ private flutterAmplitude : number = 0 ;
11+ private flutterFrequency : number = 0 ;
12+ private flutterOffset : number = 0 ;
713
8- constructor ( scene : Phaser . Scene , x : number , type : string ) {
14+ constructor (
15+ scene : Phaser . Scene ,
16+ x : number ,
17+ obstacleType : string ,
18+ movementType : string ,
19+ score : number
20+ ) {
921 this . scene = scene ;
10- this . sprite = this . scene . physics . add . sprite ( x , - 128 , type ) ;
11- this . sprite . play ( `${ type } -fall` , true ) ;
22+ this . obstacleType = obstacleType ;
23+ this . movementType = movementType ;
24+ this . sprite = this . scene . physics . add . sprite ( x , - 16 , obstacleType ) ;
25+ this . sprite . play ( `${ obstacleType } -fall` , true ) ;
1226 this . sprite . setOrigin ( 0.5 , 1 ) ;
1327
14- this . speed = Phaser . Math . Between ( 30 , 60 ) ;
28+ const minSpeed = 30 + score * 0.5 ;
29+ const maxSpeed = 60 + score ;
30+
31+ this . speed = Phaser . Math . Between ( minSpeed , maxSpeed ) ;
32+ this . acceleration = 0 ;
33+ if ( movementType === "fast" ) {
34+ this . acceleration = 200 + score * 5 ;
35+ }
36+ if ( movementType === "flutter" ) {
37+ this . flutterAmplitude = Phaser . Math . Between ( 5 , 15 ) ;
38+ this . flutterFrequency = Phaser . Math . FloatBetween ( 3 , 6 ) ;
39+ this . flutterOffset = Phaser . Math . FloatBetween ( 0 , Math . PI * 2 ) ;
40+ }
1541 }
1642
1743 update ( deltaSeconds : number ) {
18- this . sprite . setVelocityY ( this . speed ) ;
44+ if ( ! this . sprite . active ) return ;
45+ if ( this . movementType === "fast" ) {
46+ this . speed += this . acceleration * deltaSeconds ;
47+ }
48+ if ( this . movementType === "flutter" ) {
49+ const time = this . scene . time . now / 1000 ;
50+ const offset =
51+ Math . sin ( time * this . flutterFrequency + this . flutterOffset ) *
52+ this . flutterAmplitude ;
53+ this . sprite . x += offset * deltaSeconds ;
54+ }
55+ this . sprite . y += this . speed * deltaSeconds ;
1956
2057 if ( this . sprite . y > this . scene . cameras . main . height + 128 ) {
2158 this . sprite . destroy ( ) ;
0 commit comments