@@ -18,8 +18,25 @@ class MoveSequence extends Sequence
1818 vx = - vx if cx
1919 vy = - vy if cy
2020
21- if time < 0
22- coroutine.yield " more" , - time
21+ coroutine.yield " more" , - time if time < 0
22+
23+ shake : ( thing, total_time, mx= 5 , my= 5 , speed= 10 , decay_to= 0 ) ->
24+ ox, oy = thing. ox, thing. oy
25+
26+ time = total_time
27+ while time > 0
28+ time -= coroutine.yield !
29+ decay = math.min ( math.max ( time, decay_to) , 1 )
30+
31+ dx = decay * mx * math.sin ( time* 10 * speed)
32+ dy = decay * my * math.cos ( time* 10 * speed)
33+
34+ thing. ox = ox + dx
35+ thing. oy = oy + dy
36+
37+ thing. ox, thing. oy = ox, oy
38+ coroutine.yield " more" , - time if time < 0
39+
2340 }
2441
2542class Enemy extends Entity
@@ -39,19 +56,9 @@ class Enemy extends Entity
3956
4057 new : ( ... ) =>
4158 super ...
42- @sprite = with Spriter imgfy" img/sprite.png" , 10 , 13
43- . ox = 60
44-
45- @anim = @sprite \ seq { 0 , 1 } , 0.2
4659 @make_ai !
4760
48- make_ai : =>
49- @ai = MoveSequence ->
50- wait 0.5
51- dx, dy = unpack Vec2d . random 10
52- move self , dx, dy, 1.0
53- wait 0.5
54- again!
61+ make_ai : => error " implement me"
5562
5663 draw : =>
5764 @hit \ before! if @hit
@@ -95,3 +102,47 @@ class Enemy extends Entity
95102 @make_ai !
96103
97104
105+ module " enemies" , package.seeall
106+
107+ class GreenSlime extends Enemy
108+ new : ( ... ) =>
109+ super ...
110+ @sprite = with Spriter imgfy" img/sprite.png" , 10 , 13
111+ . ox = 60
112+ @anim = @sprite \ seq { 0 , 1 } , 0.2
113+
114+ make_ai : =>
115+ @ai = MoveSequence ->
116+ wait 0.5
117+ dx, dy = unpack Vec2d . random 10
118+ move self , dx, dy, 1.0
119+ wait 0.5
120+ again!
121+
122+
123+ class BlueSlime extends Enemy
124+ new : ( ... ) =>
125+ super ...
126+ @sprite = with Spriter imgfy" img/sprite.png" , 10 , 13
127+ . ox = 80
128+
129+ @anim = @sprite \ seq { 0 , 1 } , 0.2
130+
131+ make_ai : =>
132+ @ai = MoveSequence ->
133+ wait 0.5
134+ player = @world . game. player
135+ vec = @box \ vector_to player. box
136+
137+ if vec\ len! < 55
138+ shake self , 0.8 , 2 , 1
139+ @velocity = vec\ normalized! * 200
140+ tween @velocity , 0.5 , [ 1 ] : 0 , [ 2 ] : 0
141+ else
142+ dx, dy = unpack Vec2d . random 10
143+ move self , dx, dy, 1.0
144+ wait 0.5
145+
146+ again!
147+
148+
0 commit comments