2727
2828function EntityManager :addEntity (entity , type )
2929 if type == EntityTypes .PLAYER then
30- self .player = entity
30+ table.insert ( self .player , entity )
3131 elseif type == EntityTypes .ENEMY then
3232 table.insert (self .enemies , entity )
3333 elseif type == EntityTypes .WALL then
@@ -75,63 +75,69 @@ function EntityManager:unfreezeEnemies()
7575end
7676
7777function EntityManager :freezeGame ()
78- self .gameFrozen = true
79- self .player :freezeIfAlive ()
78+ self .gameFrozen = true
79+ for _ , e in pairs (self .player ) do
80+ e :freezeIfAlive ()
81+ end
8082end
8183
8284function EntityManager :unfreezeGame ()
83- self .gameFrozen = false
84- self .player :unfreeze ()
85+ self .gameFrozen = false
86+ for _ , e in pairs (self .player ) do
87+ e :unfreeze ()
88+ end
8589end
8690
8791function EntityManager :update (dt )
8892
89- if self .player then
90- self . player :update (dt )
93+ for _ , e in pairs ( self .player ) do
94+ e :update (dt )
9195 end
9296
93- if not self .gameFrozen then
94-
95- if self .player .state == " alive" then
96-
97- for i ,v in ipairs (self .walls ) do
98- if v :collide (self .player ) then
99- self .player :resetPosition ()
100- end
101- end
102-
103- for i ,v in ipairs (self .enemies ) do
104- if v :collide (self .player ) and self .player .state == " alive" then
105- self .player :die ()
106- end
107- end
108-
109- for i ,v in ipairs (self .flowers ) do
110- if v :collide (self .player ) then
111- v :onCollide ()
112- end
113- end
114-
115- for _ , t in pairs (self .turnstiles ) do
116- local row , col = getTileForPosition (self .player .x , self .player .y )
117- t :update (
118- row ,
119- col ,
120- self .player .orientation
121- )
122- end
123-
124- for i ,v in ipairs (self .gameObjects ) do
125- if v .type == " skull" and v :collide (self .player ) then
126- v :destroy ()
127- self .player :die ()
128- elseif v .type == " plant" and v :collide (self .player ) then
129- Event .dispatch (" plantEaten" , v )
130- v :destroy ()
131- end
132- end
97+ if not self .gameFrozen then
98+
99+ for _ , e in pairs (self .player ) do
100+ if e .state == " alive" then
101+
102+ for i ,v in ipairs (self .walls ) do
103+ if v :collide (e ) then
104+ e :resetPosition ()
105+ end
106+ end
107+
108+ for i ,v in ipairs (self .enemies ) do
109+ if v :collide (e ) and e .state == " alive" then
110+ e :die ()
111+ end
112+ end
113+
114+ for i ,v in ipairs (self .flowers ) do
115+ if v :collide (e ) then
116+ v :onCollide ()
117+ end
118+ end
119+
120+ for _ , t in pairs (self .turnstiles ) do
121+ local row , col = getTileForPosition (e .x , e .y )
122+ t :update (
123+ row ,
124+ col ,
125+ e .orientation
126+ )
127+ end
128+
129+ for i ,v in ipairs (self .gameObjects ) do
130+ if v .type == " skull" and v :collide (e ) then
131+ v :destroy ()
132+ e :die ()
133+ elseif v .type == " plant" and v :collide (e ) then
134+ Event .dispatch (" plantEaten" , v )
135+ v :destroy ()
136+ end
137+ end
138+ end
133139
134- end
140+ end
135141
136142 --- Update door positions based on turnstiles & their respective orientation
137143
@@ -160,11 +166,13 @@ function EntityManager:update(dt)
160166 end
161167 end
162168
163- for i ,v in ipairs (self .letters ) do
164- if v :collide (self .player ) then
165- v :onCollide ()
166- end
167- end
169+ for i ,v in ipairs (self .letters ) do
170+ for _ , e in pairs (self .player ) do
171+ if v :collide (e ) then
172+ v :onCollide ()
173+ end
174+ end
175+ end
168176
169177 self :updateTable (self .gameObjects , dt )
170178 end
@@ -181,7 +189,7 @@ function EntityManager:draw()
181189 self :drawTable (self .flowers )
182190 self :drawTable (self .letters )
183191 self :drawTable (self .enemies )
184- self . player : draw ( )
192+ self : drawTable ( self . player )
185193end
186194
187195
0 commit comments