@@ -272,37 +272,7 @@ <h3><a href="#a-monolithic-class" name="a-monolithic-class">A monolithic class</
272272 < span class ="n "> x_</ span > < span class ="p "> (</ span > < span class ="mi "> 0</ span > < span class ="p "> ),</ span > < span class ="n "> y_</ span > < span class ="p "> (</ span > < span class ="mi "> 0</ span > < span class ="p "> )</ span >
273273 < span class ="p "> {}</ span >
274274
275- < span class ="kt "> void</ span > < span class ="n "> update</ span > < span class ="p "> (</ span > < span class ="n "> World</ span > < span class ="o "> &</ span > < span class ="n "> world</ span > < span class ="p "> ,</ span > < span class ="n "> Graphics</ span > < span class ="o "> &</ span > < span class ="n "> graphics</ span > < span class ="p "> )</ span >
276- < span class ="p "> {</ span >
277- < span class ="c1 "> // Apply user input to hero's velocity.</ span >
278- < span class ="k "> switch</ span > < span class ="p "> (</ span > < span class ="n "> Controller</ span > < span class ="o "> ::</ span > < span class ="n "> getJoystickDirection</ span > < span class ="p "> ())</ span >
279- < span class ="p "> {</ span >
280- < span class ="k "> case</ span > < span class ="n "> DIR_LEFT</ span > :
281- < span class ="n "> velocity_</ span > < span class ="o "> -=</ span > < span class ="n "> WALK_ACCELERATION</ span > < span class ="p "> ;</ span >
282- < span class ="k "> break</ span > < span class ="p "> ;</ span >
283-
284- < span class ="k "> case</ span > < span class ="n "> DIR_RIGHT</ span > :
285- < span class ="n "> velocity_</ span > < span class ="o "> +=</ span > < span class ="n "> WALK_ACCELERATION</ span > < span class ="p "> ;</ span >
286- < span class ="k "> break</ span > < span class ="p "> ;</ span >
287- < span class ="p "> }</ span >
288-
289- < span class ="c1 "> // Modify position by velocity.</ span >
290- < span class ="n "> x_</ span > < span class ="o "> +=</ span > < span class ="n "> velocity_</ span > < span class ="p "> ;</ span >
291- < span class ="n "> world</ span > < span class ="p "> .</ span > < span class ="n "> resolveCollision</ span > < span class ="p "> (</ span > < span class ="n "> volume_</ span > < span class ="p "> ,</ span > < span class ="n "> x_</ span > < span class ="p "> ,</ span > < span class ="n "> y_</ span > < span class ="p "> ,</ span > < span class ="n "> velocity_</ span > < span class ="p "> );</ span >
292-
293- < span class ="c1 "> // Draw the appropriate sprite.</ span >
294- < span class ="n "> Sprite</ span > < span class ="o "> *</ span > < span class ="n "> sprite</ span > < span class ="o "> =</ span > < span class ="o "> &</ span > < span class ="n "> spriteStand_</ span > < span class ="p "> ;</ span >
295- < span class ="k "> if</ span > < span class ="p "> (</ span > < span class ="n "> velocity_</ span > < span class ="o "> <</ span > < span class ="mi "> 0</ span > < span class ="p "> )</ span >
296- < span class ="p "> {</ span >
297- < span class ="n "> sprite</ span > < span class ="o "> =</ span > < span class ="o "> &</ span > < span class ="n "> spriteWalkLeft_</ span > < span class ="p "> ;</ span >
298- < span class ="p "> }</ span >
299- < span class ="k "> else</ span > < span class ="k "> if</ span > < span class ="p "> (</ span > < span class ="n "> velocity_</ span > < span class ="o "> ></ span > < span class ="mi "> 0</ span > < span class ="p "> )</ span >
300- < span class ="p "> {</ span >
301- < span class ="n "> sprite</ span > < span class ="o "> =</ span > < span class ="o "> &</ span > < span class ="n "> spriteWalkRight_</ span > < span class ="p "> ;</ span >
302- < span class ="p "> }</ span >
303-
304- < span class ="n "> graphics</ span > < span class ="p "> .</ span > < span class ="n "> draw</ span > < span class ="p "> (</ span > < span class ="o "> *</ span > < span class ="n "> sprite</ span > < span class ="p "> ,</ span > < span class ="n "> x_</ span > < span class ="p "> ,</ span > < span class ="n "> y_</ span > < span class ="p "> );</ span >
305- < span class ="p "> }</ span >
275+ < span class ="kt "> void</ span > < span class ="n "> update</ span > < span class ="p "> (</ span > < span class ="n "> World</ span > < span class ="o "> &</ span > < span class ="n "> world</ span > < span class ="p "> ,</ span > < span class ="n "> Graphics</ span > < span class ="o "> &</ span > < span class ="n "> graphics</ span > < span class ="p "> );</ span >
306276
307277< span class ="nl "> private:</ span >
308278 < span class ="k "> static</ span > < span class ="k "> const</ span > < span class ="kt "> int</ span > < span class ="n "> WALK_ACCELERATION</ span > < span class ="o "> =</ span > < span class ="mi "> 1</ span > < span class ="p "> ;</ span >
@@ -319,8 +289,42 @@ <h3><a href="#a-monolithic-class" name="a-monolithic-class">A monolithic class</
319289</ pre > </ div >
320290
321291
322- < p > < code > Bjorn</ code > has an < code > update()</ code > method that gets called once per frame by the game. It
323- reads the joystick to determine how to accelerate the baker. Then it resolves
292+ < p > < code > Bjorn</ code > has an < code > update()</ code > method that gets called once per frame by the game:</ p >
293+ < div class ="codehilite "> < pre > < span class ="kt "> void</ span > < span class ="n "> Bjorn</ span > < span class ="o "> ::</ span > < span class ="n "> update</ span > < span class ="p "> (</ span > < span class ="n "> World</ span > < span class ="o "> &</ span > < span class ="n "> world</ span > < span class ="p "> ,</ span > < span class ="n "> Graphics</ span > < span class ="o "> &</ span > < span class ="n "> graphics</ span > < span class ="p "> )</ span >
294+ < span class ="p "> {</ span >
295+ < span class ="c1 "> // Apply user input to hero's velocity.</ span >
296+ < span class ="k "> switch</ span > < span class ="p "> (</ span > < span class ="n "> Controller</ span > < span class ="o "> ::</ span > < span class ="n "> getJoystickDirection</ span > < span class ="p "> ())</ span >
297+ < span class ="p "> {</ span >
298+ < span class ="k "> case</ span > < span class ="n "> DIR_LEFT</ span > :
299+ < span class ="n "> velocity_</ span > < span class ="o "> -=</ span > < span class ="n "> WALK_ACCELERATION</ span > < span class ="p "> ;</ span >
300+ < span class ="k "> break</ span > < span class ="p "> ;</ span >
301+
302+ < span class ="k "> case</ span > < span class ="n "> DIR_RIGHT</ span > :
303+ < span class ="n "> velocity_</ span > < span class ="o "> +=</ span > < span class ="n "> WALK_ACCELERATION</ span > < span class ="p "> ;</ span >
304+ < span class ="k "> break</ span > < span class ="p "> ;</ span >
305+ < span class ="p "> }</ span >
306+
307+ < span class ="c1 "> // Modify position by velocity.</ span >
308+ < span class ="n "> x_</ span > < span class ="o "> +=</ span > < span class ="n "> velocity_</ span > < span class ="p "> ;</ span >
309+ < span class ="n "> world</ span > < span class ="p "> .</ span > < span class ="n "> resolveCollision</ span > < span class ="p "> (</ span > < span class ="n "> volume_</ span > < span class ="p "> ,</ span > < span class ="n "> x_</ span > < span class ="p "> ,</ span > < span class ="n "> y_</ span > < span class ="p "> ,</ span > < span class ="n "> velocity_</ span > < span class ="p "> );</ span >
310+
311+ < span class ="c1 "> // Draw the appropriate sprite.</ span >
312+ < span class ="n "> Sprite</ span > < span class ="o "> *</ span > < span class ="n "> sprite</ span > < span class ="o "> =</ span > < span class ="o "> &</ span > < span class ="n "> spriteStand_</ span > < span class ="p "> ;</ span >
313+ < span class ="k "> if</ span > < span class ="p "> (</ span > < span class ="n "> velocity_</ span > < span class ="o "> <</ span > < span class ="mi "> 0</ span > < span class ="p "> )</ span >
314+ < span class ="p "> {</ span >
315+ < span class ="n "> sprite</ span > < span class ="o "> =</ span > < span class ="o "> &</ span > < span class ="n "> spriteWalkLeft_</ span > < span class ="p "> ;</ span >
316+ < span class ="p "> }</ span >
317+ < span class ="k "> else</ span > < span class ="k "> if</ span > < span class ="p "> (</ span > < span class ="n "> velocity_</ span > < span class ="o "> ></ span > < span class ="mi "> 0</ span > < span class ="p "> )</ span >
318+ < span class ="p "> {</ span >
319+ < span class ="n "> sprite</ span > < span class ="o "> =</ span > < span class ="o "> &</ span > < span class ="n "> spriteWalkRight_</ span > < span class ="p "> ;</ span >
320+ < span class ="p "> }</ span >
321+
322+ < span class ="n "> graphics</ span > < span class ="p "> .</ span > < span class ="n "> draw</ span > < span class ="p "> (</ span > < span class ="o "> *</ span > < span class ="n "> sprite</ span > < span class ="p "> ,</ span > < span class ="n "> x_</ span > < span class ="p "> ,</ span > < span class ="n "> y_</ span > < span class ="p "> );</ span >
323+ < span class ="p "> }</ span >
324+ </ pre > </ div >
325+
326+
327+ < p > It reads the joystick to determine how to accelerate the baker. Then it resolves
324328its new position with the physics engine. Finally, it draws Bjørn onto the
325329screen.</ p >
326330< p > The sample implementation here is trivially simple. There’s no gravity,
@@ -817,11 +821,9 @@ <h3><a href="#how-do-components-communicate-with-each-other" name="how-do-compon
817821</ li >
818822< li >
819823< p > < strong > By referring directly to each other:</ strong > </ p >
820- < ul >
821- < li >
822824< p > The idea here is that components that need to talk will have direct
823- references to each other without having to go through the container
824- object at all.</ p >
825+ references to each other without having to go through the container
826+ object at all.</ p >
825827< p > Let’s say we want to let Bjørn jump. The graphics code needs to know if
826828he should be drawn using a jump sprite or not. It can determine this by
827829asking the physics engine if he’s currently on the ground. An easy way
@@ -862,7 +864,7 @@ <h3><a href="#how-do-components-communicate-with-each-other" name="how-do-compon
862864
863865< p > When we construct Bjørn’s < code > GraphicsComponent</ code > , we’ll give it a reference
864866to his corresponding < code > PhysicsComponent</ code > .</ p >
865- </ li >
867+ < ul >
866868< li >
867869< p > < em > It’s simple and fast.</ em > Communication is a direct method call from one
868870 object to another. The component can call any method that is supported
0 commit comments